Autor Beitrag
Kuckuckskind
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mi 20.11.02 14:32 
Hallo,

ich habe da mal ein "kleines" Problem:

Hier kommt erst einmal der betreffende Quelltext:
ausblenden 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:
ausblenden 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:
ausblenden Quelltext
1:
schnr_suche := copy(schnr_suche,1,length(schnr_suche)-5);					

Naja, Resultat ist auch ein Fehler...

Was mache ich nur falsch???
Sephiroth
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 102



BeitragVerfasst: 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:

ausblenden 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
Kuckuckskind
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mi 20.11.02 17:25 
Wow, danke! Das klappt einwandfrei!!! :D