Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1852to1856
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
NEU: Access nach Suchwort durchsuchen
27.10.2021 15:30:29
Ronald
Grüßt Euch alle
Ich möchte gerne per Suchbegriff eine Tabelle in der Access-Db durchsuchen lassen, ob sich dort ein Suchwort finden läßt.
Ich mache das auf diese Art:
strQuery = "SELECT * FROM tKunden WHERE fKdDomain LIKE " & " '" & strSuchbegriff_KV & "'" Or _
fKdNameBank Like " & '" & strSuchbegriff_KV & "'" Or _
fKdIBAN Like " & '" & strSuchbegriff_KV & "'" Or _
fKdBIC Like " & '" & strSuchbegriff_KV & "'" Or _
fKdOrtBank Like " & '" & strSuchbegriff_KV & "'" Or _
fKdPostleitzahlBank Like " & '" & strSuchbegriff_KV & "'" Or _
fKdLandBank Like " & '" & strSuchbegriff_KV & "'" Or _
fKdKundengruppe Like " & '" & strSuchbegriff_KV & "'" Or _
fKdKundenprioritaet Like " & '" & strSuchbegriff_KV & "'" Or _
fKdStatus Like " & '" & strSuchbegriff_KV & "'" Or _
fKdKategorie Like " & '" & strSuchbegriff_KV & "'" Or _
fKdFirmenname Like " & '" & strSuchbegriff_KV & "'" Or _
fKdVorname Like " & '" & strSuchbegriff_KV & "'" Or _
fKdVorname2 Like " & '" & strSuchbegriff_KV & "'" Or _
fKdNachname Like " & '" & strSuchbegriff_KV & "'" Or _
fKdAnrede Like " & '" & strSuchbegriff_KV & "'" Or _
fKdOrt Like " & '" & strSuchbegriff_KV & "'" Or _
fKdMwStNr Like " & '" & strSuchbegriff_KV & "'" Or _
fKdUID Like " & '" & strSuchbegriff_KV & "'" Or _
fKdKontoinhaber Like " & '" & strSuchbegriff_KV & "'"
So spielt es sicher mal keine Rolle, nach was der Bediener sucht. Nun habe ich mehrere Fragen:
1. Bei fKdNameBank (zweite Zeile) kommt die Meldung "Variable nicht definiert", obgleich dieses Feld in der Tabelle der DB vorhanden ist. Warum?
2. Gibt es eine Möglichkeit, alle Datensätze und Felder einer Tabelle der DB durchsuchen zu lassen, ohne sämtliche Feldnamen namentlich zu erwähnen?
Sowas in der Art wie vielleicht SELECT * FROM tKunden WHERE * Like Suchbegriff
Danke im Voraus.
Gruß Ronald

27
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
zu 1. :weil die " falsch sitzen.
27.10.2021 15:38:55
Rudi
Dadurch ist fKdNameBank außerhalb des Strings und wird als Variable interpretiert. Das hat mit einem vorh. Feld nichts zu tun.
AW: zu 1. :weil die " falsch sitzen.
27.10.2021 15:41:16
Ronald
Danke!
Wie könnte ich das denn besser machen? Hast Du eine Idee?
Gruß Ronald
AW: zu 1. :weil die " falsch sitzen.
27.10.2021 15:47:54
Rudi
Meine Idee wäre, die Abfrage erst in Access zu erstellen, den SQL-Code zu kopieren, nach Excel zu bringen und das feste Suchkriterium durch " & strSuchBegriff_KV & " zu ersetzen.
Von Access hab ich aber kaum Ahnung. Ist mindestens 15 Jahre her.
weiter offen
27.10.2021 15:48:23
Rudi
AW: zu 1. :weil die " falsch sitzen.
27.10.2021 16:03:54
Rudi
dieser String ist zumindest fehlerfrei.

