OVH Cloud OVH Cloud

[SQL4WD] Blocage d'enregistrement

2 réponses
Avatar
Roumegou
Bonjour,
j'ai un comportement différent entre c_mysql4wd et c_oracle4wd
concernant les blocages.
Voilà comment je procédais en c_mysql4wd
création de ma commande
gCurReq=1
SI PAS fSQL:mySQLExec(Commande,gCurReq) ALORS
fSQL:mySQLMsgBox(Commande)
pWhere=""
Ferme
FIN
SI ModeAppel="MODIFY" ALORS
fSQL:mySQLTransaction(fSQL:mySQLDebut,gCurReq)
fSQL:mySQLBloque(Commande,gCurReq)
FIN

et cela fonctionnait. Avec Oracle_4wd, il me reproche de n'avoir pas
fermé la req 1. En fait dans les deux cas, il rejoue la req avec FOR
UPDATE.
donc je me pose 2 questions :
pourquoi avec c_mysql4wd cela passe et pas en Oracle ?
ne devrais je pas éviter mon premier mySQLEXEC puisque je le fais dans
le blocage ?

--
Eric Roumegou
http://cerbermail.com/?Wk2D8D62KI
(cliquez sur le lien ci-dessus pour me contacter en privé)

2 réponses

Avatar
Manu
Roumegou wrote:
Bonjour,



Bonjour Eric,

j'ai un comportement différent entre c_mysql4wd et c_oracle4wd
concernant les blocages.
Voilà comment je procédais en c_mysql4wd
création de ma commande
gCurReq=1
SI PAS fSQL:mySQLExec(Commande,gCurReq) ALORS
fSQL:mySQLMsgBox(Commande)
pWhere=""
Ferme
FIN



Pourquoi cette partie ? mais je crois avoir compris donc voir plus bas...

SI ModeAppel="MODIFY" ALORS
fSQL:mySQLTransaction(fSQL:mySQLDebut,gCurReq)
fSQL:mySQLBloque(Commande,gCurReq)
FIN



ce que j'aurai fait :

gCurReq=1
SI ModeAppel<>"MODIFY" ALORS
SI PAS fSQL:mySQLExec(Commande,gCurReq) ALORS
fSQL:mySQLMsgBox(Commande)
fSQL:mySQLFerme(gCurReq)
pWhere=""
Ferme
FIN
SINON
fSQL:mySQLTransaction(fSQL:mySQLDebut,gCurReq)
SI PAS fSQL:mySQLBloque(Commande,gCurReq) ALORS
...
FIN
FIN

et cela fonctionnait. Avec Oracle_4wd, il me reproche de n'avoir pas
fermé la req 1. En fait dans les deux cas, il rejoue la req avec FOR
UPDATE.



Ce qui m'étonne c'est le fonctionnement OK avec mysql4wd car concernant la
fermeture des requetes on a le même fonctionnement.

donc je me pose 2 questions :
pourquoi avec c_mysql4wd cela passe et pas en Oracle ?
ne devrais je pas éviter mon premier mySQLEXEC puisque je le fais dans
le blocage ?


Cela dépend. CAr si tu me dis que dans les 2 cas tu fais un select for
update le premier ne sert à rien.

@+

Manu
Avatar
Roumegou
Salut Manu

"Manu" a couché sur son écran :
ce que j'aurai fait :

gCurReq=1
SI ModeAppel<>"MODIFY" ALORS
SI PAS fSQL:mySQLExec(Commande,gCurReq) ALORS
fSQL:mySQLMsgBox(Commande)
fSQL:mySQLFerme(gCurReq)
pWhere=""
Ferme
FIN
SINON
fSQL:mySQLTransaction(fSQL:mySQLDebut,gCurReq)
SI PAS fSQL:mySQLBloque(Commande,gCurReq) ALORS
...
FIN
FIN



Oui je suis parti sur un truc un peu analogue en rajoutant ou non FOR
UPDATE selon ModeAppel. Mais faut que j'affine.
En fait, j'avais retranscris mon code par rapport à la prog SQLExec des
accès natifs pcsoft; et la logique est un peu différente car il n'y a
pas besoin de se rapporter à une requête précise.
De plus, j'avais pris l'habitude d'extraire automatiquement de ma
requete une req plus light du genre select id from tableprincipale et
de bloquer celle là. Pourquoi ? Car quand tu affiches la commande de
ton client par ex par une requete avec jointure, il est normal de
bloquer cette cde mais pas l'enreg client.

Ce qui m'étonne c'est le fonctionnement OK avec mysql4wd car concernant la
fermeture des requetes on a le même fonctionnement.



J'ai plein de plantage sur des requêtes qu'il me dit non fermées en
oracle.
Pour l'instant je ne comprends pas pourquoi ? les mysqlferme sont bien
présents et bien placés ??

Sinon j'ai rajouté la méthode mysqlCol qui existait dans mySQL4WD (mais
peut être faudrait-il l'enlever de Oracle4WD). J'ai aussi une
différence de param avec mysqlConnecte. Déclaré en dynamique ce n'est
pas grave mais pour avoir la complétion, je triche; je déclare l'objet
en c_oracle4wd ou c_mysql4wd et avant d'executer, je remet en
dynamique.
Mais si tu as mieux à me proposer ?

Cela dépend. CAr si tu me dis que dans les 2 cas tu fais un select for
update le premier ne sert à rien.



non dans le premier cas, je suis en visu et donc mon bouton de
validation est inactif; je n'ai donc pas besoin de bloquer l'enreg.
Dans les autres cas, oui.


@+

Manu



--
Eric Roumegou
http://cerbermail.com/?Wk2D8D62KI
(cliquez sur le lien ci-dessus pour me contacter en privé)