Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   2 Query 's verbinden (https://www.delphipraxis.net/183491-2-query-s-verbinden.html)

Jick 14. Jan 2015 10:49

Datenbank: Firebird • Version: 2,5 • Zugriff über: Zeoslib

2 Query 's verbinden
 
Hallo,

gibt es eine Möglichkeit 2 Query's von 2 Datenbanken in einem DBGrid darzustellen ?
Ich habe zwar gelesen das eine Abfrage über 2 Datenbanken mit Firebird 2,5 gehen soll aber kein Beispiel gefunden,
deshalb suche ich jetzt eine Möglichkeit 2 getrennte Abfragen zu verknüpfen.

Grüße
Michael

Perlsau 14. Jan 2015 11:20

AW: 2 Query 's verbinden
 
Klar, du kannst doch einfach ein Nachschlagefeld in einem Query erstellen und dann aus einer DataSource nachschlagen, die zur anderen Datenbank gehört.

p80286 14. Jan 2015 11:26

AW: 2 Query 's verbinden
 
Zitat:

Zitat von Perlsau (Beitrag 1286499)
Klar, du kannst doch einfach ein Nachschlagefeld in einem Query erstellen und dann aus einer DataSource nachschlagen, die zur anderen Datenbank gehört.

was ist ein "Nachschlagefeld"?

Gruß
K-H

Bernhard Geyer 14. Jan 2015 11:28

AW: 2 Query 's verbinden
 
Zitat:

Zitat von Perlsau (Beitrag 1286499)
Klar, du kannst doch einfach ein Nachschlagefeld in einem Query erstellen und dann aus einer DataSource nachschlagen, die zur anderen Datenbank gehört.

Firebird sagt da aber was anders: http://stackoverflow.com/questions/2...more-databases
So richtigen Support haben sie dafür (noch) nicht.

himitsu 14. Jan 2015 12:04

AW: 2 Query 's verbinden
 
Zitat:

Zitat von p80286 (Beitrag 1286501)
was ist ein "Nachschlagefeld"?

Lookup-Field (auch wenn ich das noch nicht als TField, sondern nur als GUI-Komponente kenn, so ala TDBLookupComboBox, oder als Column eines DBGrids)
Man könnte auch ein Calc-Field verwenden und manuell den Wert von sonstwo rüberziehen.


Ansonsten bieten einige DBMS auch die Möglichkeit in einem Select oder DBFunction auf externe Datenbanken zuzugreifen. (manchmal sogar auf Welche eines komplett anderen DBMS)
Wie das jetzt in Firebird geht ... k.A., aber siehe Bernhard.

Perlsau 14. Jan 2015 12:04

AW: 2 Query 's verbinden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das hat doch mit Firebird gar nichts zu tun, sondern mit deinen DB-Komponenten. Hab's doch eben extra nochmal getestet: Je eine Firedac-Connection mit Datenbank A und Datenbank B. Dann eine Query nebst Datasource und für jede DB eine Transaktionskomponente. Im Query, das mit DB-A verbunden ist legst du ein Nachschlagefeld an (siehe Bild unten; @p80286: heißt halt so ... Feldtyp: Nachschlagen). Dort gibts du als Nachschlage-Tabelle das Datasource des Queries an, das mit DB-B verbunden ist. Keinerlei Probleme.

Zitat:

Zitat von himitsu (Beitrag 1286504)
Man könnte auch ein Calc-Field verwenden und manuell den Wert von sonstwo rüberziehen.

Warum umständlich, wenn's auch einfacher geht? Berechnete Felder verwende ich nur, wenn sich der darzustellende Inhalt wirklich nur durch "Berechnung" ermitteln läßt.

Neumann 14. Jan 2015 12:22

AW: 2 Query 's verbinden
 
Der Zugriff auf mehrere Datenbanken geht mit Firebird, am Besten über eine Storedprocedure oder über ein Block Statement. Ist nicht ganz einfach, es gibt aber Beispiele dazu. Einfach mal nach "execute statement" und Firebird suchen.

DeddyH 14. Jan 2015 12:26

AW: 2 Query 's verbinden
 
Wenn man den von Bernhard angesprochenen Beitrag zu Ende liest, ist das dort sogar verlinkt ;)

himitsu 14. Jan 2015 12:29

AW: 2 Query 's verbinden
 
Zitat:

Das hat doch mit Firebird gar nichts zu tun, sondern mit deinen DB-Komponenten. .......
Und genau das ist ein Lookup-Field. :angel:

p80286 14. Jan 2015 12:46

AW: 2 Query 's verbinden
 
Interessant,
aber ich habe die ursprüngliche Fragestellung so verstanden, daß zwei Datenmengen, der gleichen bzw. ähnlichen Struktur (z.B. Adresssätze) in einem Grid dargestellt werden sollen.
Also ungefähr so:

db1 - Müller, Ferdinand
db2 - Müller, Friedrich
db1 - Müller, Friedrich
db1 - Müller, Gustav
db2 - Müntefehring, Annette
db1 - Müntefehrin, Annete

Gruß
K-H

DeddyH 14. Jan 2015 12:52

AW: 2 Query 's verbinden
 
Du meinst eine UNION oder Ähnliches? Ja, könnte auch sein, wenn ich mir die Frage noch einmal genau durchlese.

himitsu 14. Jan 2015 13:50

AW: 2 Query 's verbinden
 
Selbst wenn das nur über eine storedproc geht, könnte man immernoch entweder in der Prozedur beides laden und ausgeben,

oder die SP läd nur das der anderen DB und
  • bei gleichen Feldern untereinander, wird es per UNION an die lokale Tabelle gehängt
  • bei unterschiedlichen Feldern nebeneinander, wird es per JOIN drangehängt

Perlsau 14. Jan 2015 13:57

AW: 2 Query 's verbinden
 
Wäre es in diesem Fall dann nicht am einfachsten, ein TClientDataset zu verwenden? Mach ich z.B., wenn ich ganze Tabellen verschlüsselt abspeichern muß, die werden dann entschlüsselt im ClientDataset dargestellt, und dem ist es letztlich egal, woher seine Daten kommen.

Wenn man struktur-identische Records aus zwei verschiedenen Datenbanken verarbeiten muß, kann es jedoch generell zu diversen Problemen kommen, z.B. mit doppelt vorhandenen Datensätzen. Wäre es dann nicht sinnvoller, eine der beiden Datenbanken zu aktualisieren und dann nur mit dieser zu arbeiten?

p80286 14. Jan 2015 21:03

AW: 2 Query 's verbinden
 
Zitat:

Zitat von DeddyH (Beitrag 1286514)
Du meinst eine UNION oder Ähnliches? Ja, könnte auch sein, wenn ich mir die Frage noch einmal genau durchlese.

Ja aber nur ähnlich!
Aber zunächst ist das nur Spökenkiekerei, Jick müßte da etwas konkreter werden.

Gruß
K-H

Jick 14. Jan 2015 21:56

AW: 2 Query 's verbinden
 
Hallo,

ich habe 2 Datenbanken und muss aus der 1. Datenbank Teile holen und in der 2. Datenbank
prüfen ob Informationen über das Teil stehen welche ich über die TeileID finde.
Einzeln abfragen ist ja nicht das Problem, aber ich weiß nicht wie ich die 2 Querys verknüpfe um das in einem DBGrid
anzuzeigen .

Grüße
Michael

Sir Rufo 14. Jan 2015 22:41

AW: 2 Query 's verbinden
 
Eigentlich wurde hier schon alles genannt (wenigstens von Perlsau :)) was dazu benötigt wird:

1 ClientDataSet, was alle Daten aufnehmen kann
2 Abfragen verbunden als Master-Detail

Jetzt durch die Master-Datenquelle gehen und die Daten aus beiden Datenquellen in das ClientDataSet einfügen. Das ClientDataSet dann im Grid anzeigen lassen.

EgonHugeist 14. Jan 2015 22:55

AW: 2 Query 's verbinden
 
Ein TClientDataSet/TBufDataSet(FPC) ist mit Zeos überhaupt nicht notwendig.
Zeos beinhalted seit Jahren eigene Mechanismen um die Daten aufnehmen zu können..

Perlsau 15. Jan 2015 04:20

AW: 2 Query 's verbinden
 
Zitat:

Zitat von Jick (Beitrag 1286543)
Hallo, ich habe 2 Datenbanken und muss aus der 1. Datenbank Teile holen und in der 2. Datenbank prüfen ob Informationen über das Teil stehen welche ich über die TeileID finde. Einzeln abfragen ist ja nicht das Problem, aber ich weiß nicht wie ich die 2 Querys verknüpfe um das in einem DBGrid anzuzeigen.

Also handelt es sich doch um eine Master-Detail-Abfrage: Master ist die Tabelle in der 1. Datenbank, die die Teilebezeichnungen und den zugehörigen Primary-Key enthält, Detail ist die Tabelle in der 2. Datenbank, welche weitere Informationen über die Teile in der Mastertabelle enthält. Um den Inhalt dieser beiden Tabellen in einem DB-Grid anzeigen zu lassen, benötigst du in der Tat kein ClientDataset, wie EgonHugeist oben bereits betont hatte, sondern arbeitest mit zusätzlich in deiner Query oder deinem Dataset angelegten Nachschlage-Feldern.*

Die Vorgehensweise ist bei allen mir bekannten DB-Komponenten nahezu identisch: Du klickst mit der rechten Maustaste auf deine Query-Komponente, wählst den Eintrag "Feld-Editor" (so lautet er bei Zeos), klickst wiederum mit der rechten Maustaste in diesen Feldeditor, wählst "Alle Felder hinzufügen" und, nachdem alle Felder als sog. persistente Felder angelegt wurden, wieder rechte Maustaste im Feldeditor und "Neues Feld" auswählen. Alles weitere habe ich bereits oben beschrieben. Das funktionierte bei mir bislang mit jeder Datenbank.

* Auch als Lookup-Felder bekannt, wobei ich als Deutscher die deutsche Bezeichnung bevorzuge, denn lookup heißt nichts anderes als nachschauen, nachschlagen. Es ist schon etwas gewöhnungsbedürftig, wenn man beobachtet, daß ein Programmierer den Begriff "nachschlagen" nicht kennt bzw. nicht einmal zu interpretieren weiß, bei "lookup" aber sofort bemerkt, worum's geht. Dasselbe begegnet mir häufig, wenn ich sowas lese wie "habe das upgeloaded/downgeloaded", statt "hochgeladen"/"heruntergeladen" oder "refreshed" statt "aktualisiert". Aber das ist eine andere Geschichte ...

Jick 15. Jan 2015 07:42

AW: 2 Query 's verbinden
 
vielen Dank, das hilft mir weiter.

Grüße
Michael


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:35 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