使用ADODB Recordset更新记录

时间:2015-05-28 07:55:09

标签: sql excel vba excel-vba

我需要在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 AND St​​yle   Code = Pa_RaM002 AND Sku No = Pa_RaM003'。

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

rs.MoveFirst
rs.Fields(0) = 2

然后它的工作原理。我在网上看了一些例子,但我看不出我做错了什么。我将不胜感激。

1 个答案:

答案 0 :(得分:3)

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