VB Abfrage auf Access Datenbank

Hallo,

wie kann ich per VB eine ACCESS Datenbank abfragen und die gefundenen Sätze dann in einem Listview darstellen?

Für Hinweise wäre ich sehr dankbar.

Gruß
Gunter

Hallo Gunter,

wie kann ich per VB eine ACCESS Datenbank abfragen und die
gefundenen Sätze dann in einem Listview darstellen?

welches VB, welches Access? Gibt es die Abfrage schon, oder soll die im Code erstellt werden? Wie hättest Du es gern, einfach oder flexibel?

Mit VB6 könnte man das mit ADO oder DAO jeweils mit oder ohne Steuerelemente erledigen, das sind schon vier verschiedene Lösungen. Welche suchst Du?

Gruß, Rainer

Hallo Rainer,

wusste gar nicht, dass dies so komplex ist.
Ich dachte man erstellt ein SQL mit SELECT * FROM WHERE und das wars.

Also ich habe VB 6.0 und ACCESS 2000 und neuer.

Abfragen habe ich schon in meiner Datenbank.

Einen Verweis auf DAO 3.6 habe ich in meinem Projekt schon gemacht.

Was Du unter Steuerelemente meinst, verstehe ich nicht.

Suche zunächst einmal die einfachste Möglichkeit das Suchergebnis anzuzeigen. Die Suchkriterien möchte ich jedoch in einem VB Fenster
eingeben.

Viele Grüße
Gunter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Gunter,

wusste gar nicht, dass dies so komplex ist.

*gg* Je nach Anwendung führen oft viele Wege zum Ziel.

Ich dachte man erstellt ein SQL mit SELECT * FROM WHERE und
das wars.

Ein paar ‚Vorbereitungen‘ sind schon nötig.

Also ich habe VB 6.0 und ACCESS 2000 und neuer.

OK. Das schließt DAO schon mal aus.

Abfragen habe ich schon in meiner Datenbank.

Du schreibst weiter unten, daß Du suchkriterien angeben möchtest. Oben schreibst Du, daß Du den SQL-String selbst übergeben möchtest, dann brauchst Du die vorbereitete Abfrage nicht. Der SQL-String erzeugt eine.

Einen Verweis auf DAO 3.6 habe ich in meinem Projekt schon
gemacht.

Kannst Du wieder entfernen, das funktioniert nur bis Access97. Du musst per ADO auf die Datenbank zugreifen.

Was Du unter Steuerelemente meinst, verstehe ich nicht.

In VB6 ab der Version Professional gibt es die Steuerelemente ‚Data‘ für DAO und ‚ADODC‘ für ADO. Um die Anzeige in Listview nicht zu kompliziert zu machen, werden wir die verwenden, wenn Du nicht gerade mit der Standard-Edition unterwegs bist.

Suche zunächst einmal die einfachste Möglichkeit das
Suchergebnis anzuzeigen. Die Suchkriterien möchte ich jedoch
in einem VB Fenster eingeben.

OK. Den Code muss ich nur erst ‚zurechtstricken‘, wenn das nicht Jemand anderes schneller macht als ich. :smile: Ein paar Zeilen werden das schon. Ich habe ein Beispielprogramm hier, das ich erst noch etwas anpassen muss, jetzt ist aber klar, was Du brauchst. Wie lange ich für ein möglichst kurzes Beispiel brauchen werde, weiß ich noch nicht, das ist aber ‚in Arbeit‘. :smile:

Gruß, Rainer

[ot] DAO und Access 2000
Moin, Rainer,

Also ich habe VB 6.0 und ACCESS 2000 und neuer.

OK. Das schließt DAO schon mal aus.

das wundert mich jetzt. Ich habe Access 2000 und sehe in den Verweisen „Microsoft DAO 3.6 Object Library“, aber nichts, was auf ADO hindeutet.

Gruß Ralf

Hallo Rainer,

finde ich Klasse, dass Du mir helfen willst.
Lass Dir ruhig Zeit, es eilt nicht.

