Liaison de deux sgbd

Signaler
Messages postés
1
Date d'inscription
mardi 3 septembre 2013
Statut
Membre
Dernière intervention
3 septembre 2013
-
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
-
Bonjour a tous, ofait j'ai deux base (firebird) que j'aimerai lier mais j'arrive pas a le faire!! Si vous pourriez m'aider??? Merci

6 réponses

Messages postés
189
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
1
Bonjour,

Tu veux lier deux bases ou deux tables ?

Jderf
--
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
lier deux tables situées dans 2 sgbd différents.
c'est faisable avec mise en place de deux connexions.

juste pour faire une requête mais c'est tout..
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
9
Salut,
Il n'y a pas de prob à lier des tables venant de plusieurs db quand tu passes par des ttable, tquery et que tu utilises les champs datasource, mastersource, ... pour lier, mais tu ne pourras pas faire de requêtes SQL liant les deux DB avec des instructions du genre WHERE ou INNER/OUTER JOIN
Bonne boulot.

solilog
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
12
Salut solilog,
ça m'intéresse, tu pourrais expliquer un peu plus en détail ? (je ne me suis jamais servi de ce que tu dis...)
Messages postés
189
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
1
Bonjour,

Si il veut faire une jointure, il faudra qu'il fasse par prog (entre deux requetes) ce que le sgbd fait d'une manière interne entre des tables avec JOIN. C'est d'ailleurs pas très compliqué.

Jderf
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
12
non, je n'ai pas l'impression que ce soit une jointure que Solilog nous expliquait...
Messages postés
189
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
1
Ah !?
Datasource et mastersource permette de faire la jointure au niveau des compo delphi, et INNER/OUTER JOIN (ou LEFT/RIGNT JOIN) au niveau du language SQL.
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
12
Bé en fait, j'avais l'impression que Solilog nous disait qu'on pouvait récupérer des données de plusieurs bases différentes en utilisant ces propriétés... mais je n'ai pas approfondi plus que ça, je voulais qu'il confirme ça...
Messages postés
302
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
17 septembre 2013
1
bonjour,

veux-tu faire une requête du genre :

SELECT a.colonne, b.colonne FROM db1.table a, db2.table b WHERE a.id = b.id ?

j'ai déjà cherché un peu partout et rien trouvé

Sur le site officiel (http://www.firebirdfaq.org/faq16/) :

Can I do multi-database or cross-database queries with Firebird?

Short answer: You cannot. Firebird 2.5 introduces some basic support though...

The only way is to pump the data from one to another using tools like IBDataPump, FBCopy, FBExport, or some of administration tools that have this option. See FAQ #20 for details.

You can, however, do the multi-database transactions: have a one transaction that reads and changes data in multiple database. Firebird's ACID compliant and ensures that this is possible.

Firebird 2.5 introduces a way to query the external data sources in PSQL. EXECUTE STATEMENT has been extended with a special clause: ON EXTERNAL DATA SOURCE, and you can supply a different Firebird database as a data source. This means that you can fetch data from another database into PSQL variables. You cannot do JOINs with tables in different databases, but this is a nice start. Example:

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

As you can see, using aliases becomes important and there is still a lot to be desired, but it's enough to cover some of the most basic needs.
Messages postés
189
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
1
Il faudrait en savoir un peu plus sur ce qu'il veut faire,mais cette méthode fonctione :

query1 <-- datasource1
query2 <-- datasource2
query2.datasource = datasource1

query1.open
---ici positionnement de query1 sur l'enregistrement souhaité
query2.prepare
query2.open

ceci répond par exemple à :

je souhaite avoir tous les noms des presonnes dans la bd2 qui ont pour prenom, le prenom actuellement choisi dans parmis les prenom1 de la bd1

select nom2, prenom2 from table_bd2
where prenom2 = :prenom1

A+
Jderf
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
12
Ah oui, d'accord, c'est pas mal ça ! :-)
ça marche aussi avec les dbExpress ?
Pourquoi l'initialisation sur "query2 <-- datasource2 " alors que tu lui affectes ensuite "query2.datasource = datasource1" ?
Messages postés
189
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
1
Cela remplace cette écriture :

Query1.open
---ici positionnement de query1 sur l'enregistrement souhaité 

Query2.ParamByName('prenom1').AsString := Query1.FieldByName('prenom1').AsString 
Query2.open 



Pour Dbexpress, y' a pas de raison que cela ne fonctionne pas puisqu'il TSQLQuery a aussi la propriété datasource.
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
9
Salut tous,
jderf a démontré que l'on peut lier 2 db avec query1.datasource = datasource2. C'est ce que disant cantador en parlant de 2 connections. Donc ton prob est résolu ?
Ce qui n'est pas possible avec Delphi c'est un SQL du genre:
SELECT db1.t1.nom, db2.t2.xxx
FROM db1.t1? db2.t2
WHERE ...
qui metionnerait les 2 db dans le même SQL.

solilog