2016-11-03 4 views
1

Я хочу запросить таблицу SQL Server и сохранить результаты этого запроса в массиве. Я только возвращаю Distinct() из одного поля, поэтому он должен быть довольно прямым. Мой синтаксис дает ошибкуЗапрос таблицы SQL и сохранение результатов в массиве

Invalid Qualifier

На этой строке кода Set r = conn.Execute и подчеркивает слово conn Как я должен переписать этот синтаксис по-прежнему использовать ADO, но быть в состоянии успешно запустить эту процедура?

Public Function ReturnData() 
Dim c As ADODB.Connection 
Dim r As ADODB.Recordset 
Dim f As ADODB.Field 
Dim conn As String 
Dim arrResults() As Variant 
Set c = New ADODB.Connection 
With c 
.Provider = "sqloledb.1" 
With .Properties 
    .Item("Data Source") = "ServerName" 
    .Item("Initial Catalog") = "Database" 
    .Item("PassWord") = "password" 
    .Item("User ID") = "user" 
End With 
.Open 
Set r = conn.Execute("SELECT Distinct(Name) from registered where cancelled IS NULL;") 
i = 0 
r.MoveFirst 
Do Until rst.EOF 
    arrResults(i) = rst.Fields(0) 
    i = i + 1 
Loop 
rst.Close 
Set rst = Nothing 
c.Close 
End Function 
+0

у вас есть соппы это строка есть, с есть соединение - вы можете сделать c.execute – Cato

+1

Есть несколько проблем с этим кодом. Вы копировали/вставляли это из Интернета? Есть несколько случаев, когда вы вызываете переменную 'rst'. Но это не определено. Подозреваю, что вы должны заменить на 'r'. Там два с утверждениями. Но только 1 'End With'. Переменная i не объявлена. 'Dim i AS Integer' для исправления. –

ответ

0

у вас есть соед это строка есть, с есть соединение - вы можете сделать c.execute

попробовать

Set r = c.Execute(... 

Я не уверен, что если вам нужна команда объект, если вы это сделаете, то увидите

https://msdn.microsoft.com/en-us/library/ms675065%28v=vs.85%29.aspx

, чтобы увидеть, как сделать команду для вашего соединения и выполнить его

Во всяком случае, на данный момент вы пытаетесь выполнить «на строковой строке», это примитивный тип и не выполняется на БД - я думаю, вы просто смешали c и conn up мы знаем, как это делается

1

Другой способ получить набор записей в массиве - использовать Split и Recordset.GetString. В любом случае, он избегает цикла. Вот пример.

Public Sub RsToArray() 

    Dim adoCon As ADODB.Connection 
    Dim adoRs As ADODB.Recordset 
    Dim vaLocations As Variant 

    Set adoCon = New ADODB.Connection 
    adoCon.Open sConn 
    Set adoRs = adoCon.Execute("SELECT DISTINCT LocationName FROM Locations") 

    vaLocations = Split(adoRs.GetString, vbCr) 

    Debug.Print Join(vaLocations, "|") 

    adoRs.Close 
    adoCon.Close 

    Set adoRs = Nothing 
    Set adoCon = Nothing 

End Sub