【问题标题】:Changing variable with loop in VBA mysql query?在 VBA mysql 查询中使用循环更改变量?
【发布时间】:2012-10-31 04:51:52
【问题描述】:

我在 VBA 中创建了一个循环,它应该更改代码的 strSql 部分中的变量 (j)。我在 excel 表上的输出列都是相同的。这意味着在 strsql 字符串中不考虑变化的变量 j。有谁知道在这种情况下如何使用适当的变化变量?提前致谢

设置 rs = 新 ADODB.Recordset

     For j = 1 To 6


    strSql = "SELECT COUNT(*) FROM( " & _
     "SELECT COUNT(*) as nbp FROM `order`   " & _
     "JOIN user ON user.id = order.destination_id   " & _
     "AND DATEDIFF(date_added , register_date) <= j" & _
     "GROUP BY destination_id)  c  " & _
     "GROUP BY nbp " & _
     "ORDER BY c.nbp ASC ; "



    rs.Open strSql, oConn, adOpenDynamic, adLockPessimistic

    res = rs.GetRows

    rs.Close

    For i = 1 To 2
    Cells(i, j) = res(0, i - 1)
    Next i
    Next j

【问题讨论】:

    标签: mysql vba excel


    【解决方案1】:

    你需要把 j 移出你的字符串

    register_date)

    register_date)

    【讨论】:

    • 我试过了,但仍然收到错误消息。 ODCB 驱动程序不支持请求的属性。但是thnaks
    • ODCB 驱动程序不支持请求的属性
    • 嗯,这是一个完全不同的问题......答案解决了你的问题,所以我赞成。
    • 嗯,我认为错误与 j 的使用有关,您可以提取字符串并直接对数据库执行它,这应该表明语句在哪里失败?
    • 在 rs.getrows 上放一个断点并检查 strSql 变量以获取 sql 语句,然后使用您对 mysql 的任何 ide 直接针对 db 运行该语句并报告查看错误的位置跨度>
    【解决方案2】:

    相当讨厌,但在 ado 的 vba 中,我想这是最快的 hack...您不一定需要将 j 转换为字符串,但我宁愿明确...

    strSql = "SELECT COUNT(*) FROM( " & _
         "SELECT COUNT(*) as nbp FROM `order`   " & _
         "JOIN user ON user.id = order.destination_id   " & _
         "AND DATEDIFF(date_added , register_date) <= " & _ 
         CStr(j) & " " & _
         "GROUP BY destination_id)  c  " & _
         "GROUP BY nbp " & _
         "ORDER BY c.nbp ASC ; "
    

    【讨论】:

    • 谢谢 rene。当我使用您的方法时,您仍然收到错误消息
    • 另外你需要在 CSTR(J) 之后有一个空格,否则 group by 将无法被识别...CStr(j) & " " & _ "GROUP BY destination_id) c " & _
    猜你喜欢
    • 2014-07-01
    • 2011-01-04
    • 2019-02-21
    • 2015-07-05
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多