strQuery = "SELECT * FROM tKunden WHERE" & "fKdDomain LIKE '" & strSUCHBEGRIFF_KV & "'" _
& "Or fKdNameBank Like '" & strSUCHBEGRIFF_KV & "'" _
& "Or fKdIBAN Like '" & strSUCHBEGRIFF_KV & "'" _
& "Or fKdBIC Like '" & strSUCHBEGRIFF_KV & "'" _
& "Or fKdOrtBank Like '" & strSUCHBEGRIFF_KV & "'" _
& "Or fKdPostleitzahlBank Like '" & strSUCHBEGRIFF_KV & "'" _
& "Or fKdLandBank Like '" & strSUCHBEGRIFF_KV & "'" _
& "Or fKdKundengruppe Like '" & strSUCHBEGRIFF_KV & "'" _
& "Or fKdKundenprioritaet Like '" & strSUCHBEGRIFF_KV & "'" _
& "Or fKdStatus Like '" & strSUCHBEGRIFF_KV & "'" _
& "Or fKdKategorie Like '" & strSUCHBEGRIFF_KV & "'" _
& "Or fKdFirmenname Like '" & strSUCHBEGRIFF_KV & "'" _
& "Or fKdVorname Like '" & strSUCHBEGRIFF_KV & "'" _
& "Or fKdVorname2 Like '" & strSUCHBEGRIFF_KV & "'" _
& "Or fKdNachname Like '" & strSUCHBEGRIFF_KV & "'" _
& "Or fKdAnrede Like '" & strSUCHBEGRIFF_KV & "'" _
& "Or fKdOrt Like '" & strSUCHBEGRIFF_KV & "'" _
& "Or fKdMwStNr Like '" & strSUCHBEGRIFF_KV & "'" _
& "Or fKdUID Like " & strSUCHBEGRIFF_KV & "'" _
& "Or fKdKontoinhaber Like '" & strSUCHBEGRIFF_KV & "'"

Anzeige
zu 2: nein
27.10.2021 16:26:47
ChrisL
Hi Roland
Vorgeschichte:
https://www.herber.de/forum/archiv/1852to1856/1853650_Access_Abfrage_mit_Bedingung.html
Kurze Antwort: nein
SQL ist nicht darauf ausgelegt eine Volltextsuche über alle Datenfelder bzw. die ganze Tabelle zu machen. Es widerspricht (mindestens in meiner Denkweise) komplett einer DB-Logik.
Man könnte theoretisch die Feldnamen ermitteln und sich so eine dynamische Feld-Suche aufbauen. Aber es wäre m.E. ziemlich umständlich und kompliziert zumal die Datenfelder einer DB einigermassen konstant bleiben sollten.
In Anbetracht des letzten Beitrages, wo bereits zwei verschiedene Abfragen/Selektionen benötigt werden und nun die Textsuche über die gesamte Tabelle, frage ich mich, ob das Vorgehen sinnvoll ist. Evtl. wärst du besser dran einmalig alle Daten zu importieren und dann innerhalb Excel weiter zu arbeiten, anstelle immer wieder neue SELECT vorzunehmen. Die übliche Suchfunktion in Excel (Ctrl+F) ist relativ schnell und die Anzahl liesse sich ebenfalls rasch ermitteln.
Wie bereits durch Yal angeregt würde ich dir ausserdem empfehlen, dich mit Power-Query zu beschäftigen. Damit lassen sich elegant Abfragen auf externe (Access-)Dateien verwirklichen, ohne dass du "programmieren" müsstest.
cu
Chris
Anzeige
AW: NEU: Access nach Suchwort durchsuchen
27.10.2021 16:40:19
UweD
Hallo
ich würde den String so zusammensetzen

