Liaison de deux sgbd

urbainiai2013 Messages postés 1 Date d'inscription mardi 3 septembre 2013 Statut Membre Dernière intervention 3 septembre 2013 - 3 sept. 2013 à 21:11
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

6 réponses

jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 1
4 sept. 2013 à 15:33
Bonjour,

Tu veux lier deux bases ou deux tables ?

Jderf
--
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
16 sept. 2013 à 17:09
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..
0
solilog Messages postés 273 Date d'inscription samedi 13 juin 2009 Statut Membre Dernière intervention 18 avril 2015 10
17 sept. 2013 à 16:10
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
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
17 sept. 2013 à 16:35
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...)
0
jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 1
18 sept. 2013 à 10:15
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
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
18 sept. 2013 à 11:24
non, je n'ai pas l'impression que ce soit une jointure que Solilog nous expliquait...
0
jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 1
18 sept. 2013 à 12:08
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.
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
18 sept. 2013 à 14:43
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...
0
beckerich Messages postés 302 Date d'inscription jeudi 29 septembre 2005 Statut Membre Dernière intervention 17 septembre 2013 2
17 sept. 2013 à 18:48
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 1
18 sept. 2013 à 14:27
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
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
18 sept. 2013 à 14:45
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" ?
0
jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 1
Modifié par jderf le 18/09/2013 à 15:15
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.
0
solilog Messages postés 273 Date d'inscription samedi 13 juin 2009 Statut Membre Dernière intervention 18 avril 2015 10
19 sept. 2013 à 14:07
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
0
Rejoignez-nous