Quelques fois, il est utile de comparer deux bases et de trouver les enregistrements d'une table présents dans une base et absents d'une autre base.

Il se trouve que Firebird dispose d'un outil qui permet facilement de faire des connexions sur deux bases à la fois et des reqêtes sur ces deux bases enmême temps.

L'avantage de QLI (c'est le nom de cet outil) c'est qu'il est livré en standard avec Firebird, quelque soit la plateforme.

Voici le problème :

j'ai une base base_A avec une table T_1, et une autre base base_B avec la même table T_1 et j'ai besoin de savoir quels sont les enregistrements présents dans la table T_1 de base_A et absents de la table T_1 de base_B.

Ma table T_1 a comme clé primaire les trois champs (A,B,C)

J'écris donc ce petit script QLI (nommé test.txt):

ready 127.0.0.1:c:\db\base_A.fdb as src user 'sysdba' password'masterkey'
ready 127.0.0.1:c:\db\base_B.fdb as tgt user 'sysdba' password'masterkey'
for s in src.T_1  begin
 if not any c in tgt.T_1 with
  (s.A=c.A and s.B=c.B and s.C=c.C)
 print s.A, s.B, s.C
end

Il n'y a plus qu'à lancer le script avec qli :

C:\FB2\bin>qli
Welcome to QLI Query Language Interpreter
QLI> @test.txt