Du kannst es natürlich noch viel eleganter machen, aber so wäre es eine schnelle Möglichkeit, viele Queries unter einen Hut zu bekommen. Ich würde es noch eleganter machen, nämlich über dynamisch erzeugte TQueries. Du definierst Dir zwei Arrays, eins mit Beschreibungen, das andere mit SELECT-Anweisungen. SQLQuery[i] ist das SELECT für den Bericht mit Namen Beschreibung[i].
Dann änderst Du das Combobox1Change-Event so ab;
Delphi-Quellcode:
Procedure TForm1.Combobox1Change (Sender : TObject);
Var
Q : TQuery;
Begin
Q := Combobox1.Items.Objects[ComboBox1.ItemIndex];
If Not Assigned (Q) Then Begin
Q := TQuery.Create (Nil);
Q.Database := 'foobar';
Q.SQL.Text := SQLCmd [ComboBox1.ItemIndex];
Q.Active := True;
Combobox1.Items.Objects[ComboBox1.ItemIndex] := Q;
End;
DataSource1.Dataset := Q;
End;
Am Anfang füllst Du einfach die ComboBox1.Items Eigenschaft mit den Beschreibungen. Wenn Du nun per Combobox einen Bericht auswählst, wird geprüft, ob schon eine
Query angelegt ist. Wenn nicht, wird das jetzt nachgeholt.
Du musst aber die Queries beim FormDestroy wieder freigeben.
Viel viel umständlicher geht es mit einer Klasse 'TReport', aber wozu? Ich finde diese Möglichkeit schön kompakt. Für einen Prototypen reicht es allemal. Wenn Du aber noch Formatierungsanweisungen für die einzelnen Spalten mit kodieren willst, dann solltest Du eine Reportklasse erstellen.