Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADODataSet Suche (https://www.delphipraxis.net/76644-adodataset-suche.html)

hirnstroem 7. Sep 2006 14:39

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:
SELECT * FROM LoginUser, LoginRight, LoginUser_Right
WHERE Username = :Username
OR Forename = :Forename
OR Surname = :Surname;
Die Prozedur, welche den Query im Programm aufruft ist diese hier:

Delphi-Quellcode:
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;
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.

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:
WHERE Username = 'a%'
gemacht. Da ich aber den Tokken drin habe, weiss ich nicht wie das nun geschrieben wird :-/

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.

Christian Seehase 7. Sep 2006 14:51

Re: ADODataSet Suche
 
Moin Hirnstroem,

also ich würde es so machen:

Delphi-Quellcode:
Parameters.ParamByName('Username').Value := edtUsername.Caption + '%';
BTW:
Für mich sieht der Prefix edt so aus, als wäre es ein Editfeld.
Das hat allerdings keine Caption :gruebel:

hirnstroem 7. Sep 2006 15:01

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

KalZakath 7. Sep 2006 15:06

Re: ADODataSet Suche
 
Hi Hirnstroem,

versuchs doch mal so...

SQL-Code:
SELECT * FROM LoginUser, LoginRight, LoginUser_Right
WHERE Username LIKE :Username
OR Forename = :Forename
OR Surname = :Surname;
und...

Delphi-Quellcode:
...
Parameters.ParamByName('Username').Value := QuotedStr(edtUsername.Caption + '%');
...
Wenn es sich bei edtUsername um ein TEdit Feld handelt, sollte es eigentlich so aussehen:

Delphi-Quellcode:
...
Parameters.ParamByName('Username').Value := QuotedStr(edtUsername.Text + '%');
...

hirnstroem 7. Sep 2006 15:43

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

Christian Seehase 7. Sep 2006 16:05

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