Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用ADODB记录集更新记录_Sql_Vba_Excel - Fatal编程技术网

Sql 使用ADODB记录集更新记录

Sql 使用ADODB记录集更新记录,sql,vba,excel,Sql,Vba,Excel,我需要更新Excel VBA中的记录集。我从CSV中提取数据,并使用文本驱动程序连接到文件。这是我与文件、记录集和更新代码的连接 Dim con As New ADODB.Connection Dim rs As New ADODB.Recordset con.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=C:\Users\jasons\Documents\sl;Extensions=csv;" rs.Open "SELECT

我需要更新Excel VBA中的记录集。我从CSV中提取数据,并使用文本驱动程序连接到文件。这是我与文件、记录集和更新代码的连接

Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset
con.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=C:\Users\jasons\Documents\sl;Extensions=csv;"

rs.Open "SELECT *, 0 As item FROM Pct.csv where [Sku No] in ('123455','123456')", con, adOpenDynamic, adLockOptimistic


rs.MoveFirst
Do Until rs.EOF
rs.Fields(0) = 2
rs.MoveNext
Loop
但是我一直在
rs.MoveNext
行中收到以下错误消息

-2147467259-[Microsoft][ODBC文本驱动程序]查询表达式(item=Pa_RaM001和Style)中出现语法错误(缺少运算符) 代码=Pa_RaM002,Sku编号=Pa_RaM003'

当我删除循环并将第一条记录更新为

rs.MoveFirst
rs.Fields(0) = 2

然后它就开始工作了。我在互联网上查看了一些例子,但我看不出我做错了什么。我将非常感谢您的帮助。

您可以使用以下方法使用ADODB生成CSV文件。更新CSV文件肯定是一个非常糟糕的主意。在我看来,更改表也是不可能的。因此,该方法将创建一个新的临时表使用新字段创建y表。然后从旧表复制数据并设置新字段的数据。最后将临时表交换到CSV文件中

Sub ADODB_CSV()

 Dim con As New ADODB.Connection

 con.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=C:\Users\jasons\Documents\sl;Extensions=csv;"

 On Error Resume Next
 con.Execute "DROP TABLE temp.csv"
 On Error GoTo 0

 con.Execute "CREATE TABLE temp.csv (item integer, [Style Code] text, [Sku No] text)"

 con.Execute "INSERT INTO temp.csv (item, [Style Code], [Sku No]) SELECT 0, [Style Code], [Sku No] FROM Pct.csv WHERE [Sku No] NOT IN ('123455','123456')"
 con.Execute "INSERT INTO temp.csv (item, [Style Code], [Sku No]) SELECT 2, [Style Code], [Sku No] FROM Pct.csv WHERE [Sku No] IN ('123455','123456')"

 con.Execute "DROP TABLE Pct.csv"
 con.Execute "CREATE TABLE Pct.csv (item integer, [Style Code] text, [Sku No] text)"

 con.Execute "INSERT INTO Pct.csv SELECT * FROM temp.csv"

 con.Execute "DROP TABLE temp.csv"

 con.Close

End Sub

使用ADODB更新平面CSV文件中的记录真的是目标吗?如果是,请不要这样做。您的具体问题似乎是文本数据库提供程序中的一个错误。在更新临时表时,它不会将字段名包装在方括号[]中。因此字段名如“样式代码”和“Sku编号”将失败。可以称之为错误。但是为什么文本数据库提供程序要更新某些内容?在并发使用时,它如何处理游标和锁定?我并不真的想更新原始CSV文件,但通过创建临时文件来完成这项工作