AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird on external

Ein Thema von Dumpfbacke · begonnen am 15. Okt 2015 · letzter Beitrag vom 15. Okt 2015
Antwort Antwort
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
329 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Firebird on external

  Alt 15. Okt 2015, 07:24
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBX
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.
Tanja
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Firebird on external

  Alt 15. Okt 2015, 07:43
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 ...
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Firebird on external

  Alt 15. Okt 2015, 07:53
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....
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
329 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Firebird on external

  Alt 15. Okt 2015, 09:16
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....
Ich wolte es gene mit einem Select machen. Die Auswertung der ersten Dantenbak ergibt ca. 460 Datensätze. Somit müsste ich dann 460 Select auf die zweit DB jagen und das wollte ich sparen. Ansonsten muss ich halt auf die Version 3 warten hier sollte zumindest nach eine Aussage von einiger Zeit eine Join zwischen zwei Datenbanken möglich sein. Als alternative könnte ich mir noch eine UDF erstellen. Das muss ich mir noch mal durch den Kopf gehen lassen.
Tanja
  Mit Zitat antworten Zitat
Benutzerbild von FBrust
FBrust

Registriert seit: 4. Okt 2002
Ort: Saarbrücken
654 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Firebird on external

  Alt 15. Okt 2015, 09:29
Hallo,

hier der Link zur Firebird-FAQ:http://www.firebirdfaq.org/faq16/

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
"Ich habe Dinge gesehen, die ihr Menschen niemals glauben würdet. Gigantische Schiffe, die brannten, draußen vor der Schulter des Orion" - Roy Batty
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Firebird on external

  Alt 15. Okt 2015, 09:33
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....
Ich wolte es gene mit einem Select machen. Die Auswertung der ersten Dantenbak ergibt ca. 460 Datensätze. Somit müsste ich dann 460 Select auf die zweit DB jagen und das wollte ich sparen. Ansonsten muss ich halt auf die Version 3 warten hier sollte zumindest nach eine Aussage von einiger Zeit eine Join zwischen zwei Datenbanken möglich sein. Als alternative könnte ich mir noch eine UDF erstellen. Das muss ich mir noch mal durch den Kopf gehen lassen.
warum musst Du 460 Selects auf die zweite DB jagen?

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...
  Mit Zitat antworten Zitat
Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
529 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Firebird on external

  Alt 15. Okt 2015, 10:03
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 ; ^
Ralf
Gruß vom Niederrhein
  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 19:15 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