1

我是 VBA 的初学者。我设法在 VBA 中运行 mySQL 查询,但我在所有 excel 列结果中得到相同的数字。我不确定我应该在代码中更改什么以显示不同的结果。有人可以帮帮我吗?

    strSql = "SELECT COUNT(*), destination_id FROM `order`   " & _
     "JOIN user ON user.id = order.destination_id   " & _
     "WHERE payment_status = 'pay'  " & _
     "AND email NOT LIKE '%@thelts.com' " & _
     "AND email NOT LIKE '%trend.com' " & _
     "AND `is_dinstinct` IS NULL; "



    rs.Open strSql, oConn, adOpenDynamic, adLockPessimistic

    res = rs.GetRows

    rs.Close

    Range("A1", "B6") = res(0, 0)
4

2 回答 2

0

两件事,看起来你在你的 sql 中缺少一个 GROUP BY destination_id (虽然 thst 在 mysql 中可能是合法的,我是一个 sql server 伙计)但我相信你真正的问题是在线......

范围(“A1”,“B6”)= res(0, 0)

您在这里所说的是将结果放在范围的每个单元格中的位置 0, 0 处。

你可以试试

范围("a1") = res(0, 0)

范围("b6") = res(0, 1)

于 2012-10-29T18:11:39.787 回答
0

CopyFromRecordset是我(&@TimWilliams)用来将结果写入范围的方法 - 您可能会发现它比先加载到数组中更有帮助

excel帮助中的一个例子:

For iCols = 0 to rs.Fields.Count - 1
    ws.Cells(1, iCols + 1).Value = rs.Fields(iCols).Name
Next
ws.Range(ws.Cells(1, 1), ws.Cells(1, rs.Fields.Count)).Font.Bold = True
ws.Range("A2").CopyFromRecordset rs 

将此方法放在您的代码中,

strSql = "SELECT COUNT(*), destination_id FROM `order`   " & _
"JOIN user ON user.id = order.destination_id   " & _
"WHERE payment_status = 'pay'  " & _
"AND email NOT LIKE '%@thelts.com' " & _
"AND email NOT LIKE '%trend.com' " & _
"AND `is_dinstinct` IS NULL; "

rs.Open strSql, oConn, adOpenDynamic, adLockPessimistic

Range("A1").CopyFromRecordset rs 
于 2012-10-29T19:49:04.140 回答