Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1788to1792
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Suche in mdb sowie End of DB erreicht?

Suche in mdb sowie End of DB erreicht?
23.10.2020 14:49:43
Ronald
Hallo an alle!
Wie kann ich die ganze Access-Datenbank oder auch nur eine Tabelle per VBA nach einem Schlüsselwort
durchsuchen lassen?
Ich habe es mit Recordset.Seek versucht, jedoch ohne Erfolg. Das sah dann so aus:
Public Sub Suche_KV()
Dim i As Integer
Dim strQuery As String
If frmMain.txtSuchbegriff_KV.Text = "" Then
Else
strSuchbegriff = frmMain.txtSuchbegriff_KV.Text
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\_Privat\HOLZZZWERK\Büro\ _
Holzzzwerk ERP\HOLZZZWERK_ERP.mdb;Persist Security Info=False;"
Set rs = cn.Execute("SELECT * FROM tKunden")
Do While Not rs.EOF
rs.Seek KeyValues:=strSuchbegriff, _
SeekOption:=adSeekFirstEQ
If Not rs.EOF Then
MsgBox Prompt:="Der Suchbegriff " & strSuchbegriff & _
" ist bereits in der Datenbank vorhanden." _
& vbNewLine & _
"Es wird keine Aktualisierung durchgeführt."
End If
'ze = ze + 1
Loop
cn.Close
End If
End Sub

Als Meldung bekam ich Der aktuelle Provider unterstützt nicht die erforderliche Schnittstelle
für die Indexfunktion.

Für diese Suche ist mir auch nicht klar, wozu ich bei der Suche einen Index brauche, resp. wieso ich
einen Primärschlüssel angeben muß.
Also hab ichs ein bissl angepaßt:
Public Sub Suche_KV()
Dim i As Integer
Dim strQuery As String
If frmMain.txtSuchbegriff_KV.Text = "" Then
Else
strSuchbegriff = frmMain.txtSuchbegriff_KV.Text
cn.Open ConnectionString:= _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\_Privat\HOLZZZWERK\Büro\Holzzzwerk ERP\HOLZZZWERK_ERP.mdb;" & _
"Mode=Share Exclusive"
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseServer
rs.Open Source:="tKunden", _
ActiveConnection:=cn, _
CursorType:=adOpenStatic, _
LockType:=adLockPessimistic, _
Options:=adCmdTableDirect
rs.Index = "fKdNummer"
Do While Not rs.EOF
rs.Seek KeyValues:=strSuchbegriff, _
SeekOption:=adSeekFirstEQ
If Not rs.EOF Then
MsgBox Prompt:="Der Suchbegriff " & strSuchbegriff & _
" ist bereits in der Datenbank vorhanden." _
& vbNewLine & _
"Es wird keine Aktualisierung durchgeführt."
End If
Loop
cn.Close
End If
End Sub 
und bekam nun eine neue Meldung:
'fKdNummer' ist in dieser Tabelle kein Index.
Was mache ich falsch? Wäre schön, wenn jemand einen Tip für mich hat.
Desweiteren habe ich 2 Buttons, um von Datensatz zu Datensatz entweder vorwärts oder rückwärts zum
jeweils nächsten zu springen. Wie kann ich es hier abfangen, wenn das Ende der Tabelle erreicht ist?
Wenn ich beispielsweise die Kundennummer immer eins erhöhe und hierfür neu abrufe, um diesen Daten-
satz anzeigen zu lassen, funktioniert das gut. Wenns aber eins höher ist, als ich überhaupt Datensätze
drin habe, sollte dies abgefangen werden. Nur wie?
Vielen Dank im Voraus.
Gruß Ronald

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suche in mdb sowie End of DB erreicht?
23.10.2020 17:11:21
onur
Wie wäre es mit einem Acces-Forum?
AW: Suche in mdb sowie End of DB erreicht?
23.10.2020 17:20:01
Ronald
Ich programmiere das ja in Excel VBA. Meine Access-Version unterstützt keine Userforms.
Gruß Ronald
PS: Wäre toll, wenn Du ein paar Tips für meine beiden Fragen hast.
AW: Suche in mdb sowie End of DB erreicht?
23.10.2020 17:35:03
Ronald
Habe vergessen, den Haken zu setzen, daß das Problem noch nicht erledigt ist. Sorry.
AW: Suche in mdb sowie End of DB erreicht?
23.10.2020 18:02:38
Luschi
Hallo Ronald,
wie man den Recordset richtig öffnet, daß man den 'Seek'-Befehl auch nutzen kann, zeigt diese Beispielseite: h i e r
Meist wird der Index auf den 'Primary Kex' gesetzt, so daß man auch nur nach diesen suchen kann.
Ich öffne den Recordset als Dynaset und benutze dann FindFirst/FindNext.
Der Aufwand mit '.Seek' lohnt sich erst bei sehr großen Tabellen.
Gruß von Luschi
aus klein-Paris
Warum Deine Access-Version keine Formularprogrammierung ermöglicht, bleibt mir schleierhaft.
Anzeige
AW: Suche in mdb sowie End of DB erreicht?
23.10.2020 21:34:51
Ronald
Grüß Dich Luschi
Danke für Deine Antwort.
Formulare geht schon, aber keine UserForm. Ich habe im Internet eine Seite gefunden, die erklärt, wie
man dem Kontextmenü bei "Hinzufügen" den Menüpunkt "UserForm" hinzufügen kann. Aber es ging bei mir nicht, egal wie oft ich es ausgeführt und wie oft ich neugestartet habe. Ich kann nur ein Modul und
ein Klassenmodul hinzufügen. Keine UserForm. Also blieb mir nur der Schritt zum Excel. Bereut habe
ich es bisher nicht.
Das einzige, was ich jetzt nur noch wissen muß, ist
1. wie ich nach einem Suchbegriff die DB durchsuchen lassen kann, also beispielsweise die Kundennummer
KD-00003 auf Vorhandensein prüfen kann und
2. wie ich das Ende des Recordset abfangen kann (Beispiel: Ich habe einen Button, mit dem ich mich
vorwärts und rückwärts durch das Recordset durchdrücken kann und er zeigt mir dann jeweils den
vorherigen oder nachfolgenden Datensatz an. Dafür nutze ich die Kundennummer. String zerlegt zu reinen
Zahlen und diese jeweils um eins reduziert oder um eins erweitert. Wenn ich bei 0 bin, kann ich dies
abfangen. Aber beim Vorwärtsdrücken durchs Recordset sehe ich ja nicht, wann Schluß ist.
Kundennummer KD-00345 ist beispielsweise der letzte Eintrag. Da ich nicht weiß, wie ich das abfangen
kann, weiß die Software das nicht und erhöht um eins und lädt etwas, was es nicht gibt. Oder kam
sogar eine Fehlermeldung? Ich weiß es nicht mehr. Abfangen möchte ich es gerne.
Wenn ich diese beiden "Probleme" lösen kann, habe ich dann alles Handwerkszeug, um meine Software
zu beenden.
Gruß Ronald
Anzeige
AW: Suche in mdb sowie End of DB erreicht?
23.10.2020 21:59:45
Luschi
Hallo Ronald,
wenn Du eine kleine Access-DB mit Demodaten bereitstellst, dann zeige ich Dir, wie das geht.
Gruß von Luschi
aus klein-Paris
AW: Suche in mdb sowie End of DB erreicht?
27.10.2020 10:19:06
Ronald
Grüß Dich Luschi
Bist Du schon dazu gekommen, Dir die Datenbank mal anzuschauen? Ist sie brauchbar für Dich?
Gruß Ronald
AW: Suche in mdb sowie End of DB erreicht?
27.10.2020 15:54:24
Dieter
Hallo Ronald,
die Existenzprüfung zu einer bestimmten Kundennummer kannst du mit der Find-Methode folgendermaßen machen:

rs.Find Criteria:="fKdNummer='" & kdNummer & "'", _
SkipRecords:=0
If Not rs.EOF Then
MsgBox kdNummer & vbNewLine & "existiert"
Else
MsgBox kdNummer & vbNewLine & "existiert nicht"
End If

Das vollständige Programm findest du in der beiliegenden Arbeitsmappe unter dem Namen "Existenz".
In der Arbeitsmappe sind noch 3 weitere Programme, die ich aus meinem Demo-Material an deine Datenbank angepasst habe.
Das Programm "ADO_Move_vorwärts" geht mit MoveFirst und MoveNext einmal vorwärts durch das gesamte Recordset, analog geht "ADO_Move_rückwärts" rückwärts durch das Recordset.
Das Programm "ADO_Find" sucht alle Sätze. die ein bestimmtes Kriterium erfüllen, z.B. "Geschäftskunde".
Du siehst an diesen Beispielen auch, wie du das Erreichen des Endes des Recordsets erkennst.
Die Methode MoveNext z.B. setzt die Recordset-Eigenschaft EOF auf True, wenn sie sich über den letzten Satz hinaus bewegt hat. Analog bei Find.
https://www.herber.de/bbs/user/141130.xlsm
Viele Grüße
Dieter
Anzeige
AW: Suche in mdb sowie End of DB erreicht?
27.10.2020 16:48:57
Ronald
Grüß Dich Dieter
Danke für das Beispielprojekt. Auch der Hinweis mit dem EOF auf true, wenn es über
den letzten Satz hinausgeht, ist Gold wert. Vielen Dank!
Ich werde das heute Abend mal anschauen und umsetzen.
Gruß Ronald

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige