2011-12-01 114 views
0

我有这个VBA下面,是设计循环通过每个WS,并插入每个数据集的前4行。。细胞VBA参考问题

这可以很好地与一个,但只能让我指定一张,而不是通过他们所有。我带走了,并得到“无效或不合格的参考”。在此之后,我添加了ActiveSheet。到“细胞”方法。

现在我得到下面这个错误:

“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 

回答

5

我想你想:

Param1.Value = WS.Cells(rowcursor, 1) 

+0

+1你对'WS'而不是ActiveSheet.Cells正确,但会导致'ODBC驱动程序不支持所请求的属性' –

+0

太棒了,换出了ActiveSheet 。为WS。它效果很好! – JoshG

+0

@ConradFrix,我不知道它会修复ODBC错误。 –

1

我现在该如何资格.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 WS 
+0

嗯,以及它与声明的一个伟大的里面,我们一直在使用上的几件事情该模型一会儿。数据类型在mysql中是受限制的,如果这就是你控制值的含义。 基于我从微软收集的信息,.Cells本身不能在with语句之外工作。我可以用什么方法来引用它? 感谢您的帮助。 – JoshG

+0

谢谢,我会看看这种方法。 – JoshG

+0

我的意思是控制电子表格的值是你可以确保一个单元格不包含');删除表格工作流指标; - ' –