Mehrfach ZQueries einsetzen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Zet_Bonton
Beiträge: 39
Registriert: Di 7. Apr 2009, 17:11

Mehrfach ZQueries einsetzen

Beitrag von Zet_Bonton »

Hallo,

und zwar hab ich ein reine technische Frage.
Ich möchte mehrere Zqueries laufen lassen, genauer gesagt drei insgesamt. Ich hab eine datasource, eine ZConnection und ich möchte drei Zqueries haben.
Wie läuft das jetzt, muss ich jetzt für jede Zquery eine Datasource extra anlegen oder kann man das so einstellen das eine datasource für die drei Zqueries ausreicht. Wenn ja, wie mach ich das

Gruß

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Mehrfach ZQueries einsetzen

Beitrag von monta »

Die Datasource brauchst du aber nur, wenn du auch Datensensitive Komponenten mit der Query verknüpfen willst, ansonsten kannst du sie dir sparen.

Wenn du allerdings drei unterschiedliche Querys in entsprechenden Komponenten anzeigen willst, brauchst du auch drei mal die Datasource, weil eine Datasource nur auf eine Query hört.
Wenn du natürlich nur einen DB-Grid hast und immer nur eine Query öffnen willst, kannst du natürlich auch zur Laufzeit die Query setzen auf welche die Datasource hört. Das hängt jetzt davon ab, wie du die Queries einsetzen willst.
Johannes

Zet_Bonton
Beiträge: 39
Registriert: Di 7. Apr 2009, 17:11

Re: Mehrfach ZQueries einsetzen

Beitrag von Zet_Bonton »

Ok,

mir ist schon klar das eine datasource nur eine Zquery kennt. Ich dachte, das es irgendwie möglich wär das eine Datasource mehrere Zqueries "bedienen" kann.Bei mir ist eben der Fall, das ich drei Comboboxen habe, die jeweils Werte aus drei verschiedenen Tabellen einer Datenbank herauslesen.
Wenn ich nur eine Zquery einsetze dann erscheinen beim ausführen des Programms nur in der ersten Combobox die werte, die anderen zwei Combos bleiben leer, also müsste ich dann doch drei Datasource´s einsetzen?

Gruß

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Mehrfach ZQueries einsetzen

Beitrag von monta »

Ja, wenn du jede CB aus einer eigenen Query bedienst, dann auch drei Datasource für jede CB eine.

Alternativ könntest du höchstens die Abfrage in eine Query packen (JOIN) und durch die unterschiedlichen Feldnamen wieder aufteilen, dann brauchst nur eine Query und eine Datasource.

So wie du es aber beschreibst, brauchst du drei Queries und eben auch drei Datasources. Da gibt es keinen weg, der einen DS beizubringen, drei Queries zu verarbeiten.
Johannes

Zet_Bonton
Beiträge: 39
Registriert: Di 7. Apr 2009, 17:11

Re: Mehrfach ZQueries einsetzen

Beitrag von Zet_Bonton »

Das Problem ist, selbst wenn ich jetzt jeder dieser Query eine datasource zuweise, dann geschieht dennoch nichts.
In FormShow wird eben die erste Query verarbeitet die unteren Queries nicht.
Als Beispiel

Code: Alles auswählen

procedure Tform4.FormShow(Sender: TObject);
begin
if not ZQuery1.Active then
    begin
       ZQuery1.Connection:=ZConnection1;
    end;
 
ZQuery1.SQL.Clear;
     ZQuery1.SQL.Add('select * from TabelleA ');
 
     ZQuery1.Open;
 
     if ZQuery1.RecordCount > 0 then begin
     if ZQuery1.FieldCount > 0 then begin
        while not ZQuery1.EOF do begin
              Index1:=ZQuery1.FieldByName('TabelleA_id').AsInteger;
 
              combobox1.AddItem(ZQuery1.FieldByName('TabelleA_name').asString,TObject(Index1))
 
              ZQuery1.Next;
        end;
        // ZQuery_classification.Close;
        exit;
     end;
  end;
 
//Die nächste Zquery wird garnicht verarbeitet
 
if not ZQuery2.Active then
    begin
       ZQuery2.Connection:=ZConnection1;
    end;
 
  ZQuery2.SQL.Clear;
     ZQuery2.SQL.Add('select * from TabelleB ');
 
     ZQuery2.Open;
 
       if ZQuery2.RecordCount > 0 then begin
     if ZQuery2.FieldCount > 0 then begin
        while not ZQuery2.EOF do begin
              Index2:=ZQuery2.FieldByName('TabelleB_id').AsInteger;
              combobox2.AddItem(ZQuery2.FieldByName('TabelleB_name').asString,TObject(Index2));
              ZQuery2.Next;
        end;
        // ZQuery_classification.Close;
        exit;
     end;
  end;
 
end;
Zuletzt geändert von monta am Di 14. Apr 2009, 12:14, insgesamt 1-mal geändert.
Grund: Highlighter

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6766
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Mehrfach ZQueries einsetzen

Beitrag von af0815 »

Zet_Bonton hat geschrieben:Das Problem ist, selbst wenn ich jetzt jeder dieser Query eine datasource zuweise, dann geschieht dennoch nichts.
In FormShow wird eben die erste Query verarbeitet die unteren Queries nicht.
Wenn du mit dem Debugger durchgehst, kommst du zum Code von der Query2 , oder steigt das Programm vorher beim Exit aus ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten