2016-11-03 4 views
1

Ich möchte eine SQL Server-Tabelle abfragen und die Ergebnisse dieser Abfrage in einem Array speichern. Ich gebe nur einen Distinct() von einem Feld zurück, also sollte es ziemlich direkt sein. Meine Syntax erzeugt die FehlerSQL-Tabelle abfragen und Ergebnisse im Array speichern

Ungültige Qualifier

Auf dieser Codezeile Set r = conn.Execute und es unterstreicht das Wort conn Wie soll ich diese Syntax neu schreiben noch ADO verwenden aber in der Lage sein, erfolgreich diese laufen Verfahren?

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

Sie conn haben, ist eine Zeichenfolge gibt, c ist eine Verbindung - können Sie c.execute tun – Cato

+1

Es gibt ein paar Probleme mit diesem Code. Hast du das aus dem Internet kopiert/eingefügt? Es gibt mehrere Gelegenheiten, bei denen Sie die Variable first aufrufen. Aber das ist nicht definiert. Verdächtiger solltest du mit "r" ersetzen. Da zwei mit Aussagen. Aber nur 1 'Ende mit'. Die Variable i ist nicht deklariert. 'Dim i AS Integer' zu beheben. –

Antwort

0

Sie conn haben dort ein String ist, ist c eine Verbindung - können Sie

versuchen

Set r = c.Execute(... 

Ich bin nicht sicher c.execute tun, wenn Sie einen Befehl benötigen Objekt, wenn Sie das tun, dann sehen

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

, um zu sehen, wie ein Befehl machen für Ihre Verbindung und führen Sie es aus

Wie auch immer, in dem Moment, Sie versuchen, auf einer Zeichenfolge auszuführen - Zeichenfolge ist ein primitiver Typ und führt nicht auf der DB - ich glaube, Sie nur gemischt c und Conn - lassen uns wissen, wie es geht

1

Eine andere Möglichkeit, ein Recordset in ein Array zu bekommen, ist Split und Recordset.GetString zu verwenden. Es vermeidet die Schleife sowieso. Hier ist ein Beispiel.

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 
Verwandte Themen