使用VBA将数据插入MySQL数据库

时间:2019-06-22 09:03:20

标签: mysql vba

我有一个简单的宏,可以将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

,不知道如何进行。

2 个答案:

答案 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)