【问题标题】:Updating records with ADODB Recordset使用 ADODB 记录集更新记录
【发布时间】:2015-05-29 13:20:27
【问题描述】:

我需要更新 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 Text Driver] 查询表达式 '(item=Pa_RaM001 AND 样式) 中的语法错误(缺少运算符) 代码=Pa_RaM002 AND Sku No=Pa_RaM003'。

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

rs.MoveFirst
rs.Fields(0) = 2

然后就可以了。我在互联网上查看了示例,但我看不出我做错了什么。我将不胜感激。

【问题讨论】:

  • 使用 ADODB 更新平面 CSV 文件中的记录真的是目标吗?如果是这样,请不要那样做。您的具体问题似乎是 Text-DB-Provider 中的错误。在更新临时表时,它不会将字段名称包含在括号 [] 中。所以像“Style Code”和“Sku No”这样的字段名称会失败。可以称其为错误。但是为什么 Text-DB-Provider 应该更新一些东西呢?并发使用时如何处理游标和锁定?

标签: sql vba excel


【解决方案1】:

您可以使用以下方法通过 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

【讨论】:

  • 我真的不想更新原始的 CSV 文件,但是通过创建一个临时文件来完成这项工作
猜你喜欢
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
相关资源
最近更新 更多