【发布时间】:2016-02-11 15:10:33
【问题描述】:
您好,我有一个现有的 Excel 表,里面有一些数据,现在我想直接从 VBA 执行查询。这就是我现在拥有的:
Private Sub CommandButton1_Click()
Dim sSQLQry As String
Dim ReturnArray
Dim Conn As New ADODB.Connection
Dim mrs As New ADODB.Recordset
Dim DBPath As String, sconnect As String
Dim newSheet As Worksheet
'DBPath = ThisWorkbook.FullName
DBPath = "C:\someData.xlsm"
sconnect = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & DBPath & ";HDR=Yes';"
Conn.Open sconnect
sSQLSting = "SELECT username,count(username) FROM [Sheet1$] group by username order by count(username) desc;"
mrs.Open sSQLSting, Conn
Set newSheet = Sheets.Add
ActiveSheet.Range("A1").CopyFromRecordset mrs
mrs.Close
Conn.Close
End Sub
这个查询执行得很好并且给出了想要的结果,但是当我把它改成这个时:
Select param0,count(param0) From [Sheet1$] where eventid='addToCart' group by param0 order by count(param0) desc;
因为param0是这样的:大部分是数字,但也有一些是数字和字符混合在一起的,所以查询结果只返回纯数字条目。那么如何配置数据库以使其识别 param0 字段应该是文本,而不是 int?此外,当我执行此查询时:
Select eventid,param0,param1,count(*) From [Sheet1$] where eventid='search' group by param0, param1 order by count(*) desc;
它给出了“自动化错误”。我搜索了它,但找不到合适的解决方案。有人能帮忙吗?谢谢!
编辑:所有三个查询在 MySQL 工作台中都给出了正确的结果。现在我需要直接在 Excel 工作表中执行查询。
【问题讨论】: