![]() |
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 |
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:
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.
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; 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. |
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 |
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:
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.
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; 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. |
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