Bonjour,
Je travail sur un projet avec accès natif à une base Oracle(v8.1.7). J’ai importé dans mon analyse les tables de ma base de données sur lesquelles je veux travailler. Je dois modifier le contenu d’une de ces tables en y insérant des valeurs saisies dans une fenêtre. J’ai donc écrit la fonction suivante : (MaConnexion est la connexion avec accès natif décrite dans l’analyse)
PROCEDURE MettreBAP(pNom, pSys_Date, pTaech_Numcpt, pTotie_Cod)
sReq_Update est une chaîne = "UPDATE TAECH SET tasta_cod = 'BP', taech_utimaj = '" + pNom + "', taech_datmaj = '" + pSys_Date + "' WHERE taech_numcpt = '" + pTaech_Numcpt + "'"
// Mise en transaction de la connexion SI SQLTransaction ( sqlDébut , MaConnexion) ALORS
SI SQLExec(sReq_Update, "req_Update") = 0 ALORS SQLInfoGene("req_Update") Erreur("Erreur d'execution de la requête : " + SQL.MesErreur) SQLTransaction ( sqlFin, MaConnexion )
SINON Info("req executée") SQLTransaction ( sqlFin, MaConnexion ) FIN SINON Erreur("Erreur début transaction : " + SQL.MesErreur)
FIN
Voici le code de l’erreur qui est généré lors de l’exécution :
Vous avez appelé la fonction SQLExec. Il n'y a pas de connexion courante. ********************************************** ......
J’ai testé ma requête depuis un administrateur de base de données (TOAD 8.0.0.47, paramètres de connexion identiques à ceux de « MaConnexion ») et elle fonctionne correctement. J’ai ensuite essayé de créer cette requête avec l’assistant mais lorsque je la teste l’état du mode test reste figé à : Initialisation de la requête et affichage du résultat…
J’ai fait un autre essai avec cet méthode mais la aussi mon application ne répond plus dès l’exécution du code :
PROCEDURE MettreBAP(pNom, pSys_Date, pTaech_Numcpt, pTotie_Cod)
sReq_Update est une chaîne = "UPDATE TAECH SET tasta_cod = 'BP', taech_utimaj = '" + pNom + "', taech_datmaj = '" + pSys_Date + "' WHERE taech_numcpt = '" + pTaech_Numcpt + "'"
Req_Update est une Source de Données
SI HExécuteRequêteSQL(Req_Update, MaConnexion, hRequêteDéfaut, sReq_Update) ALORS Info("req executée") SINON Info("La requête n'a pas été éxécutée : " + RC + HErreurInfo()) FIN
Enfin j’ai essayé ceci :
PROCEDURE MettreBAP(pNom, pSys_Date, pTaech_Numcpt, pTotie_Cod)
sReq_Update est une chaîne = "UPDATE TAECH SET tasta_cod = 'BP', taech_utimaj = '" + pNom + "', taech_datmaj = '" + pSys_Date + "' WHERE taech_numcpt = '" + pTaech_Numcpt + "'"
// Connexion en utilisant Hyper File : SI SQLConnecte("ulism","ULIST","ULIST","","Oracle") = 0 ALORS SQLInfoGene() Erreur("La connexion à la source de données ulism a échouée."+ RC + "Code erreur : " + SQL.Erreur + RC + SQL.MesErreur) SINON SI PAS SQLTransaction( sqlDébut ) ALORS Info("pb debut transaction") SINON SI SQLExec(sReq_Update, "req_Update") = 0 ALORS SQLInfoGene("req_Update") Erreur("Erreur d'execution de la requête : " + SQL.MesErreur) SQLTransaction ( sqlFin ) SINON Info("req executée") FIN SQLTransaction( sqlFin ) FIN SQLDéconnecte() FIN
Mais lorsque le code SQLExec est exécuté un message d’erreur apparaît : Erreur d'execution de la requete : Erreur(blocage) de l'acces natif Oracle. Numero d'erreur = 1004 L'execution de la requete suivante a echoué : UPDATE TAECH SET tasta_cod = 'BP', taech_utimaj = 'STAGE', taech_datmaj = '22/07/2005' WHERE taech_numcpt = '20146' ORA-02049: Temporisation : transaction distribuée attend un verrou
J’aimerais connaître la méthode à utiliser afin de faire ces modifications.
PS : je fais des requêtes select qui utilisent MaConnexion et je n’ai rencontré aucun problème (avec HexecuteRequeteSQL()).
Merci de votre réponse. |