Précédent   Forum des professionnels en informatique > Bases de données > Firebird > Administration
Administration Forum d'entraide sur les outils d'administration natifs pour Firebird: gbak, gfix, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/02/2008, 11h26   #1
Membre du Club
 
Inscription : février 2008
Messages : 246
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 246
Points : 42
Points : 42
Par défaut Utilisation de qli

bjr je ss entrain d'utiliser qli pour comparer les données de 2 bases.
Le script que j'ai ecrit est :

Code :
1
2
3
4
5
6
7
FOR s IN src.CDF_CODIF 
 begin
   IF NOT any c IN tgt.CDF_CODIF WITH 
      s.CDF_NUMERO_PK=c.CDF_NUMERO_PK AND (*)
      s.CDF_CODE_PK=c.CDF_CODE_PK
    	print s.CDF_NUMERO_PK,s.CDF_CODE_PK
 end
Mais lorsque je l'exécute, j'ai tjs cette erreur après (*) :
//** QLI error: expected identifier, encountered "." **.//
Merci de bien vouloir me répondre au plutot car cet outils m'aide bcp dans mon travail.
PS : J'utilise FireBird 1.5 et des bases de Dialect 1
mercure07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2008, 21h05   #2
Expert Confirmé
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Peut-être avec des parenthèses comme le suggère l'exemple du Blog
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2008, 08h53   #3
Membre du Club
 
Inscription : février 2008
Messages : 246
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 246
Points : 42
Points : 42
Par défaut Utilisation qli

Merci pour réponse mais j'ai essayé avec et sans les parenthèses et c'est la même erreur.
Il y a truc que j'ai essayé c'est que j'ai créer 2 bases Firebird identiques avec les même libelllés des champs et ca marche.
Franchement je n'arrive pas à comprendre ce qui arrive.
mercure07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2008, 08h58   #4
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
Citation:
Envoyé par mercure07 Voir le message
Mais lorsque je l'exécute, j'ai tjs cette erreur après (*) :
//** QLI error: expected identifier, encountered "." **.//
le message est clair non ?
c'est quoi ce ?????
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2008, 08h41   #5
Membre du Club
 
Inscription : février 2008
Messages : 246
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 246
Points : 42
Points : 42
Par défaut script qli

(*) c'est juste pour vous indiquez la ligne après la quelle se décelenche l'erreur.
Mais le script que j'exécute est identique à celui que vous avez mis dans le blog, j'ai juste changez les noms des bases,tables et champs.
mercure07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2008, 14h02   #6
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
quand on donne du code pour se faire aider, on donne le vrai code et son intégralité, pas juste un morceau et pas des trucs avec des étoiles en plus
donc si je vois, le code réel, la structure des tables alors peut être je pourrais comprendre qq chose et peut être aider.
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2008, 15h11   #7
Membre du Club
 
Inscription : février 2008
Messages : 246
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 246
Points : 42
Points : 42
dslé, vous avez raison.
La structure de la table est la suivante :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE TABLE CATC_CLASSEATC (
    CATC_CODE_PK       VARCHAR(10) NOT NULL,
    CATC_CATC_CODE_FK  VARCHAR(10),
    CATC_NOMF          VARCHAR(77) NOT NULL,
    CATC_NOMA          VARCHAR(77) NOT NULL,
    CATC_DATECR        DATE NOT NULL,
    CATC_DATEMJ        DATE,
    CATC_TEXTE         VARCHAR(255)
);
ALTER TABLE CATC_CLASSEATC 
ADD CONSTRAINT PK_CATC_CLASSEATC PRIMARY KEY (CATC_CODE_PK);
 
ALTER TABLE CATC_CLASSEATC 
ADD CONSTRAINT FK1_CATC_CLASSEATC FOREIGN KEY (CATC_CATC_CODE_FK) 
   REFERENCES CATC_CLASSEATC (CATC_CODE_PK);
Le script que j'ai exécuté est :

Code :
1
2
3
4
5
6
7
8
9
ready localhost:c:\db\THERIA_15012007.FDB AS src user 'sysdba' password 'masterkey' 
ready localhost:c:\db\THERIA_01012008.FDB AS tgt user 'sysdba' password 'masterkey' 
 
FOR s IN src.catc_classeatc 
 begin
   IF NOT any c IN tgt.catc_classeatc WITH 
   (s.catc_code_pk=c.catc_code_pk )  
    	print s.catc_code_pk
 end
L'erreur est :
Citation:
** QLI error: expected right parenthesis, encountered "." **
Merci de votre aide et conseil précieux.
mercure07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2008, 17h56   #8
Membre du Club
 
Inscription : février 2008
Messages : 246
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 246
Points : 42
Points : 42
Par défaut exploitation qli

Bon j'ai effectué plusieurs tests consistant à exporter la table concernée, l'insérer dans une base vièrge et lui enlever toutes les contraintes sauf celle de la clé primaires et ça marche.
Je veux juste savoir est ce je dois enlever toutes les relations pour pouvoir exploiter qli.
mercure07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2008, 18h03   #9
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
non
il n'y a aucune raison à cela
c'est peut être une des bases qui a un problème plutot
mais il n'y a aucune limite de ce genre dans l'utilisation de qli
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2008, 18h09   #10
Membre du Club
 
Inscription : février 2008
Messages : 246
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 246
Points : 42
Points : 42
ok, sinon quel serai la source du problème d'apèrs vous. Car qli pourrait être très utile pour que je puisse comparer les données de 2 bases dans un délai réduit.
Merci de votre collaboration.
mercure07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2008, 19h06   #11
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
aucune idée comme ça
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 10h02   #12
Membre du Club
 
Inscription : février 2008
Messages : 246
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 246
Points : 42
Points : 42
bjr, je veux juste savoir est que avec qli je pourrais avoir outre les enregistrements ajoutés et supprimés, les enregistrements modifiés.
J'ai essayé avec ce script sur la base d'exemple de firebird employee
ready localhost:c:\Firebird_1_5\examples\EMPLOYEE.FDB as src user 'sysdba' password 'masterkey'
ready localhost:c:\Firebird_1_5\examples\EMPLOYEE1.FDB as tgt user 'sysdba' password 'masterkey'

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
FOR s IN src.JOB
 begin
   IF any c IN tgt.JOB WITH 
   ( s.JOB_CODE=c.JOB_CODE AND s.JOB_GRADE=c.JOB_GRADE AND   s.JOB_COUNTRY=c.JOB_COUNTRY )
   begin
 
	IF s.JOB_TITLE<>c.JOB_TITLE
		print s.JOB_TITLE
	IF s.MIN_SALARY<>c.MIN_SALARY
		print s.MIN_SALARY
	IF s.MAX_SALARY<>c.MAX_SALARY
		print s.MAX_SALARY  
	IF s.JOB_REQUIREMENT<>c.JOB_REQUIREMENT
		print s.JOB_REQUIREMENT
	IF s.LANGUAGE_REQ<>c.LANGUAGE_REQ
		print s.LANGUAGE_REQ
   end
 end
mais tjs j'ai l'erreur :
** QLI error: "C.JOB_TITLE" is undefined or used out of context **.
Merci de votre collaboration.
mercure07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 10h53   #13
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
Code :
1
2
3
4
5
6
7
FOR s IN src.JOB 
 begin 
  FOR c IN tgt.JOB WITH 
  (s.JOB_CODE=c.JOB_CODE AND s.JOB_GRADE=c.JOB_GRADE AND s.JOB_COUNTRY=c.JOB_COUNTRY)
  IF s.JOB_TITLE<>c.JOB_TITLE
  print s.JOB_TITLE 
  end
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 11h06   #14
Membre du Club
 
Inscription : février 2008
Messages : 246
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 246
Points : 42
Points : 42
merci de votre réponse, c'est vrai que ca marche avec le code que m'avez donné, mais il concerne juste un seul champ. Mais pour savoir si un enregistrement a été modifié je dois comparer tous les champs.
Si j'applique le script :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
ready localhost:c:\Firebird_1_5\examples\EMPLOYEE.FDB AS src user 'sysdba' password 'masterkey' 
ready localhost:c:\Firebird_1_5\examples\EMPLOYEE1.FDB AS tgt user 'sysdba' password 'masterkey' 
 
FOR s IN src.JOB
 begin
   IF any c IN tgt.JOB WITH 
   ( s.JOB_CODE=c.JOB_CODE AND s.JOB_GRADE=c.JOB_GRADE AND s.JOB_COUNTRY=c.JOB_COUNTRY )
   begin
 
	IF s.JOB_TITLE<>c.JOB_TITLE
		print s.JOB_TITLE
	IF s.MIN_SALARY<>c.MIN_SALARY
		print s.MIN_SALARY
	IF s.MAX_SALARY<>c.MAX_SALARY
		print s.MAX_SALARY  
	IF s.JOB_REQUIREMENT<>c.JOB_REQUIREMENT
		print s.JOB_REQUIREMENT
	IF s.LANGUAGE_REQ<>c.LANGUAGE_REQ
		print s.LANGUAGE_REQ
   end
 end
