Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   TQuery (TIBCQuery) - mehrere Master-Detailverbindungen komplett durchlaufen (https://www.delphipraxis.net/187122-tquery-tibcquery-mehrere-master-detailverbindungen-komplett-durchlaufen.html)

RonniS 29. Okt 2015 23:00

AW: TQuery (TIBCQuery) - mehrere Master-Detailverbindungen komplett durchlaufen
 
Zitat:

Zitat von lowmax_5 (Beitrag 1320139)
Zitat:

Im Prinzip keine schlechte Idee, aber diese Lösung liefert mir ja auch "nur" alle Daten auf einen Rutsch und nicht getrennt.. leider..
ansonsten eine echt gute Idee, die Logik auszulagern.. vielleicht lässt die Idee dahinter doch irgendwie verwenden..
Code:
if I_TAB1='True' then
Dieses liefert Dir bedingt die Abfrage, ob die Tabelle dabei ist.Wenn beim Input-Parameter 'True' übergeben wird, wedren die Daten abgefragt, ansonsten nicht. So lässt sich die Logik in der SP prima schalten. Und es ist vor allen Dingen SEHR schnell...

Das mit dem

if I_TAB1='True' then

hab ich leider nicht so ganz verstanden. :oops: Wärst Du so nett und könntest mir das noch ein wenig genauer erklären? Danke Dir schon mal..

lowmax_5 30. Okt 2015 15:58

AW: TQuery (TIBCQuery) - mehrere Master-Detailverbindungen komplett durchlaufen
 
Folgende Tabellen sind gegeben:

Code:
CREATE TABLE KUNDEN (
    KUNDENID INTEGER,
    NAME     VARCHAR(10)
);

CREATE TABLE RECHNUNG (
    ID       INTEGER,
    KUNDENID INTEGER,
    NR       VARCHAR(10),
    BETRAG   INTEGER
);

CREATE TABLE TABELLE3 (
    IDTAB3  INTEGER
);

Und folgende Stored Prodecure als Beispiel:


Code:
SET TERM ^ ;

CREATE OR ALTER PROCEDURE TEST_PROCEDURE (
    I_RECH INTEGER,
    I_TAB3 INTEGER)
RETURNS (
    O_KUNDENID INTEGER,
    O_NAME VARCHAR(10),
    O_ID INTEGER,
    O_NR VARCHAR(10),
    O_BETRAG INTEGER,
    O_PAR1 INTEGER,
    O_IDTAB3 INTEGER,
    O_PAR2 INTEGER)
AS
begin
for
 select KUNDENID,NAME from KUNDEN
 into :O_KUNDENID,:O_NAME
do
begin

    if (I_RECH=1) then
    for
     select ID, NR,BETRAG from RECHNUNG
     WHERE KUNDENID=:O_KUNDENID
     into :O_ID,:O_NR,:O_BETRAG
    do
    begin
     O_PAR1=100;
    end

    if (I_TAB3=1) then
    for
     select IDTAB3 FROM Tabelle3
     into :O_IDTAB3
    DO
    begin
     O_PAR2=200;
    end
end

end^

SET TERM ; ^

Du kannst nun mittels der Eingangsparameter 'I_RECH' und 'I_TAB3' die Datenmengen quasi dazuschalten.

I_RECH=1 : Rechnungdaten da AUFRUF:SELECT * FROM TEST_PROCEDURE(1, 0)
I_TAB3=1 : Daten aus Tabelle 3 da AUFRUF:SELECT * FROM TEST_PROCEDURE(0, 1)

Innerhalb der Stored Procedure kann so die Logik einfach verändert werden. Als Ausgabe gibt es immer eine entsprechende Tabelle.
Ich hoffe, dass cih es einigermassen erklären konnte...

RonniS 3. Nov 2015 16:29

AW: TQuery (TIBCQuery) - mehrere Master-Detailverbindungen komplett durchlaufen
 
Vielen Dank lowmax und allen die hier gepostet haben, für Eure ausführlichen und detaillierten Informationen.

Ich habe von Euch viel Input und Anregungen erhalten und denke, dass ich so ziemlich von jedem von Euch was mit in die Entwicklung einfließen lassen kann.
Meine Idee ist nun, eine eigene Klasse, die dieses Konstrukt abbildet und möglicherweise eine Stored Procedure dynamisch generiert, je nach Tabellen und Abhängigkeiten.

In dieser Klasse kann ich sowohl Client- als auch Mastersources verwalten.

Vielen Dank nochmal.. :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:02 Uhr.
Seite 2 von 2     12   

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