Habe nur der Vollständigkeit halber erwähnt, dass ich schon Abfragen habe, die ich aber nicht unbedingt nutzen will.

Viele Grüße
Gunter

OK. Den Code muss ich nur erst ‚zurechtstricken‘, wenn das
nicht Jemand anderes schneller macht als ich. :smile: Ein paar
Zeilen werden das schon. Ich habe ein Beispielprogramm hier,
das ich erst noch etwas anpassen muss, jetzt ist aber klar,
was Du brauchst. Wie lange ich für ein möglichst kurzes
Beispiel brauchen werde, weiß ich noch nicht, das ist aber ‚in
Arbeit‘. :smile:

Gruß, Rainer

Hi Ralf,

ich habe schon mehrfach versucht auf Datenbankenn die mit Access2000 erstellt wurden per DAO zuzugreifen und bekomme regelmäßig die Meldung ‚nicht erkennbares Datenbankformat‘. Mit ADO klappt der Zugriff problemlos. Mehr weiß ich darüber leider nicht.

Gruß, Rainer

Hi Gunter,

eine erste Minimalversion ist fertig, getestet, läuft.
Mit Listview habe ich noch nicht gearbeitet, deshalb schreibe ich einfach nur mal etwas in eine Listbox. Sonst liegt nichts auf der Form. Voreinstellungen sind keine nötig. Wenn Du Dich mit Listview auskennst, kannst Du das leicht anpassen, das ist ja aktuell nur eine Zeile.

Leider werden im Code zwischen zwei Zeilen immer Leerzeilen eingefügt, das ist aktuell noch ein Bug in w-w-w.
Korrektur, der Bug ist weg! :smile:

Option Explicit

Dim DB As String
Dim strSQL As String
Dim objRS As ADODB.Recordset
Dim objConnection As ADODB.Connection

Private Sub Form\_Load()

 DB = 'C:\TestDaten.mdb'
 strSQL = 'SELECT \* FROM Tabelle'
 Set objConnection = New ADODB.Connection

 With objConnection
 .CursorLocation = adUseClient
 .Mode = adModeShareDenyNone
 .Provider = 'Microsoft.Jet.OLEDB.4.0'
 .ConnectionString = DB
 .Open
 End With

 Set objRS = New ADODB.Recordset
 With objRS
 Set .ActiveConnection = objConnection
 .CursorLocation = adUseClient
 .CursorType = adOpenStatic
 .LockType = adLockOptimistic
 .Source = strSQL
 Call .Open
 End With

 objRS.MoveFirst
 While objRS.EOF = False
 List1.AddItem objRS(0)
 objRS.MoveNext
 Wend
End Sub

Private Sub Form\_QueryUnload(Cancel As Integer, UnloadMode As Integer)
 objRS.Close
 objConnection.Close
End Sub

Alles OK?

Gruß, Rainer

Hallo Rainer,

vielen Dank für die rasche Antwort.

Habe bei meinen Verweisen keine Auswahlmöglichkeit für ADODB.

Bekomme deshalb Fehlermeldung bei

Dim objRS As ADODB.Recordset

Gruß
Gunter

Hallo Gunter,

Habe bei meinen Verweisen keine Auswahlmöglichkeit für ADODB.

Bekomme deshalb Fehlermeldung bei

Dim objRS As ADODB.Recordset

such mal in den Verweisen nach

Microsoft ActiveX DataObjects 2.0 Library

und versuche es mal damit.

Gruß, Rainer

Hallo Rainer,

es funktioniert.

Jetzt muss ich mir das Coding mal in Ruhe anschauen, damit ich es auch verstehe.

Nochmals vielen Dank.

Gruß
Gunter

Hallo Rainer,

wie schon geschrieben, funktionert es, habe jedoch kein Suchergebnis wenn ich den SQL String mit LIKE verwende, z.B.

SELECT * FROM datenbank WHERE name LIKE hugo*

Hast Du eine Idee warum das nicht geht?

Gruß
Gunter

Hi Gunter,

wie schon geschrieben, funktionert es, habe jedoch kein
Suchergebnis wenn ich den SQL String mit LIKE verwende, z.B.

SELECT * FROM datenbank WHERE name LIKE hugo*

Hast Du eine Idee warum das nicht geht?

Setze mal den String in Anführungszeichen …

SELECT * FROM datenbank WHERE name LIKE ‚hugo*‘

Gruß, Rainer

Hallo Rainer,

das geht leider auch nicht.

Gruß
Gunter

Setze mal den String in Anführungszeichen …

SELECT * FROM datenbank WHERE name LIKE ‚hugo*‘

Hi Gunter,

sorry, mit LIKE habe ich noch nie gearbeitet, deshalb bin ich auch in die Falle getappt. In der Hilfe zu VB steht auch der Asterisk, für die Datenbankabfrage musst Du aber statt Dessen Prozent nehmen.

SELECT * FROM datenbank WHERE name LIKE ‚hugo%‘

So geht es jetzt aber. :smile:

Gruß, Rainer

Hallo Rainer,

kaum macht man es richtig und schon funktioniert es :wink:.

Vielen Dank.

Gruß
Gunter

SELECT * FROM datenbank WHERE name LIKE ‚hugo%‘

So geht es jetzt aber. :smile:

Hallo Rainer,

habe das ganze entsprechend eurer Diskussion auch auf eine Dbase Datenbank versucht. Also:

Set cnn = New ADODB.Connection
cnn.Open „Provider=MSDASQL;Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=“ & sPath

Bei dem open bekomme ich die Fehlermeldung, dass der ODBC dBASE Driver nicht vorhanden ist.

Was muss ich in mein Projekt einbiden, dass dies funktioniert.

Vielen Dank

Gruß
Gunter

Hi Gunter,

noch mal kurz das Projekt von Joe:

Option Explicit

 Dim sPath As String
 Dim cnn As ADODB.Connection
 Dim rs As New ADODB.Recordset

Private Sub Form\_Load()
 Dim i As Long, n As Long
 Dim r1 As Long, r2 As Long
 sPath = "c:\"
 Set cnn = New ADODB.Connection
 cnn.Open "Provider=MSDASQL;Driver={Microsoft dBASE Driver (\*.dbf)};DriverID=277;Dbq=" & sPath

 If cnn.State = 1 Then
 Set rs = New ADODB.Recordset
 With rs
 .CursorType = adOpenDynamic
 .CursorLocation = adUseClient
 .LockType = adLockOptimistic
 .Source = "SELECT DISTINCT \* FROM perslog WHERE Access LIKE 'Hinter%' ORDER BY NAME, DATE, TIME"
 .ActiveConnection = cnn
 .Open
 End With
 End If

 Set MSHFlexGrid1.DataSource = rs
 Set MSHFlexGrid1.DataSource = Nothing
End Sub

Wichtig ist, daß Du den Verweis auf …

‚Microsoft AxtiveX Data Objects 2.0 Library‘

… setzt, sonst funktioniert der Code nicht, diese DLL wird benötigt, sie enthält ODBC-Treiber für VB6.

Gruß, Rainer

Hallo Rainer,

den Verweis habe ich gemacht.

sPath = „C:\dbase\daten\IALLES.DBF“

Set cnn = New ADODB.Connection
cnn.Open „Provider=MSDASQL;Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=“ & sPath

Bekomme bei dem cnn.open den Laufzeitfehler:

[Microsoft][ODBC dBASE Driver]’(unbekannt)'ist kein zulässiger Pfad.

Hast Du eine Idee?

Gruß
Gunter

Wichtig ist, daß Du den Verweis auf …

‚Microsoft AxtiveX Data Objects 2.0 Library‘

… setzt, sonst funktioniert der Code nicht, diese DLL wird
benötigt, sie enthält ODBC-Treiber für VB6.

Hallo,

Hast Du eine Idee?

ja, Joe hat erzählt, daß er mit DBase und Windows 2000 Probleme hat- Welches Windows hast Du?

Gruß, Rainer