OVH Cloud OVH Cloud

[FB4WD] valider une transaction ???

2 réponses
Avatar
Jerome PAULIN
Bonjour,

Je ne trouve pas comment valider une trasaction (après un INSERT INTO
...) avec l'accès natif FB4WD...

Si j'execute le code SQL de ma requete en direct sur la base, ca passe,
mais pas depuis WD (pas de message d'erreur non plus).

Mon code est le suivant :

PROCEDURE Creation_Etiquette(n_id__typ_eti est un entier)
bRetCode est un booléen
id__eti est un entier
txtSQL est une chaîne

// on recupere un numero d'etiquette via le genereateur
bRetCode=gclSTOCK_DBConnexion:mySQLExec("SELECT GEN_ID(
T_ETIQUETTE_ID__ETI_GEN , 1 ) FROM RDB$DATABASE",0)
SI bRetCode ALORS
TANTQUE(gclSTOCK_DBConnexion:mySQLFetch(0))
id__eti=gclSTOCK_DBConnexion:mySQLLitCol(0,1)
Trace(id__eti)
FIN
SINON
Info("STOCK Erreur sur la requete :
"+gclSTOCK_DBConnexion:mySQLGetErrorMessage())
FIN
gclSTOCK_DBConnexion:mySQLFerme(0)

// on genere l'etiquette proprement dite
txtSQL="insert into T_ETIQUETTE(id__eti,id__typ_eti,date_creation__eti)
values(%1,%2,'now')"
txtSQL=ChaîneConstruit(txtSQL,id__eti,n_id__typ_eti)
Trace(txtSQL)
bRetCode=gclSTOCK_DBConnexion:mySQLExec(txtSQL,0)
SI PAS bRetCode ALORS
Info("erreur sur la requete :
"+gclSTOCK_DBConnexion:mySQLGetErrorMessage())
FIN
gclSTOCK_DBConnexion:mySQLFerme(0)


le trace me donne le résultat suivant :

52
insert into T_ETIQUETTE(id__eti,id__typ_eti,date_creation__eti)
values(52,4,'now')




Merci d'avance pour votre aide ...

gg

2 réponses

Avatar
Firetox
Bonjour,

il faut englober votre requete par une transaction du moins sur FB il faut
valider la transaction a la fin
dans votre code :

// on genere l'etiquette proprement dite
txtSQL="insert into T_ETIQUETTE(id__eti,id__typ_eti,date_creation__eti)
values(%1,%2,'now')"
txtSQL=ChaîneConstruit(txtSQL,id__eti,n_id__typ_eti)
Trace(txtSQL)
gclSTOCK_DBConnexion:mySQLTransaction(gclSTOCK_DBConnexion:mySQLDebut,1)
bRetCode=gclSTOCK_DBConnexion:mySQLExec(txtSQL,0)
SI PAS bRetCode ALORS
Info("erreur sur la requete :
"+gclSTOCK_DBConnexion:mySQLGetErrorMessage())
// annule la transaction
gclSTOCK_DBConnexion:mySQLTransaction(gclSTOCK_DBConnexion:mySQLAnnule,1)
sinon
// valide la transaction
gclSTOCK_DBConnexion:mySQLTransaction(gclSTOCK_DBConnexion:mySQLFin,1)
FIN
gclSTOCK_DBConnexion:mySQLFerme(0)


cela permet si on aviat plusieur insert de valider l'ensemble ou non

Bon dev
@+


"Jerome PAULIN" a écrit dans le message
de news: ehpitl$ofm$
Bonjour,

Je ne trouve pas comment valider une trasaction (après un INSERT INTO ...)
avec l'accès natif FB4WD...

Si j'execute le code SQL de ma requete en direct sur la base, ca passe,
mais pas depuis WD (pas de message d'erreur non plus).

Mon code est le suivant :

PROCEDURE Creation_Etiquette(n_id__typ_eti est un entier)
bRetCode est un booléen
id__eti est un entier
txtSQL est une chaîne

// on recupere un numero d'etiquette via le genereateur
bRetCode=gclSTOCK_DBConnexion:mySQLExec("SELECT GEN_ID(
T_ETIQUETTE_ID__ETI_GEN , 1 ) FROM RDB$DATABASE",0)
SI bRetCode ALORS
TANTQUE(gclSTOCK_DBConnexion:mySQLFetch(0))
id__eti=gclSTOCK_DBConnexion:mySQLLitCol(0,1)
Trace(id__eti)
FIN
SINON
Info("STOCK Erreur sur la requete :
"+gclSTOCK_DBConnexion:mySQLGetErrorMessage())
FIN
gclSTOCK_DBConnexion:mySQLFerme(0)

// on genere l'etiquette proprement dite
txtSQL="insert into T_ETIQUETTE(id__eti,id__typ_eti,date_creation__eti)
values(%1,%2,'now')"
txtSQL=ChaîneConstruit(txtSQL,id__eti,n_id__typ_eti)
Trace(txtSQL)
bRetCode=gclSTOCK_DBConnexion:mySQLExec(txtSQL,0)
SI PAS bRetCode ALORS
Info("erreur sur la requete :
"+gclSTOCK_DBConnexion:mySQLGetErrorMessage())
FIN
gclSTOCK_DBConnexion:mySQLFerme(0)


le trace me donne le résultat suivant :

52
insert into T_ETIQUETTE(id__eti,id__typ_eti,date_creation__eti)
values(52,4,'now')




Merci d'avance pour votre aide ...

gg


Avatar
Jerome PAULIN
Firetox a écrit :
Bonjour,

il faut englober votre requete par une transaction du moins sur FB il faut
valider la transaction a la fin
dans votre code :



Un grand merci pour cette aide ultra rapide (j'étais sur que le problème
était simple à résoudre, mais je n'avais pas trouvé comment utiliser
correctement mysqltransaction())

Du coup, je vais développer (presque) "x fois plus vite" qu'avec mon
Delphi, le gain de temps s'effectue principalement au niveau des
interfaces ...

Cordialement,

gg