Dim strQuery, strSuchbegriff_KV
strQuery = "SELECT * FROM tKunden WHERE" & _
"fKdDomain LIKE           '" & strSuchbegriff_KV & "' Or " & _
"fKdNameBank Like         '" & strSuchbegriff_KV & "' Or " & _
"fKdIBAN Like             '" & strSuchbegriff_KV & "' Or " & _
"fKdBIC Like              '" & strSuchbegriff_KV & "' Or " & _
"fKdOrtBank Like          '" & strSuchbegriff_KV & "' Or " & _
"fKdPostleitzahlBank Like '" & strSuchbegriff_KV & "' Or " & _
'usw.
LG
Anzeige
AW: NEU: Access nach Suchwort durchsuchen
27.10.2021 16:52:28
Ronald
Aha, verstehe, da wird der eigentliche Query-String mit den Ausführungszeichen unterbrochen.
Ja, das klingt irgendwie logisch. Ich versuche es mal. Vielen Dank!
Gruß Ronald
PS: Habs grad probiert. Es kommt leider "Fehler in FROM-Klausel". Wenn ichs debuggen lasse,
springt er nur zu dieser Stelle.

Set rs = cn.Execute(strQuery)
Hat aber nichts mit dieser Stelle zu tun. Die hat ja die ganze Zeit funktioniert.
AW: NEU: Access nach Suchwort durchsuchen
27.10.2021 17:21:09
Yal
Hallo Ronald,
ich lese einige deine Fragen und sehe, dass die meisten Probleme, die Du hast, nicht Excel- sondern Access- bzw. Datenbank-bedingt sind.
Du müsstest dich dringend mit dem Thema Datenbank und Datenmodellierung beschäftigen:
_ macht es sinn, zu suchen, ob eine Text-Werte in einem Feld PLZ oder IBAN, die eigentlich nur Zahlen haben sollen (nur ein Beispiel)?
_ deine Tabelle heisst Kunden, aber mindestens 5 Felder betreffen die Bank selbst. Schaue Dir das Thema Normal-Form an. Da gibt es Potential.
Darüber hinaus ist es fraglich, ob es nicht besser wäre, wenn Du direkt in Access programmieren würdest. Es hat auch VBA, aber (u.a.) die Formular haben andere Handhabung, die für Datenbank-Tabelle besser geeignet sind.
Da ich deine Frage nicht beantworte, lasse ich offen.
VG
Yal
Anzeige
SQL ist invalid!
27.10.2021 18:01:29
EtoPHG
Hallo Roland,
Bei den Vorschlägen von Rudi und UweD müsste der Ausschnitt ...WHERE" & "fKdDomain...
fehlt eine Leerstelle, also
...WHERE" & " fKdDomain...
Zudem würde ich bei Deinem Kenntnisstand von Excel und Access die Finger von solchen Konstrukten lassen.
IMHO hast Du den Sinn einer DB überhaupt nicht verstanden.
Gruess Hansueli
Nun ja...
27.10.2021 20:28:05
Yal
Hansueli,
Keiner kann von Anfang an alles wissen, und Übung macht den Meister.
Ronald mag schwer nachvollziehbare Weg nehmen, aber er macht sich mindestens auf dem Weg. Manche stehen nur und warten (auf eine fertig gekaute Lösung).
Ich halte es für sinnvoller, ihn den richtigen Weg zu zeigen, anstatt veruschen ihn zu stoppen.
"Ich habe nicht gescheitert. Ich kenne jetzt 1000 Wege, wie man keine Glühlampe baut." Thomas Edison
VG
Yal
Anzeige
AW: Nun ja...
27.10.2021 20:33:07
Ronald
Danke :-)
AW: Nun ja...
27.10.2021 20:54:03
Ronald
Ich taste mich langsam heran. Momentan siehts so aus:

strQuery = "SELECT * FROM tKunden WHERE fKdDomain & fKdNachname & fKdAnrede LIKE '" & strSuchbegriff_KV & "'"
Es kommen zwar keine Suchergebnisse (warum auch immer), aber er setzt den Code anstandslos um, ohne Fehlermeldung.
Weiß noch nicht, wo hier jetzt der Hase im Pfeffer liegt. :-)
Für den Test hab ich mal nur drei Felder genommen. Das geht etwas fixer, bis dann wirklich mal läuft.
Gruß Ronald
AW: Nun ja...
27.10.2021 22:40:10
Yal
Hallo Ronald,

