我有一个简单的宏,可以将Excel中的数据插入MySQL数据库:
Dim conn As ADODB.Connection
Dim sqlstr As String
Dim rs As ADODB.Recordset
Dim Crow As Long, Lrow As Long
Dim Item As String, Price As Long, weight As Long, category As String
Set conn = New ADODB.Connection
conn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & _
"SERVER=localhost;" & _
"PORT=3306" & _
"DATABASE=spendings;" & _
"USER=root;" & _
"PASSWORD=root;" & _
"Option=3"
Set rs = New ADODB.Recordset
Lrow = Cells(Rows.Count, 1).End(xlUp).Row
For Crow = Lrow To 2 Step -1
Item = Sheets("Sheet1").Range("A" & Crow).Value
Price = Sheets("Sheet1").Range("B" & Crow).Value
weight = Sheets("Sheet1").Range("C" & Crow).Value
category = Sheets("Sheet1").Range("D" & Crow).Value
sqlstr = "INSERT INTO items VALUES('" & Item & "','" & Price & "','" & weight _
& "', (SELECT idCategory FROM category WHERE Name='" & category & "'))"
rs.Open sqlstr, conn, adOpenStatic
Next
我在以下一行上遇到错误:
rs.Open sqlstr, conn, adOpenStatic
,不知道如何进行。
答案 0 :(得分:2)
正如其他人所建议的那样,您的SQL字符串肯定存在问题。查看INSERT INTO SELECT语句here的语法。在将它们放入代码之前,在诸如MySQL Workbench之类的数据库设计工具中测试和调试SQL字符串通常很有用。您还可以debug.print(sqlstr)
来查看字符串返回的内容,例如:
sqlstr = "INSERT INTO items ('" & Item & "','" & Price & "','" & weight _
& "', (SELECT idCategory FROM category WHERE Name='" & category & "'))"
debug.print(sqlstr)
rs.Open sqlstr, conn, adOpenStatic
我不知道您的数据库结构,但是我可以在您的字符串中看到一些语法错误。在列之前,您不需要VALUES(请参阅上面的文档)。另外,您尝试将数据插入3列:
INSERT INTO items VALUES('" & Item & "','" & Price & "','" & weight _ & "')
但是您的SELECT查询仅返回1列:
SELECT idCategory FROM category WHERE Name='" & category & "'.
发布debug.print输出可能有助于进一步调试。
答案 1 :(得分:0)
查询错误。谢谢。固定为
sqlstr = "INSERT INTO items (Name, Price, weight, store_Id, category_Id) VALUES('" & Item & "','" & Price & "','" & weight_
& "', (SELECT idCategory FROM category WHERE Name='" & category & "'),'" & store & "');"
复制到工作台中,它可以工作: mysql
但是我仍然遇到相同的错误:运行时错误-2147217887(80040e21)