Liaison de deux sgbd

Messages postés
1
Date d'inscription
mardi 3 septembre 2013
Statut
Membre
Dernière intervention
3 septembre 2013
- - Dernière réponse : solilog
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
- 19 sept. 2013 à 14:07
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
Afficher la suite 

6 réponses

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

Tu veux lier deux bases ou deux tables ?

Jderf
--
Commenter la réponse de jderf
Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9
0
Merci
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..
Commenter la réponse de cs_cantador
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
8
0
Merci
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
sp40
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
11 -
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...)
jderf
Messages postés
192
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
sp40
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
11 -
non, je n'ai pas l'impression que ce soit une jointure que Solilog nous expliquait...
jderf
Messages postés
192
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.
sp40
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
11 -
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...
Commenter la réponse de solilog
Messages postés
308
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
17 septembre 2013
1
0
Merci
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.
Commenter la réponse de beckerich
Messages postés
192
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
1
0
Merci
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
sp40
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
11 -
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" ?
jderf
Messages postés
192
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.
Commenter la réponse de jderf
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
8
0
Merci
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
Commenter la réponse de solilog