sql - 使用 ADODB Recordset 更新记录

标签 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 *, 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] Syntax error (missing operator) in query expression '(item=Pa_RaM001 AND Style Code=Pa_RaM002 AND Sku No=Pa_RaM003'.

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

rs.MoveFirst
rs.Fields(0) = 2

然后就可以了。我在互联网上查找示例,但我看不出我做错了什么。如果有任何帮助,我将不胜感激。

最佳答案

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

关于sql - 使用 ADODB Recordset 更新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30500455/

相关文章:

mysql查询匹配字符串数组与数据库

mysql - 如何在 mysql 连接中选择可能不存在的行

vba - 如何修改文本导入向导 VBA 代码以更改特定列的列数据格式?

excel - 错误 #1004 : Application-defined or object-defined error. 宏将停止

excel - 将 birt 报告(使用 birt-viewer)直接导出为 excel(或任何)格式

sql - 如何在 MySQL 中搜索多个列?

sql - 如何在TSQL中的表中输入日期? (将数据类型 varchar 转换为 datetime 时出错)

excel - 在 If 和 For 上阻止失败

excel - Excel 下拉框是否可以像带有用于多项选择的复选框的列表框一样?

excel - 双 'for' 循环 - 只有内部循环在工作