Gewusst wie: Auffüllen eines ListBox mit ADODB.Recordset (Fehler 91) Zu Tun Autocompletion in Access
Arbeite ich an einer Access DB, und ich habe die Verwendung einer Datasource-Verbindung zu einem SQL-Server.
Zu tun, dass ich die ADODB-Objekt mit :
-ADODB.Verbindung
-ADODB.Recordset
Code Up-to-date, nach einer Beobachtung von Ian Kenney
Dim cnn As ADODB.Connection
Set cnn = New ADODB.Connection
Dim rs As ADODB.Recordset
cnn.ConnectionString = "driver={SQL Server};provider=SQLOLEDB;server=10.****;uid=****readonly;pwd=****readonly;database=****"
cnn.Open
Set rs = cnn.Execute("SELECT [MATRI], [NOMPRE] FROM SCHEME_DB.TABLE WHERE NOMPRE LIKE '*" & Me.Textbox_recherche.Text & "*'")
Me.Liste_choix.RowSourceType = "Table/List"
Me.Liste_choix.Recordset = rs
rs.Close
cnn.Close
(Mit diesem code (ein Teil des Codes) ist ein Weg, um einen Autocompletion in Access mit einer TextBox und einer ListBox)
Und ich habe einen Fehler 91, wenn ich diesen code ausführen : "Fehler 91: Objektvariable oder With-block variable nicht festgelegt" .
Ich verstehe nicht, wie dieses Problem zu beheben.
Vielen Dank im Voraus.
InformationsquelleAutor Quentin T. | 2013-04-26
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie erzählte uns, dass code-Fehler 91, "Objekt-variable oder With-block variable nicht festgelegt". Leider, Sie nicht angeben, welche Zeile löst den Fehler aus. Das zwingt uns, zu erraten, wo das problem liegt.
Einzige Problem ist hier:
Dass versucht wird eine Zuweisung von einem Objekt zum anderen. Die
=
Zeichen ist ausreichend für die Aufgaben mit einfachen Datentypen ... ieMyVariable = 2
. Allerdings müssen Sie dieSet
Schlüsselwort, mit dem Objekt-Zuordnungen.Obwohl Sie machen sollten, das zu ändern, ich bin mir nicht sicher, dass war die Ursache des Fehlers 91; hätte ich geahnt Zugriff beschweren würde "Ungültige Verwendung der Eigenschaft" statt.
Den
SELECT
Erklärung ist ein anderes problem, aber wieder bin ich unsicher, ob es dazu beiträgt, um den Fehler gemeldet. DieWHERE
- Klausel verwendet eineLike
Vergleich mit einem Muster, das hat*
als wild-card-Charakter. Die Abfrage zurückgeben kann, was Sie erwarten, wenn Sie führen Sie es von DAO. Aber du bist mit ADO behandelt*
als nur ein Sternchen ohne Besondere Bedeutung. Also, die Abfrage wahrscheinlich keine Zeilen zurückgegeben, wenn Sie Sie ausführen von ADO. Ersetzen*
mit%
.Als Allgemeine Ratschläge, wenn Ihr code Modul nicht bereits
Option Explicit
in seinen Deklarationen im Abschnitt, fügen Sie es. Dann führen Sie Debug->Kompilieren von VB-Editor im Hauptmenü. Fix alles, was der compiler beschwert sich darüber. Stellen Sie sicher, dass Sie getan haben, diejenigen Dinge, die vor jeder weiteren Fehlersuche.Ich mein problem gelöst (Fehler 91), gab Es drei Probleme : die Erstellung des ADODB.Verbindung, die * in der Select - (Dank HansUp) und das Set für die listbox.recordset (Dank HansUp wieder)
Löste ich den Fehler :
Haben Sie geschlossen, das recordset und die Verbindung, bevor Sie es verwenden
rs hier geschlossen
und die Verbindung wird hier geschlossen
rs verwendet hier
Update
Aus der docs:
SQL-INJECTION
Es gibt auch eine sql-injection Risiko durch den Aufbau von sql direkt aus den Benutzereingaben.
Diese Frage (MS Access prepared statements) zeigt, wie eine parametrierte Abfrage - könnte einen Blick Wert sein.