![]() |
Access Datenbank Durchsuchen (mit Wildcards)
Hallo allerseits...
Für nen profi is die frage sicher kein problem, aber für mich stellt sie seit gestern ein unüberwindbares problem da....das sich wie folgt abzeichnet, Ich hab eine datenbank mit access, greife über ADO zu lese sie in ein DBGrid ein bis dahin kein prob, nur jetzt kommt meine hürde :) Ich würde gerne eine suchfunktion einbauen die mir mit "Wildcards" die passenden ausgaben in die DBGrid einsetzt, also so... Ich würde die Funktion auf ein OnEditchange stellen das nehmen wir an meine db sieht wie folgt aus: Name1 test123 auto Also ich tippe in das feld "A" ein dann will ich ALLE sachen die mit A anfangen ausgegeben lassen, in der DBGrid! Hab hier im forum seit gestern gesucht aber nichts "passendes" gefunden :( oder ich bin einfach nicht im stande die sachen so umzusetzen, bis jetzt beschränkt sich mein wissen darauf das man so nur in SQL statements suchen kann?? Is die annahme korrekt?? Danke für jede hilfe :) mfg. |
Re: Access Datenbank Durchsuchen (mit Wildcards)
In SQL ist % die Wildcard.
Du könntest also beispielsweise so vorgehen
Delphi-Quellcode:
Allerdings weiss ich nicht, wie perfomant das ganze ist.
procedure DeinFormular.DeinEditChange(Sender: TObject);
Begin DeinQuery.Close; DeinQuery.SQL.Text := 'Select * from DeineTabelle where Name like ''' + DeinEdit.Text + '''%'; DeinQuery.Open; End; Du solltest dir auch mal das Property Filter des Querys ansehen. |
Re: Access Datenbank Durchsuchen (mit Wildcards)
Zitat:
da Du in diesem Fall ja keine Suchefunktion baust sondern einen Filter würde ich das auf keinen Fall im OnChange eines Edits machen. Da würde bedeuten das bei jeder Änderung im Edit eine neue Abfrage der Datenbank gemacht wird. Nehme dafür lieber einen Button. |
Re: Access Datenbank Durchsuchen (mit Wildcards)
Zitat:
|
Re: Access Datenbank Durchsuchen (mit Wildcards)
aller erstmal, danke für euere dolle hilfe :) Echt klasse,
nun, das mit dem Filter hab ich mir schon angesehn aber da ist mir nicht bekannt das man wildcards nutzen kann (?) also gut hab das jetzt mal eingebaut, aber er meint, Zitat:
mfg. |
Re: Access Datenbank Durchsuchen (mit Wildcards)
Hallo Freecer,
mir scheint da ein ' zuviel zu sein! Wie sieht denn der komplette SQL-Befehl aus? |
Re: Access Datenbank Durchsuchen (mit Wildcards)
Zitat:
|
Re: Access Datenbank Durchsuchen (mit Wildcards)
Delphi-Quellcode:
oder eben mit * macht aber bis dahin keinen unterschied....
procedure TForm1.Button1Click(Sender: TObject);
begin Query1.Close; Query1.SQL.Text := 'Select * from KUNDEN where Nachname like ''' + Edit1.Text + '''%'; Query1.Open; end; |
Re: Access Datenbank Durchsuchen (mit Wildcards)
es ist zwar richtig, daß der Allquantor in Access '*' lautet, aber wenn ich über ADO auf Access zugreife, klappt das mit '*' nicht sondern ausschließlich mit dem gewohnten SQL-Allquantor '%'.
Das Gleiche gilt auch für den Quantor '?' in Access für ein Zeichen, unter ADO lautet der aber trotzdem '_'. Grüße Mikhal |
Re: Access Datenbank Durchsuchen (mit Wildcards)
Hallo Freecer
Ich verwende ebenfalls Access mit ADO. Mit folgendem Code müsste es gelingen:
Delphi-Quellcode:
Damit nicht nach jeder Taste die Abfrage neu berechnet wird, kannst Du einen Timer einsetzen. Im OnChange wird nur der Timer neu gestartet, beziehungsweise eingeschaltet. Im OnTimer wird die Abfrage neu geschrieben und anschliessend der Timer ausgeschaltet. Den Timer auch bei Exit vom Editfeld ausführen.
with DeineQuery do // TADODataSet
begin Close; CommandText := 'SELECT DeineTabelle.Feld1, DeineTabelle.Feld2 FROM DeineTabelle WHERE '; CommandText := CommandText + 'DeineTabelle.Feld1 LIKE "%' + Edit1.Text + '%" '; // % vor Edit1 legt Suchart fest (*Ausdruck* oder Ausdruck*) CommandText := CommandText + 'AND DeineTabelle.Feld2 LIKE "%' + Edit2.Text + '%" '; Open; end; So kannst Du dir eventuell den Button sparen(Sorry Sharky). Der Button ist geschmacksache, oder ? MFG Armin |
Re: Access Datenbank Durchsuchen (mit Wildcards)
Hallo
Ich entshculdige mich für meine späte antwort, habe im mom echt viel um die ohren :( Naja wie dem auch sei, gut hab den code so mal übernommen...
Delphi-Quellcode:
Gut also ... KUNDEN = Datenbankname
procedure TForm1.Button1Click(Sender: TObject);
var CommandText: String; begin with ADODataSet1 do // TADODataSet begin Close; CommandText := 'SELECT Vorname FROM KUNDEN WHERE '; CommandText := CommandText + 'Vorname LIKE "%' + Edit1.Text + '%" '; // % vor Edit1 legt Suchart fest (*Ausdruck* oder Ausdruck*) //CommandText := CommandText + 'AND DeineTabelle.Feld2 LIKE "%' + Edit2.Text + '%" '; Open; end; end; Vorname = Die Tabelle Das einzige was ich abgewandelt habe ist das
Delphi-Quellcode:
da ich ohne query arbeite (ich hoffe das funzt so auch bzw. sollte es??)
with ADODataSet1 do
Aber wnen ich starte funzt es einwandfrei nur dann gebe ich in das edit z.b. D% ein und klicke auf suchen... dann sagt er mir: Zitat:
danke für support :) |
Re: Access Datenbank Durchsuchen (mit Wildcards)
Hallo Freecer
Also ich habe das Ganze nochmals bei mir als Projekt angelegt und es funktioniert. Dabei habe ich Deine Prozedur bei mir in den Code reinkopiert. Also liegt es nicht am String! Im Projekt verwende ich folgende Komponenten:
Delphi-Quellcode:
Kannst Du bei der ADOConnection1 die Verbindung erfolgreich testen, bzw herstellen? Was für einen Provider verwendest Du in den Datenverknüpfungseigenschaften von ADOConnection1? Ich denke, dass da irgendwo der Fehler liegt. Bitte poste einmal die Datenbank (oder Auszug davon). Dann kann ich mir das mal ansehen und ein funktionierendes Beispiel zurücksenden. :wink:
ADOConnection1: TADOConnection; // Verbindung zu der Datenbank (*.mda)
ADODataSet1: TADODataSet; // Datenmenge kann Table oder Query sein (Du arbeitest also nicht ohne Query, das ist Sie) Edit1: TEdit; // Gesuchter Vorname oder Teil davon - Gesucht wird %Edit1.Text% Button1: TButton; // Suche wird ausgeführt DBGrid1: TDBGrid; // Anzeige der Daten (zur Kontrolle) DataSource1: TDataSource; // Verbindet ADODataSet1 mit DBGrid1 Gruss Armin |
Re: Access Datenbank Durchsuchen (mit Wildcards)
Versuch mal statt
Zitat:
Code:
Grüße
CommandText := CommandText + 'Vorname LIKE ' + QuotedStr('%' + Edit1.Text + '%');
Mikhal |
Re: Access Datenbank Durchsuchen (mit Wildcards)
Das beispiel direkt ober mir war ebenfalls effekt los, trotzdem THX!
also zu deinen fragen... in meiner ADOConenction1 is der connect string: Zitat:
aber mir geht es nicht ein warum der mir IMMER den fehler anzeigt von der ID? Was hat das mit der suche zu tun?? danke für eure mühen :) Also das is jetzt aber echt interessant die funktion funktioniert wudnerbar (wie auch nicht anders erwartet und von dir schon kommentiert) habe eben das project so anchgestellt wie du es gesagt hast und die suche funzt einwandfrei :D also ich gugg jetzt nochmal die sahcen durch...hacke die frag emal als "gelöst" ab... bidde trotzdem im auge behalten dankeeee :D Hab ich euch schon gesagt das ihr echt doll seit? :) mfg. Ok edit numero 3: Also... Mich hat es reichlich gestutzt das er immer dieses edit meinte, hab es einfach mal auf Datasource 2 gesetzt so wie alle anderne dits auch, und nun funzt es, aber wieso geht das nicht wenn die edits auf datasource1 gestellt sind????? leuchtet mir nicht ganz ein :? Edit:4 Bitte habt gedult mit meiner *G*... Gut hab mir gedacht vlt. liegt es an der selben datasource aber NÖ dem war leider nicht so... Genauer: Ich hab ne DataSource2 auf die form geklatscht und stellte die edits auf diese ein gut anzeige wie vorhin und ebenfalls selber fehler....nun ist mir zwar wirklich toll geholfen mit der suche *froi* aber interessant were jetzt wie ich das ergebnis der suche in den edits anzeigen lassen kann...also ich suche nach einem name, Klicke den an und in den edits bei name, vorname blablabla wird dann automatisch Vorname, Nachname usw. ausgefüllt, eben wie wenn ich es in der tabelle anklicke nur geht das jetzt eben irgendwi enicht...:? hoffe is nich zu komplex erklärt von mir... bzw. oder is den mods lieber wenn ich n neues thema dafür aufmache? (wobei das im grunde zusammengehört) mfg. Edit:5 So nummer 5 zum schluss....Das obige prob hat sich ebenfalls gerade gelöst... Es war logisch das die edits nen fehelr verursachen da ich ja nur...
Code:
also vorname selektierte...
CommandText := 'SELECT Vorname FROM KUNDEN WHERE ';
mit dem * funzte es einwandfrei danke leute ihr seit echt die besten :D |
Re: Access Datenbank Durchsuchen (mit Wildcards)
Moin zusammen, hab jetzt schon so alles was in diesem Thread steht ausprobiert,
aber der schreibt mir keine Daten in mein DB Grid, wenn ich versuche eine suche mittels Editfeld und Wildkarts. Meine SQL Abfrage sieht dabei so aus:
Delphi-Quellcode:
Wenn ich anstelle (''%' + EditSuche.Text + '%'')'; einfach einen Namen eingebe findet er in der Accses Datenbank die Einträge.
query1.sql.text := 'SELECT Projektnummer, Projektname, Name FROM tabelProjekt, tabelProjektleiter WHERE ProjektLeiterID = LeiterID AND Name LIKE (''%' + EditSuche.Text + '%'')';
query1.open; Kann mir Jemand helfen? Danke |
Re: Access Datenbank Durchsuchen (mit Wildcards)
Parameter definieren solllte helfen:
Delphi-Quellcode:
query1.Parameters.ParamByName('Name').Value := '%' + EditSuche.Text + '%'; // muss nicht Name sein, einfach das entsprechende Feld in deiner Datenbank, nach welchem du halt suchst
query1.sql.text := 'SELECT Projektnummer, Projektname, Name FROM tabelProjekt, tabelProjektleiter WHERE ProjektLeiterID = LeiterID AND Name LIKE :Name'; // selbiges wie oben bei dem Parameter query1.open; |
Re: Access Datenbank Durchsuchen (mit Wildcards)
Zitat:
Delphi-Quellcode:
Gruß
("%' + EditSuche.Text + '%") anstelle von (''%' + EditSuche.Text + '%'')
tr909 |
Re: Access Datenbank Durchsuchen (mit Wildcards)
Delphi-Quellcode:
- funktioniert,
query1.sql.text := 'SELECT Projektnummer, Projektname, Name FROM tabelProjekt, tabelProjektleiter WHERE ProjektLeiterID = LeiterID AND Name LIKE ''Honsy''';
Delphi-Quellcode:
- funktioniert schon nicht mehr,
query1.sql.text := 'SELECT Projektnummer, Projektname, Name FROM tabelProjekt, tabelProjektleiter WHERE ProjektLeiterID = LeiterID AND Name LIKE ''EditSuche.Text''';
Delphi-Quellcode:
- funktioniert leider auch nicht.
query1.sql.text := 'SELECT Projektnummer, Projektname, Name FROM tabelProjekt, tabelProjektleiter WHERE ProjektLeiterID = LeiterID AND Name LIKE ("%' + EditSuche.Text + '%")';
Zitat:
Gruß Honsy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz