![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBX
Firebird on external
Hallo liebe Delphianer,
könntet Ihr mit bitte erneut bei einem Problem helfen. Ich habe hier zwei Datenbanken mit jewals Tabelen. Ich möchte nun ein Ergebnis erhalten was Daten aus den beiden Datenbanken beinhaltet. Leider geht ja ein einfacher Join über zwei Datenbank nicht. Ich habe hier gelesen das es über on external gehen soll. Kann ich in dem Block auch parameter übergeben oder geht das nicht ? Die Daten kann ich nicht einfach in einer Datenbank verarbeiten da die Daten der Datenabk 2 für verschiede andere Datenbanken benötigt werden und einmal in der Woche geändert werden müssen. Dieses möchte ich wenn möglich nur in einer Datenbak machen und nicht in allen. Hier mal ein sehr vereinbfachtes Beispiel: zwei Datenbankt mit jewals Tabelle. Datenbank 1 Tabelle Waren Felder: WarenArt, Beschreibung, usw. Datenbank 2 Tabelle Lager Felder: WarenArt, Gebaeude,Raum,Reihe,Regal. Ich möchte nur eine Abfrage starten wo ich die Warenart übergebe. Als Ergebnis möchte ich dann Erhalten: Warenart,Beschreibung,Gebaeude,Raum,Reihe,Regal. usw. Der Inhalt von Warenart in der Datenbank 2 gibt es jewals nur ein mal in der Tabelle. Hier das Beispiel was ich hierzu gefunden haben, jedoch ohne Parameter zu übergeben. execute block returns (emp_no smallint) as begin FOR EXECUTE STATEMENT 'select emp_no from employee' ON EXTERNAL DATA SOURCE 'localhost:employee' AS USER 'sysdba' PASSWORD 'masterkey' INTO :emp_no DO SUSPEND; end Danke schon mal an Euch für die Antworten. |
AW: Firebird on external
Du hast halt ein EXECUTE STATEMENT. Parameter kannst du hier nicht verwenden, aber das Statement selbst ist ja nur ein String.
Also kannst du sowas machen wie:
Code:
FOR EXECUTE STATEMENT 'SELECT * FROM lager WHERE lager.warenart = ''' || :warenart || '''' ON ...
|
AW: Firebird on external
warum muss das unbedingt über eine Abfrage laufen? Frag doch beide DBs getrennt ab und führe das Ergebnis in deiner Client-Anwendung zu einem Resultset zusammen....
|
AW: Firebird on external
Zitat:
|
AW: Firebird on external
Hallo,
hier der Link zur Firebird-FAQ: ![]() Steht im Grunde auch nur das drin, was im ersten Posting schon als Beispiel genannt wurde, von daher scheint das auch der Weg zu sein (zumindest in Version 2.5). Gruß Frank |
AW: Firebird on external
Zitat:
Erste DB auslesen in Klassenstruktur packen, zweite DB auslesen, dazu packen und gut ist... WEnn Du das nicht willst, dann kannst Du auch mit einer InMemorytabelle arbeiten. Gut, wenn das Live-Daten sein sollen, die du verändern willst, würde ich eher wieder ein ORM bemühen... |
AW: Firebird on external
Es geht auch mit Stored Procedures. Hier mal ein Beispiel, wie aus mehreren Datenbanken Informationen abgerufen und in eine temp. Tabelle geschrieben werden:
Code:
SET TERM ^ ;
CREATE OR ALTER PROCEDURE P_FILIALZAHLART ( s timestamp, p timestamp, db varchar(200)) as declare variable znr integer; declare variable rsumme numeric(15,4); begin for execute statement ('select zahlartnr, sum(Betrag) from kbzahlungen where datum between :s and :p group by zahlartnr') (s:=s,p:=p) on external data source :db as user 'sysdba' password 'masterkey' into :znr,:rsumme do begin insert into kbzahlungenfilial(zahlartnr,betrag) values(:znr,:rsumme); end end^ SET TERM ; ^ |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 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-2025 by Thomas Breitkreuz