Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TIBCQuery Join Abfragen (https://www.delphipraxis.net/201855-tibcquery-join-abfragen.html)

Int3g3r 4. Sep 2019 08:49

TIBCQuery Join Abfragen
 
Guten Morgen,

Ich verstehe die TIBCQuery Komponente noch nicht so ganz.
Wie lässt sich die TIBCQuery mit JOINS verwenden ?

Code:
1) select * from fahrt
Hier lässt sich der SQL-Befehl ohne weiteres in das TIBCQuery eintragen. Per Fields-Editor lassen sich alle Felder hinzufügen. Dies funktioniert soweit.
Code:
2) select * from fahrt WHERE id = (variable)
Da ich eine Variable verwende kann ich den SQL-Befehl nicht direkt in die TIBCQuery eintragen.
Somit mache ich dies in Delphi:
Delphi-Quellcode:
qryFahrt.Close;
qryFahrt.SQL.Text := 'select * from fahrt WHERE id = '+ variable;
qryFahrt.Open;
Hier lassen sich die Felder noch per Field-Editor hinzufügen wenn ich WHERE klausel weglasse. Der SQL Generator lässt sich hier auch noch verwenden da ich nur eine Tabelle habe.
Somit funktioniert auch dieses.

Code:
3)select * from fahrt inner join auftrag on id = id where auftrag.id = (variable)
Bei einem JOIN komme ich nicht mehr mit. Das Hinzufügen der Felder Funktioniert noch wenn ich die WHERE klausel weglasse. Danach aber habe ich folgendes Problem:

Ich habe zwei Tabellen somit kann ich nicht mehr per SQL Generator den SQL Code generieren lassen der für das Insert,Update,Delete,Lock,Refresh... zuständig ist.
Es lässt sich halt nur eine Tabelle selektieren.

Kann mir jemand ein Beispiel machen wie ich Joins mit TIBCQuery verwende ?


Freundliche Grüsse
Int3g3r

MyRealName 4. Sep 2019 08:58

AW: TIBCQuery Join Abfragen
 
Das mit den Variablen ist so...

Was Du suchst ist das folgende für den IBCQuery1.SQL.Text:
Zitat:

select * from fahrt WHERE id = :Id
und dann im Delphi Code schreibst du sowas wie

Zitat:

IBCQuery1.ParamByName('Id').AsInteger := MyId;
IBCQuery1.Open;
Das IBCQuery ist ja kein Query Builder. von Daher solltest Du die Joins einfach per Hand schreiben und dann reinkopieren.

jobo 4. Sep 2019 09:09

AW: TIBCQuery Join Abfragen
 
Zitat:

Zitat von Int3g3r (Beitrag 1444629)
Ich habe zwei Tabellen somit kann ich nicht mehr per SQL Generator den SQL Code generieren lassen der für das Insert,Update,Delete,Lock,Refresh... zuständig ist.
Es lässt sich halt nur eine Tabelle selektieren.

Du wirst kaum allgemeine Mechanismen finden, die ein Update (Insert, Delete) auf mehr als eine Tabelle machen.
Stell Dir vor, dass Dein Join vor allem eine sachgerechte Darstellung von Daten liefert. Häufig eine Haupttabelle mit ein oder mehreren Nachschlagewerten aus Hilfstabellen. Auch wenn die Daten als Join gelesen werden, erfolgt das Update immer nur auf die Haupttabelle. Das sollte ein Generator eigentlich auch berücksichtigen (ich kenne die IB Komponenten nich). Evtl. müsstest Du nachsehen, ob Dein Bedarf tatsächlich nur ein Problem von Nachschlagetabellen ist, hier ist dann evtl. der Aufbau / Anwendung der DBLookup Komponenten zu korregieren.

Es gibt zusätzlich verschiedene, komplexere Möglichkeiten, die meist DB spezifisch sind.
Man kann z.B. Storedprocedures erstellen, die für das "gleichzeitige" Update mehrerer Tabellen zuständig sind. Diese werden aber kaum durch einen Generator aufgerufen, sondern müssen natürlich explizit in die Updatestatement property eingetragen werden.

MyRealName 4. Sep 2019 09:52

AW: TIBCQuery Join Abfragen
 
Es gibt auch noch doch bestimmt ein IBCUpdateSQL (Ich denke mal, Du nutzt die DevArt IB Components), dort kannst Du dich mal damit beschäftigen, wie man ein Update mit Table Joins machen kann. Auch mal in die Beispiele schauen die DevArt da mitliefert.

Int3g3r 4. Sep 2019 09:55

AW: TIBCQuery Join Abfragen
 
Vielen Dank euch beiden für die Hilfe.


Zitat:

select * from fahrt WHERE id = :Id
IBCQuery1.ParamByName('Id').AsInteger := MyId;
IBCQuery1.Open;
Das Habe ich gesucht.

Neumann 4. Sep 2019 10:18

AW: TIBCQuery Join Abfragen
 
TIBCQuery kann die Insert/Update/Delete-Sql auch bei Abfragen über mehrere Tabellen automatisch erzeugen, zumindest für eine Tabelle. Muss man dann bei SQL-Generator auswählen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf