Bonjour à tous,
J'ai une erreur sql 818 et je n'arrive pas à comprendre pourquoi.
Voilà la séquence des commandes que j'exécute :
("cl" est le compilateur de Microsoft Visual Studio)
db2 connect to sample
db2 prep gdk_PERSON.sqc bindfile
db2 bind gdk_PERSON.bnd
cl -Zi -LD /DDKTARGET_NT -I. -I../runtime -I/include -c gdk_PERSON.c
db2 prep gdk_PERSONZ.sqc bindfile
db2 bind gdk_PERSONZ.bnd
cl -Zi -LD /DDKTARGET_NT -I. -I../runtime -I/include -c gdk_PERSONZ.c
db2 prep gdk_POLY.sqc bindfile
db2 bind gdk_POLY.bnd
cl -Zi -LD /DDKTARGET_NT -I. -I../runtime -I/include -c gdk_POLY.c
db2 prep gdk_PZZY.sqc bindfile
db2 bind gdk_PZZY.bnd
cl -Zi -LD /DDKTARGET_NT -I. -I../runtime -I/include -c gdk_PZZY.c
db2 prep gdk_tables.sqc bindfile
db2 bind gdk_tables.bnd
cl -Zi -LD /DDKTARGET_NT -I. -I../runtime -I/include -c gdk_tables.c
lib /OUT:gdk.lib gdk_PERSON.obj gdk_PERSONZ.obj gdk_POLY.obj gdk_PZZY.obj gdk_tables.obj
cl -Zi -LD /DDKTARGET_NT /MD /Fedbntry.dll ../runtime/dk_dllentry.obj gen/runtime/gdk.lib ../lib/datakom.lib "C:\Program Files\IBM\SQLLIB\lib\db2api.lib"(cela crée une dll appelé dbntry.dll)
Ensuite, j'ai un programme COBOL (compilé avec les produits microfocus) qui utilise cette dll pour faire les accès à la base de données. Cette DB contient 4 tables : PERSON, PERSONZ, POLY and PZZY).
Si dans mon programme COBOL j'exécute une commande sur la table PERSON, je reçois une sqlerror 818 mais si j'exécute la même commande sur la table PERSONZ, cela fonctionne parfaitement.
I'ai trouvé que cette erreur apparaissait lorsque les timestamps généré par le précompilateur et le "binder" n'était pas les même, j'ai donc essayé de re-precompilé/re-bindé/re-compilé/re-linké mais seulement les références à PERSON :
db2 prep gdk_PERSON.sqc bindfile
db2 bind gdk_PERSON.bnd
cl -Zi -LD /DDKTARGET_NT -I. -I../runtime -I/include -c gdk_PERSON.c
lib /OUT:gdk.lib gdk_PERSON.obj gdk_PERSONZ.obj gdk_POLY.obj gdk_PZZY.obj gdk_tables.obj
cl -Zi -LD /DDKTARGET_NT /MD /Fedbntry.dll ../runtime/dk_dllentry.obj gen/runtime/gdk.lib ../lib/datakom.lib "C:\Program Files\IBM\SQLLIB\lib\db2api.lib"
Le résultat a été que la même requête dans le programme COBOL fonctionne maintenant parfaitement sur PERSON mais plus sur PERSONZ.
Je ne comprends vraiment pas le problème... Est-ce que quelqu'un remarque une bizarrerie dans ma séquence de commande ? Quelqu'un aurait une idée pour résoudre ce problème ?
Toute idée ou aide est la bienvenue !
Merci d'avance,
Yan
Partager