strQuery = "SELECT * FROM tKunden WHERE fKdDomain & fKdNachname & fKdAnrede LIKE '" & strSuchbegriff_KV & "'"
wird so interpretiert:

strQuery = "SELECT * FROM tKunden WHERE fKdDomain & fKdNachname & ( fKdAnrede LIKE '" & strSuchbegriff_KV & "'" )
was Du möchstest, ist aber sicherlich:

strQuery = "SELECT * FROM tKunden WHERE (fKdDomain & fKdNachname & fKdAnrede ) LIKE '" & strSuchbegriff_KV & "'" 
VG
Yal
Anzeige
AW: Nun ja...
28.10.2021 08:19:04
Ronald
Das scheint soweit zu funktionieren. Daß es tatsächlich nicht funktioniert, hat nun noch einen anderen Grund, den ich aber bisher noch nicht
nachvollziehen kann.
Zur kurzen Erklärung:
Ich habe ein Auswahlfenster, wenn das geladen wird, werden die Datensätze der vier wichtigsten Felder in vier miteinander gekoppelte Listboxen geladen, als eine Art Vorschau, sodaß man auswählen kann, welchen Datensatz man komplett laden kann. Ich nutze das selbe Formular (Auswahlfenster nur mit anderer Caption) zur Anzeige der Suchergebnisse. Also sollte es auch alle Suchergebnisse in die Listbox laden und ich wähle aus, welches ich möchte. Nun ist es jedoch so, daß es bei allen Datensätzen in der Vorschau funktioniert, jedoch bei den Suchergebnissen nichts, weil EOF = True. Warum auch immer.

Public Sub a_DB_Verbindung_aufbauen()
With cn
.CursorLocation = adUseClient
.Mode = adModeShareDenyNone
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\waelty\Downloads\_Privat\_Holzzzwerk\Projekt Büro Holzzzwerk\Holzzzwerk ERP\Softwerk funktionierend\SoftWERK_ERP.mdb;Persist Security Info=False;"
End With
End Sub
Public Sub b_Abfrage_Suchbegriff_KV()
Set rs = cn.Execute("SELECT COUNT(fKdNummer) AS Anzahl FROM tKunden")
intEintragszaehlerListboxGesamt_KV = rs.Fields("Anzahl").Value
'zählt einfach alle Zeilen resp. Datensätze innerhalb der Tabelle
strQuery = "SELECT * FROM tKunden WHERE (fKdDomain & fKdNachname & fKdAnrede) LIKE '" & strSuchbegriff_KV & "'"
'    strQuery = "SELECT * FROM tKunden WHERE fKdStatus  'Gelöscht' ORDER BY fKdNummer ASC"
Set rs = cn.Execute(strQuery)
End Sub
Public Sub c_Handling_PrivDaten_fuer_Auswahl_holen()
Dim i As Integer
i = 1
Do While Not rs.EOF  '
Und eigentlich wird nach jedem Vorgang die DB-Verbindung wieder geschlossen, um Fehlermeldungen zu vermeiden.
Nun ist die Frage, wieso bei Suchbegriffen der EOF = True ist? Sollte bei Beginn des Datenbankzugriffs der Zeiger immer auf BOF stehen?
Falls nicht, kann ich das irgendwie forcen?
Danke im Voraus.
Gruß Ronald
Anzeige
rs.MoveFirst, um EoF entgegen zu wirken. owT
28.10.2021 09:26:27
Yal
AW: rs.MoveFirst, um EoF entgegen zu wirken. owT
28.10.2021 09:35:10
Ronald
Danke!
Ich bekomme nun die Fehlermeldung "Entweder BOF oder EOF ist True, oder der aktuelle Datensatz wurde gelöscht. Der angeforderte Vorgang benötigt einen akltuellen Datensatz". Beim Debuggen springt er auf rs.MoveFirst.
Ich habe es hier eingebunden:

