Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - "Case RadioGroup.ItemIndex" .. mehrere SQL-Zeilen


peppi - Mo 31.03.03 13:13
Titel: "Case RadioGroup.ItemIndex" .. mehrere SQL-Zeilen
Hallo,

hab ein Problem mit meiner RadioGroup. Ich möchte bei klicken der einzelnen Auswahlfelder meiner Query verschiedenen SQL-Text zuweisen.

Hab das folgendermaßen geschrieben:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
   with Query1 do begin
    close;
     with SQL do begin
      clear;
     ADD('select * from tabelle');
     ADD('where NUMMER LIKE ' + QuotedStr(Edit1.Text + '%'));
     ADD('and NUMMER2 = ' + QuotedStr(Edit2.Text+ ''));
  case RadioGroup1.ItemIndex of
   1:  ADD('and NUMMER not in ( select NUMMER from tabelle where
                DATUM IS NOT NULL)'); 
       ADD('and NAME = ' + QuotedStr(Edit2.Text+ ''));
       end;
 Add ('order by DATUM, NUMMER, NAME');
end;
Query1.Open;
end;
...


Beim ausführen bekomme ich immer die Fehlermeldung:

"Konstantenausdruck erwartet". Kann man mit der Case-Anweisung nicht mehrere Zeilen zuordnen? Sollte ich hier lieber die if Anweisung nehmen?
Wollte lieber bei Case bleiben aus Gründen der Übersichtlichkeit.

LG Jana!!


UGrohne - Mo 31.03.03 13:24


Quelltext
1:
2:
1:  ADD('and NUMMER not in ( select NUMMER from tabelle where DATUM IS NOT NULL)'); 
       ADD('and NAME = ' + QuotedStr(Edit2.Text+ ''));


In diesen Zeilen steckt der Fehler. Bei case 1 führt er die Add-Anweisung aus, dann muss danach aber ein anderer Fall kommen, also 2: und die dazugehörige Anweisung. Die ganze case-Anweisung muss dann mit end; abgeschlossen werden.

Willst Du mehrere Anweisung bei case 1 ausführen, musst Du diese in begin ... end; einbauen, also etwa so:

Quelltext
1:
2:
3:
4:
5:
6:
7:
1:  begin
       ADD('and NUMMER not in ( select NUMMER from tabelle where 
                DATUM IS NOT NULL)'); 
       ADD('and NAME = ' + QuotedStr(Edit2.Text+ '')); 
     end;
2: {eine andere Anweisung oder Anweisungsblock}
end;


Dann müsste es funktionieren


kiwicht - Mo 31.03.03 13:24

klar, geht alles ;)

und zwar nach folgendem Prinzip:



Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
case RadioGroup.ItemIndex of
0: begin
    [...]
    end;
1: begin
    [...]
    end;
end;

fertich!

fragen? fragen!

mfg


//EDIT
WAAAHH.... zu langsam.... heul... :(

Moderiert von user profile iconUGrohne: Code-Tags verbessert (hehe, war schneller!)


peppi - Mo 31.03.03 13:30

Ahhh... Super !!!

Danke euch BEIDEN für die Hilfe :D

LG Jana!!!