J'ai : ** QLI error: "C.JOB_TITLE" is undefined or used out of context **
Pouvez vous me donner une solution pour comparer tous champs en même temps.
mercure07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 12h52   #15
Membre du Club
 
Inscription : février 2008
Messages : 246
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 246
Points : 42
Points : 42
je désire afficher les informations résultantes dans un fichier texte. J'ai voulu utiliser l'une des commandes report ou list.
La définition de la commande report est :
report rse [ on ?lespec | to shell-command ]
[ set report_name =value-expression ]
[ set columns = n ]
[ set lines = n ]
[ at top of report [print] value-expression ]
[ at bottom of report [print] value-expression ]
[ at top of page [print] value-expression ]
[ at top of database-?eld print value-expression ]...
[ at bottom of database-?eld print value-expression ]...
end_report [ on ?lespec | to shell-command ]

J'ai ecrit ce script :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
SET character SET ISO8859_1
ready localhost:c:\work\basetests\BASE1.FDB AS src user 'sysdba' password 'masterkey' 
ready localhost:c:\work\basetests\BASE2.FDB AS tgt user 'sysdba' password 'masterkey' 
 
report 
 (FOR s IN tgt.SP_SPECIALITE
  begin
   IF NOT any c IN src.SP_SPECIALITE WITH 
   ( s.SP_CODE_SQ_PK=c.SP_CODE_SQ_PK )
	print s.SP_CODE_SQ_PK
  end 
 )
ON 'c:\rpt_spe.txt'
SET COLUMNS = 75
SET LINES = 55
SET report_name = 'SPECIALITES AJOUTEES'
at top of s.SP_CODE_SQ_PK print CODE
print s.SP_NOM
end_report
mais ca n'a pa marché. Est ce que vous pouvez m'aider sur ce point.
mercure07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2008, 09h37   #16
Membre du Club
 
Inscription : février 2008
Messages : 246
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 246
Points : 42
Points : 42
bon juste pour vous informer que le problème est résolu. Le problème consistait qu'il existe une UDF dans les 2 bases qui s'appelle c.
Juste un point à eclaircir, est que QLI supporte la comparaison des champs BLOB car j'en ai beaucoup dans ma base et lorsque j'exécute le script de comparaison :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
FOR t1 IN src.ATR_AVISCOMMISSIONTRANSPARENCE
begin 
 FOR t2 IN tgt.ATR_AVISCOMMISSIONTRANSPARENCE WITH (t1.ATR_CODE_SQ_PK=t2.ATR_CODE_SQ_PK)
 begin
IF (t1.ATR_TITRE <> t2.ATR_TITRE) print  t2.ATR_CODE_SQ_PK,t1.ATR_TITRE,t2.ATR_TITRE ON 'c:\difTheri.txt'
 
    IF (t1.ATR_DATE_REDACTION <> t2.ATR_DATE_REDACTION) print t2.ATR_CODE_SQ_PK,t1.ATR_DATE_REDACTION,t2.ATR_DATE_REDACTION ON 'c:\difTheri.txt'
 
    IF (t1.ATR_DATECR <> t2.ATR_DATECR) print t2.ATR_CODE_SQ_PK,t1.ATR_DATECR,t2.ATR_DATECR ON 'c:\difTheri.txt'
 
    IF (t1.ATR_DATEMJ <> t2.ATR_DATEMJ) print t2.ATR_CODE_SQ_PK,t1.ATR_DATEMJ,t2.ATR_DATEMJ ON 'c:\difTheri.txt'
 
    IF (t1.ATR_TEXTE <> t2.ATR_TEXTE) print t2.ATR_CODE_SQ_PK,t1.ATR_TEXTE,t2.ATR_TEXTE ON 'c:\difTheri.txt'
 end
end
j'ai ce message :
** QLI error: BLOB conversion is not supported **
Je vous remercie pour votre aide préciseuse.
mercure07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/02/2008, 08h49   #17
Membre du Club
 
Inscription : février 2008
Messages : 246
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 246
Points : 42
Points : 42
Bjr Mackowski, je suis bloqué sur 2 pt :
1)Comment insérer un saut de ligne dans la commande print de qli.
2)Est ce que vraiment qli ne supporte pas la comparaison des champs BLOB.
Merci d'avance.
mercure07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h19.


 
 
 
 
Partenaires

Hébergement Web