AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Query-Komponente mit mehreren SQL-Statments zur Auswahl...
Thema durchsuchen
Ansicht
Themen-Optionen

Query-Komponente mit mehreren SQL-Statments zur Auswahl...

Ein Thema von mschaefer · begonnen am 27. Nov 2005 · letzter Beitrag vom 27. Nov 2005
Antwort Antwort
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#1

Query-Komponente mit mehreren SQL-Statments zur Auswahl...

  Alt 27. Nov 2005, 04:55
Datenbank: Firebird • Version: 1.5 • Zugriff über: unwichtig
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
Martin Schaefer
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

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

  Alt 27. Nov 2005, 08:25
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#3

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

  Alt 27. Nov 2005, 10:31
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
Martin Schaefer
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

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

  Alt 27. Nov 2005, 11:37
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#5

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

  Alt 27. Nov 2005, 12:09
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 . 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
Martin Schaefer
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz