Anonymous - Mi 20.11.02 14:32
Titel: String kürzen (für Suche)
Hallo,
ich habe da mal ein "kleines" Problem:
Hier kommt erst einmal der betreffende Quelltext:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| { *********** Suche nach SCHÜLERNUMMER ****************************************} procedure Tform_admin.Button2Click(Sender: TObject); begin schnr_suche := copy(schnr_suche,1,length(schnr_suche)-5); //FEHLER!!!
Query2.Close; Query2.SQL.Clear; Query2.SQL.Text := 'SELECT SchuelerNr, Nachname, Vorname FROM schueler WHERE '+schnr_suche+''; Query2.Open; end;
procedure Tform_admin.e_nachnameChange(Sender: TObject); begin schnr_suche := schnr_suche+'(schueler.Nachname LIKE "%'+e_nachname.Text+'%") AND '; end;
procedure Tform_admin.ausleihpanelClick(Sender: TObject); begin schnr_suche := ''; end;
procedure Tform_admin.e_vornameChange(Sender: TObject); begin schnr_suche := schnr_suche+'(schueler.Vorname LIKE "%'+e_vorname.Text+'%") AND '; end; // SchülerNr. Suche Ende |
So, wie man sehen kann, will ich anhand von zwei Eingabemöglichkeiten eine Schüler-Nr. finden. Ich könnte die Abfrage natürlich auch umgestalten, indem ich ein 'OR' benutze, aber dann wird immer nur nach Vor- oder Nachname gesucht. Und das ist ja nicht der Sinn der Sache!
Mein Problem ist jeweils diese Zeile:
Quelltext
1:
| schnr_suche := schnr_suche+'(schueler.Vorname LIKE "%'+e_vorname.Text+'%") AND '; |
Egal, ob nur nach dem Vor- oder dem Nachnamen gesucht wird, steht das AND am Zeilenende und verursacht einen Fehler. Ich hab mir gedacht, dass ich dieses Ende dann einfach abschneide:
Quelltext
1:
| schnr_suche := copy(schnr_suche,1,length(schnr_suche)-5); |
Naja, Resultat ist auch ein Fehler...
Was mache ich nur falsch???
Sephiroth - Mi 20.11.02 14:49
ich wurde es nicht so machen mit dem abschneiden der letzten Zeichen. Frag doch einfach ab ob bereits etwas in schnr_suche drin steht. Wenn ja dann setzt an ein rein, ansonsten halt net.
Desweiternen hast du einen groben Denkfehler. Wenn du es ins OnChange-Ereigniss eines Edit feldes machst dann wird dein Suchstatement bei jedem Tastendruck im Editfeld erweitert. D.h. wenn du z.B. nach "Tes" suchst dann hast du folgenden String:
schnr_suche := (schueler.Nachname LIKE "%T%") AND (schueler.Nachname LIKE "%Te%") AND (schueler.Nachname LIKE "%Tes%") AND
Ich hoffe es ist verständlich was ich damit sagen will.
Mach es doch einfach so:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure Tform_admin.Button2Click(Sender: TObject); begin if e_nachname.Text <> '' then schnr_suche := '(schueler.Nachname LIKE "%'+e_nachname.Text+'%")';
if e_vorname.Text <> '' then begin if schnr_suche <> '' then schnr_suche := schnr_suche + ' AND '; schnr_suche := schnr_suche + '(schueler.Vorname LIKE "%'+e_vorname.Text+'%")' end;
Query2.Close; Query2.SQL.Clear; Query2.SQL.Text := 'SELECT SchuelerNr, Nachname, Vorname FROM schueler WHERE '+schnr_suche+''; Query2.Open; end; |
Der Code ist ungetestet aber so in etwa sollte des funktionieren