我在下面有一个VBA,它被设计成循环遍历每个WS并插入每个数据集的前4行。
这在with中可以很好地工作,但这只允许我指定一个表,而不是遍历所有表。我去掉了with,得到了“无效或不合格的引用”。在这之后我添加了ActiveSheet。添加到“Cells”方法中。
现在我得到了下面的错误:
"ODBC驱动程序不支持请求的属性“
现在如何确定.Cells的资格?或者还有其他选择吗?我使用的是excel 2010和mysql。
Public Function InsertData()
Dim rs As ADODB.Recordset
Dim oConn As ADODB.Connection
Dim WS As Worksheet
Dim strsql As String
Set rs = New ADODB.Recordset
Set oConn = New ADODB.Connection
oConn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & _
"SERVER=server.host.com;" & _
"DATABASE=datatime;" & _
"USER=boulders;" & _
"PASSWORD=rocks;" & _
"Option=3"
For Each WS In ActiveWorkbook.Worksheets
For rowcursor = 4 To 8
strsql = "INSERT INTO workflow_metrics (id, code) " & _
"VALUES (" & (ActiveSheet.Cells(rowcursor, 1)) & "," & _
"'" & (ActiveSheet.Cells(rowcursor, 2)) & "')"
rs.Open strsql, oConn, adOpenDynamic, adLockOptimistic
Next
Next WS
End Function发布于 2011-12-02 07:19:56
我认为你想要:
Param1.Value = WS.Cells(rowcursor, 1)等。
发布于 2011-12-02 07:05:14
现在如何鉴定.Cells?或者还有其他选择吗?
这不是问题所在。问题是您试图使用数据修改查询(INSERT)打开记录集(rs.open)。
对于DML,您需要使用ADODB.Command.Execute。
此外,如果您无法控制电子表格中的值,那么您将面临SQL注入攻击。您应该改用参数化查询。
Dim Cmd As ADODB.Command
Set Cmd = New ADODB.Command
Cmd.ActiveConnection = oConn
Cmd.CommandText = "INSERT INTO workflow_metrics (id, code) VALUES (?,?)"
Set Param1 = Cmd.CreateParameter(, adInteger, adParamInput, 5)
Set Param2 = Cmd.CreateParameter(, adInteger, adParamInput, 5)
For Each WS In ActiveWorkbook.Worksheets
For rowcursor = 4 To 8
Param1.Value = WS.Cells(rowcursor, 1) 'As Doug Glancy this should be WS not ActiveSheet'
Param2.Value = WS.Cells(rowcursor, 2)
cmd1.Execute
Next
Next WShttps://stackoverflow.com/questions/8349548
复制相似问题