![]() |
Aktion entsprechend ComboBox...
Hallo,
ich habe eine ComboBox, die über eine php-Datei gefüllt wird. Soweit funktioniert das auch. Nun würde ich noch gerne eine Möglichkeit haben, in Abhängigkeit des ausgewählten Items eine bestimmte aktion auszuführen. Bislang hätte ich das so gemacht:
Delphi-Quellcode:
Nun habe ich allerdings das Problem, dass die ComboBox sehr umfangreich geworden ist. Mit den If-Abfragen komm ich da natürlich
if ComboBox1.Text = 'aktion1' then
qrMain.SQL.Clear; qrMain.SQL.Text:= 'SELECT blablabla;'; qrMain.Active:= True; qrMain.open; nicht weit, da so in jedem Fall nur die letzte Aktion der ComboBox ausgeführt wird. Warum die IF-Abfrage übergangen wird, weiß ich nicht. Wie könnte man noch abfragen, welches item ausgewählt wurde? Liebe Grüße Steffi |
Re: Aktion entsprechend ComboBox...
Über den ItemIndex evtl.?
|
Re: Aktion entsprechend ComboBox...
Ok, bei 25 Items dann am besten über eine case-Abfrage?
Entschuldigt bitte diese dummen Fragen, aber ich bin noch ziemlich neu und nicht so wirklich firm, was hier am schnellsten von der performance her wäre... :oops: Liebe Grüße Steffi |
Re: Aktion entsprechend ComboBox...
Haargenau.
Delphi-Quellcode:
case ComboBox.ItemIndex of
0: Machwas; 1: MachwasAnderes; ... end; |
Re: Aktion entsprechend ComboBox...
Hallo Steffi,
der IF-Abfrage folgt ein einzelnes Statement, da du den BEGIN-END-Block vergessen hast. Grundsätzlich sollte der Wechsel des Items in einer ComboBox keine Aktion auslösen, die einen spürbaren Zeitverbrauch mit sich bringt. Grüße vom marabu |
Re: Aktion entsprechend ComboBox...
Hi marabu,
so gut gemeint und richtig Dein Rat auch ist, ich habe nirgends lesen können, dass sie direkt im OnChange-Ereignis eine Aktion auslösen möchte. |
Re: Aktion entsprechend ComboBox...
Zitat:
|
Re: Aktion entsprechend ComboBox...
Kann ich bei in Delphi bei der Case-Abfrage immer nur eine Aktion pro item durchführen?
Also:
Delphi-Quellcode:
Was mache ich dann, wenn ich aber soetwas brauche?
case ComboBox.ItemIndex of
0: eineAktion; 1: eineAktion; ... end;
Delphi-Quellcode:
Letzte Doofi-Frage für heute... :oops:
case ComboBox1.ItemIndex of
0:qrMain.SQL.Clear; qrMain.SQL.Text:= 'SELECT blabla1;'; qrMain.Active:= True; qrMain.open; brake; 1:qrMain.SQL.Clear; qrMain.SQL.Text:= 'SELECT blabla2;'; qrMain.ParamByName('jahr').asString := Jahr; qrMain.Active:= True; qrMain.open; Liebe Grüße Steffi |
Re: Aktion entsprechend ComboBox...
Hi Steffi,
nein, Du kannst natürlich auch mehr ausführen:
Delphi-Quellcode:
case ComboBox1.ItemIndex of
0: begin { Dein Code } end; 1: begin { Dein Code } end; ... |
Re: Aktion entsprechend ComboBox...
Delphi-Quellcode:
[edit] Die Kuh war schneller :mrgreen: [/edit]
case ComboBox.ItemIndex of
0: begin eineAktion; nochneAktion; end; 1: begin eineAktion; nochneAktion; end; ... end; |
Re: Aktion entsprechend ComboBox...
Zitat:
|
Re: Aktion entsprechend ComboBox...
[OT] That' s right :lol: [/OT]
|
Re: Aktion entsprechend ComboBox...
Delphi-Quellcode:
Das with ... do ersetzt das qrMain vor jeder Anweisung, ersparrt somit Schreibarbeit.
if ComboBox1.Text = 'aktion1' then
with qrMain do begin SQL.Clear; SQL.Text:= 'SELECT blablabla;'; Active:= True; open; end; Das begin ... end bewirkt, das alles Ausgeführt wird und nicht nur eine Zeile. Ich hoffe das hilft dir weiter. ;) MfG freak |
Re: Aktion entsprechend ComboBox...
Ich wurde noch nie sooo nett mit Ratschlägen überhäuft wie in diesem Forum... :thumb:
Vielen, vielen lieben Dank. Liebe Grüße Steffi |
Re: Aktion entsprechend ComboBox...
Hai Steffi,
ich habe noch eine Anmerkung zu deinem Code. Du solltest versuchen in dem Caseblock keinen redundanten Code verwenden. Zum eines sparst Du einige Zeilen und zum anderen wird der Code übersichtlicher.
Delphi-Quellcode:
begin
qrMain.Close; qrMail.SQL.Clear; // Wenn sichergestellt ist das immer ein SQL.Text := kommt muss man das Statment nicht vorher löschen. case ComboBox1.ItemIndex of 0: qrMain.SQL.Text := 'SELECT blabla1;'; 1: begin qrMain.SQL.Text := 'SELECT blabla2;'; qrMain.ParamByName('jahr').asString := Jahr; end; end; if (qrMain.SQL.Text <> '') then // und kann sich dann auch diese Abfrage sparen. begin qrMain.Open; end; |
Re: Aktion entsprechend ComboBox...
Hi,
gute Idee Stephan, wobei man aber vielleicht noch einen zusätzlichen Boolean einbaut, mit dem man wahlweise die Anweisung .Open oder .Execute aufruft, falls vielleicht doch ein UPDATE- oder DELETE-Statement auftaucht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 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