Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用VBA将数据插入MySQL数据库_Mysql_Vba - Fatal编程技术网

用VBA将数据插入MySQL数据库

用VBA将数据插入MySQL数据库,mysql,vba,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.O

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

也不知道该怎么做

正如其他人所建议的,您的SQL字符串肯定有问题。检查INSERT INTO SELECT语句的语法。在数据库设计工具中测试和调试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
我不知道您的数据库结构,但我可以在字符串中看到一些语法错误。在列之前不需要值(参见上面的文档)。此外,您正在尝试将数据插入3列:

INSERT INTO items VALUES('" & Item & "','" & Price & "','" & weight _ & "')
但您的SELECT查询仅返回1列:

SELECT idCategory FROM category WHERE Name='" & category & "'.

发布debug.print输出可能有助于进一步调试。

正如其他人所建议的,您的SQL字符串肯定有问题。检查INSERT INTO SELECT语句的语法。在数据库设计工具中测试和调试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
我不知道您的数据库结构,但我可以在字符串中看到一些语法错误。在列之前不需要值(参见上面的文档)。此外,您正在尝试将数据插入3列:

INSERT INTO items VALUES('" & Item & "','" & Price & "','" & weight _ & "')
但您的SELECT查询仅返回1列:

SELECT idCategory FROM category WHERE Name='" & category & "'.

发布debug.print输出可能有助于进一步调试。

查询错误。非常感谢。固定到

sqlstr = "INSERT INTO items (Name, Price, weight, store_Id, category_Id) VALUES('" & Item & "','" & Price & "','" & weight_
 & "', (SELECT idCategory FROM category WHERE Name='" & category & "'),'" & store & "');"
复制到workbench中,它可以工作:


但我仍然得到相同的错误:运行时错误-2147217887(80040e21)

查询错误。非常感谢。固定到

sqlstr = "INSERT INTO items (Name, Price, weight, store_Id, category_Id) VALUES('" & Item & "','" & Price & "','" & weight_
 & "', (SELECT idCategory FROM category WHERE Name='" & category & "'),'" & store & "');"
复制到workbench中,它可以工作:


但我仍然收到相同的错误:运行时错误-2147217887(80040e21)

请发布错误,同时检查sqlstr变量中的内容并将其复制出来,查看不在宏中时运行是否正常。这似乎是查询中的错误。通过在任何单元格或即时窗口中首先打印excel在SSMS中形成的查询,尝试该查询。您的查询已关闭。首先,在insert语句的values部分的子查询中只选择一个值。第二,您的子查询也需要用()包装。第三,insert into select语句不使用语句的值部分。长话短说,您的sql技能需要重新学习,但我们都从某个地方开始:)谢谢。我修复了查询,并将其复制到workbench中。但是,在运行宏时仍然会出现相同的错误:运行时错误-2147217887(80040e21)请发布错误,同时检查sqlstr变量中的内容并将其复制出来,查看不在宏中时运行是否正常。查询中似乎有错误。通过在任何单元格或即时窗口中首先打印excel在SSMS中形成的查询,尝试该查询。您的查询已关闭。首先,在insert语句的values部分的子查询中只选择一个值。第二,您的子查询也需要用()包装。第三,insert into select语句不使用语句的值部分。长话短说,您的sql技能需要重新学习,但我们都从某个地方开始:)谢谢。我修复了查询,并将其复制到workbench中。但是,运行宏时仍然会出现相同的错误:运行时错误-2147217887(80040e21)