Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Query-Komponente mit mehreren SQL-Statments zur Auswahl... (https://www.delphipraxis.net/57809-query-komponente-mit-mehreren-sql-statments-zur-auswahl.html)

mschaefer 27. Nov 2005 05:55

Datenbank: Firebird • Version: 1.5 • Zugriff über: unwichtig

Query-Komponente mit mehreren SQL-Statments zur Auswahl...
 
Moin, moin,

also ich suche eine Query-Komponente, die mehrere SQL-Statements zur Auswahl vorhalten kann. Oder eine Idee wei man dies sinnig realisieren könnte.

Hintergrund: Habe ein Formualr, wo nach Status verschiedene SQL-Statements für die Anzeige in einem DBGrid gebraucht werden. Im Moment lade ich die SQL´s immer vor dem aktivieren der Query je nach Status ein. Da diese sich aber nicht verändern müßte man die doch auch statisch in der Komponente unterbringen können. Was mein Ihr dazu?

Grüße // Martin

alzaimar 27. Nov 2005 09:25

Re: Query-Komponente mit mehreren SQL-Statments zur Auswahl.
 
Wieso? Nimm doch einfach verschiedene Queries. Pack Sie z.B. in ein Array Of TQuery. Oder in eine Combobox:
Beispiel: 4 x TQuery, 1xTComboBox, 1xTDataSource, 1xTDBGrid.
Delphi-Quellcode:
Procedure TForm1.FormCreate (Sender : TObject);
Var
  i : Integer;

Begin
  DataSource1.DataSet := Nil;
  DBGrid1.DataSource := DataSource1;
  ComboBox1.Items.clear;
  For i:=0 to ComponentCount - 1 do
    if Components[i] is TQuery Then
      ComboBox1.Items.AddObject (Components[i].Name, Components[i]);
  ComboBox1.ItemIndex := 0; // Sollte ComboBox1Change auslösen
End;

Procedure TForm1.ComboBox1Change (Sender : TObject);
Begin
  With ComboBox1 do
    DataSource1.DataSet := (Items.Objects[ItemIndex]) as TQuery;
End;
Was ich hier mache? Ich verzichte sogar auf das Array of TQuery und packe in die Objects-Eigenschaft der ComboBox.Items (sind ja TStrings), die Namen der Queries sowie einen Zeiger auf die Query selbst. Anstatt des Names kannst (und solltest) Du besser eine Beschreibung packen, aber egal.

Wenn ich den Inhalt der ComboBox ändere, wird das OnChange-Ereignis ausgelöst. Hier wechsle ich einfach die Dataset-Eigenschaft der Datasource und das war's.

mschaefer 27. Nov 2005 11:31

Re: Query-Komponente mit mehreren SQL-Statments zur Auswahl.
 
Einen sohönen Sonntagmorgen,

hallo Alzeimer, auch wenn ich mir dass wohl etwas anders gedacht habe, würde gerne einige meiner vielen Query-Komponenten verschweinden lassen, ist dass mit dem Komponentenansprechen über die Combobox eine wirklich raffinierte Varainte. Das spart glatt Create und Destroy im Code. Wieder was gelernt :!:

Viele Grüße // Martin

alzaimar 27. Nov 2005 12:37

Re: Query-Komponente mit mehreren SQL-Statments zur Auswahl.
 
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.

mschaefer 27. Nov 2005 13:09

Re: Query-Komponente mit mehreren SQL-Statments zur Auswahl.
 
Hallo Alzeimer,

hiermti sage ich Danke! Denke das ist es. Wenn ich jetzt die SQL für die Queries noch in die items schreibe habe ich auch alle SQL für ein Formular in einer Komponente und spare mit die ganze Query-Clickerei. Das gefällt mir :thumb: . Das hilft richtig weiter.

Habe leider ein Datamaodule mit fast 25-Queries und da ist langsam Handlungsbedarf. Ausserdem ist es praktisch, wenn man die SQL-Anweisungen an einem Ort zusammengefaßt hat. Das bringt Übersicht und auch die Möglichkeit die SQL´s in einem Rutsch abzuspeichern oder zu laden.

Viele Grüße // Martin


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 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