Public Sub c_Handling_PrivDaten_fuer_Auswahl_holen()
Dim i As Integer
rs.MoveFirst '
Was könnte denn nun noch falsch sein? Wie würdest Du bei Dir hinsichtlich Fehlerbehebung vorgehen, wenn dieser Fehler bei Dir auftreten würde?
AW: rs.MoveFirst, um EoF entgegen zu wirken. owT
28.10.2021 09:57:56
Yal
Hallo Ronald,
es ist empfehlenswert, alle Behandlung in "Paket" zu halten: Initialisierung, Verarbeitung, Bereinigung.
Spricht, wenn Du einen Recordset behandelst, sollte die Erzeugung dabei sein. Nur Verarbeitungen pro Datensatz sollten ausgelagert, wenn deren Länge die Lesbarkeit beeinträchtigt.

Public Sub Aktion234()
Dim rs As New ADODB.Recordset
rs.Open "select ..."
Do While Not rs.EOF
Sonderverarbeitung1 rs
Sonderverarbeitung2 rs
rs.MoveNext
Loop
Set rs = Nothing
End Sub
Private Sub Sonderverarbeitung1(ByRef rs As ADODB.Recordset)
'Behandlung von nur eine Datensatz
End Sub
Private Sub Sonderverarbeitung2(ByRef rs As ADODB.Recordset)
End Sub
anders gesagt: ein MoveFirst würde hier nur kurz vor dem Set rs = Nothing stattfinden, um eine zweite Do While-Schleife zu starten.
Sonst verliert man die Übersichtlichkeit: warum Du hier einen rs.MoveFirst reinbringen möchte, kann ich nicht beurteilen und auch nicht nachvollziehen.
VG
Yal
Anzeige
AW: rs.MoveFirst, um EoF entgegen zu wirken. owT
28.10.2021 10:09:00
Ronald
Ich hab ihn jetzt hier drin und habe dieselbe Meldung:

Public Sub z_DB_Verbindung_schliessen()
rs.MoveFirst
cn.Close
Set rs = Nothing
End Sub
Ich kann Dir sagen, wieso ich anfangs diese Position für das rs.MoveFirst gewählt habe. Weil es ja ein Ablauf ist und direkt danach die Schleife Do While Not rs.EOF kommt und er dort die Meldung generiert. Also meinte ich, daß der MoveFirst vorher kommen müßte.
If rs.EOF = True then ... kommt.
AW: rs.MoveFirst, um EoF entgegen zu wirken. owT
28.10.2021 10:19:28
Ronald
Ich hab nochmal im Netz nachgeguckt und das hier gefunden:
Wenn Sie ein Recordset- Objekt öffnen, das keine Datensätze enthält, werden die Eigenschaften BOF und EOF auf True gesetzt ( weitere Informationen zu diesem Zustand eines Recordset finden Sie in der RecordCount- Eigenschaft ). Wenn Sie ein Recordset- Objekt öffnen , das mindestens einen Datensatz enthält, ist der erste Datensatz der aktuelle Datensatz, und die Eigenschaften BOF und EOF sind False .
Dies bedeutet doch unter dem Strich, daß in meinem Datensatz keine Daten drin sind. Sollte man theoretisch so deuten. Also stellt sich mir die Frage, wieso da keine Daten drin sein sollen. Kann ja sein, daß das hier noch immer nicht korrekt ist:

strQuery = "SELECT * FROM tKunden WHERE (fKdDomain & fKdNachname & fKdAnrede) LIKE '" & strSuchbegriff_KV & "'"
Wenn ich diesen Code entsprechend abändere, daß ich nur einen Feldname verwende, also den Nachnamen, dann sieht es so aus:

strQuery = "SELECT * FROM tKunden WHERE fKdNachname LIKE '" & strSuchbegriff_KV & "'"
Und dann funktioniert es auch. Ich bekomme dann Suchergebnisse. Also muß es an der Kombinierung der verschiedenen Felder liegen. Wie kann
man die sonst kombinieren, daß es auch wirklich klappt?
Anzeige
AW: rs.MoveFirst, um EoF entgegen zu wirken. owT
28.10.2021 10:49:53
peterk
Hallo
Du hast ein Problem mit SQL.
Wie sieht "strSuchbegriff_KV" aus?
Willst Du :

