![]() |
Datenbank: Microsoft Access • Version: kA • Zugriff über: ADO
ADODataSet Suche
'loha Folks,
über ein ADODataset setze ich folgenden Query ab, dessen Ergebnis über eine DataSource in einem DBGrid angezeigt wird:
SQL-Code:
Die Prozedur, welche den Query im Programm aufruft ist diese hier:
SELECT * FROM LoginUser, LoginRight, LoginUser_Right
WHERE Username = :Username OR Forename = :Forename OR Surname = :Surname;
Delphi-Quellcode:
Ich suche also nach den in den Edit angegebenen Zeichen in der Datenbank. Dies funktioniert soweit auch ganz gut. Nun möchte ich aber beim Suchen nicht immer den exakten Begriff eingeben. Die Suche soll also zumindest so intelligent sein, dass in der Datenbank nach Einträgen gesucht wird, welche mit den selben Buchstaben beginnen.
procedure Tfrm_Main.btnOkClick(Sender: TObject);
begin with ADODataSet_LoginUser do begin Close; Active := False; Parameters.ParamByName('Username').Value := edtUsername.Caption; Parameters.ParamByName('Forename').Value := edtForename.Caption; Parameters.ParamByName('Surname').Value := edtSurname.Caption; Active := True; Open; end; end; Bsp. Ich suche nach dem Buchstaben "a". In der Datenbank gibt es 100 Einträge, welche mit a beginnen. Genau diese möchte ich jetzt alle sehen. Prinzipiell wird dies ja mit
SQL-Code:
gemacht. Da ich aber den Tokken drin habe, weiss ich nicht wie das nun geschrieben wird :-/
WHERE Username = 'a%'
Bin für Input sehr empfänglich -.- Mit WebObjects habe ich die Strings immer mit zwei senkrechten Strichen zusamensetzen können (||), in Delphi scheint dies nicht zu funktionieren. |
Re: ADODataSet Suche
Moin Hirnstroem,
also ich würde es so machen:
Delphi-Quellcode:
BTW:
Parameters.ParamByName('Username').Value := edtUsername.Caption + '%';
Für mich sieht der Prefix edt so aus, als wäre es ein Editfeld. Das hat allerdings keine Caption :gruebel: |
Re: ADODataSet Suche
Hallo Christian,
vielen Dank, jetzt bekomme ich zwar keine Ergebnisse mehr zurück, aber die Vorgehensweise klingt logisch. edt ist i.d.T ein Editfeld. Leider kann ich zwischen edt und dem Rest kein Underline (_) setzen, IntraWeb will dies nicht zulassen. Das mit der Caption hingegen funktioniert einwandfrei, aber wenn du das so sagst...nehmen wir halt Text. thx und Grüsse hirnstroem |
Re: ADODataSet Suche
Hi Hirnstroem,
versuchs doch mal so...
SQL-Code:
und...
SELECT * FROM LoginUser, LoginRight, LoginUser_Right
WHERE Username LIKE :Username OR Forename = :Forename OR Surname = :Surname;
Delphi-Quellcode:
Wenn es sich bei edtUsername um ein TEdit Feld handelt, sollte es eigentlich so aussehen:
...
Parameters.ParamByName('Username').Value := QuotedStr(edtUsername.Caption + '%'); ...
Delphi-Quellcode:
...
Parameters.ParamByName('Username').Value := QuotedStr(edtUsername.Text + '%'); ... |
Re: ADODataSet Suche
Hmm, komisch.
Wenn ich nach exakt übereinstimmenden Ausdrücken suche, wird anstandslos das gewünschte Ergebnis zurückgegeben. Alles andere hingegen will nicht wirklich funktionieren, sprich, nur leere Ergebnisse werden zurückgeliefert. Verzichte ich allerdings auf die Attribute Forename und Surname, funktioniert die Sache wieder. Ich habe gehofft, diese Suche liesse sich mit einem Query realisieren, stattdessen werde ich jetzt wohl einfach drei verwenden. Vielen Dank für die Hilfe. Grüsse hirnstroem |
Re: ADODataSet Suche
Moin Hirnstroem,
Du solltest bei Forename und Surname mal das = durch ein LIKE ersetzen, sonst funktioniert die Verwendung des % nicht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 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