Привет, У меня есть существующий лист Excel с некоторыми данными внутри, и теперь я хочу выполнять запросы непосредственно из VBA. Это то, что я сейчас:Excel VBA SQL-запрос ADODB
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, должно быть text, а не int? Кроме того, когда я выполняю этот запрос:
Select eventid,param0,param1,count(*) From [Sheet1$] where eventid='search' group by param0, param1 order by count(*) desc;
Он дает «ошибку автоматизации». Я искал его, но не смог найти подходящее решение. Может кто-нибудь помочь с этим? Спасибо!
Редактировать: все три запроса дают правильные результаты в workbench MySQL. Теперь мне нужно выполнить запрос непосредственно в листе Excel.
Спасибо! Я удалил первый eventid, а затем он работает. – richards