SELECT * FROM tKunden WHERE fKdDomain = SuchDo and & fKdNachname = SuchNA and fKdAnrede= SuchAN
Peter
AW: rs.MoveFirst, um EoF entgegen zu wirken. owT
28.10.2021 12:10:39
Ronald
strSuchbegriff ist einfach eine Variable, die den Inhalt der Suchtextbox zugewiesen bekommt.
So, wie Du es aufgelistet hast, könnte es auch funktionieren, nur, daß es eben nicht mit AND sondern mit OR kombiniert werden sollte.
Ich bin grad noch am Tüfteln, wie das syntaxmäßig korrekt wäre. Es sei denn, Du kannst einen Tip geben.
AW: rs.MoveFirst, um EoF entgegen zu wirken. owT
28.10.2021 12:18:39
Ronald
Ich hab jetzt mal das hier ausprobiert:

strQuery = "SELECT * FROM tKunden WHERE (fKdNachname LIKE '" & strSuchbegriff_KV & "') or (fKdAnrede LIKE '" & strSuchbegriff_KV & "')"
Wie man sieht, bisher nur mit zwei verschiedenen Feldern, aber das ging jetzt. Ich werde das weiter ausbauen und testen und dann wieder Lautgeben. :-)
AW: rs.MoveFirst, um EoF entgegen zu wirken. owT
28.10.2021 12:39:39
Ronald
Es ist zum aus der Haut fahren. Das hier...

strQuery = "SELECT * FROM tKunden WHERE (fKdNachname LIKE '" & strSuchbegriff_KV & "') or (fKdVorname LIKE '" & strSuchbegriff_KV & "') or (fKdAnrede LIKE '" & strSuchbegriff_KV & "')"
...funktioniert und wenn ich die Zeilen auf die übliche Art unterbreche, also so:

strQuery = "SELECT * FROM tKunden WHERE (fKdNachname LIKE '" & strSuchbegriff_KV & "') or _
(fKdVorname LIKE '" & strSuchbegriff_KV & "') or _
(fKdAnrede LIKE '" & strSuchbegriff_KV & "')"
...dann gehts nicht mehr. Woran liegt das? Seit wann darf man den SELECT-String nicht unterbrechen?
AW: rs.MoveFirst, um EoF entgegen zu wirken. owT
28.10.2021 12:58:43
ChrisL
Hi
Man darf im String keinen Code-Zeilenumbruch machen.
OK:

x = "abc " & _
"x"
Nicht OK:

x = "abc _
x"
cu
Chris
AW: rs.MoveFirst, um EoF entgegen zu wirken. owT
28.10.2021 12:59:55
Yal
Hallo Ronald,
na klar: Du unterbrichst einen String! Das "or" gehört nicht zu VBA sondern zum SQL.

strQuery = "SELECT * FROM tKunden WHERE (fKdNachname LIKE '" & strSuchbegriff_KV & "') or " _
& "(fKdVorname LIKE '" & strSuchbegriff_KV & "') or " _
& "(fKdAnrede LIKE '" & strSuchbegriff_KV & "')"
VG
Yal
AW: SQL ist invalid!
27.10.2021 20:32:40
Ronald
Wenn ich das Leerzeichen einfüge, kommt die Meldung "Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben.".
Ich weiß durchaus, was eine DB für einen Zweck hat. Ich hätte auch ein separates Formular für die Suche erstellen können,
mit ner Textbox für jede Art Suchwort, wie Domain und Anrede, etc. und hätte sicherlich auch noch Suchparameter (UND, ODER,
KLEINER oder GRÖSSER) dazwischen setzen können, aber ich wollte es einfach und benutzerfreundlich halten. Also eine Textbox
zum suchen und man kann hinein schreiben, was man möchte. Es sucht (mehr oder weniger umständlich) alle Fields der Tabelle
durch und listet auf, was es findet.
Gruß Ronald

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige