Bonjour,
je souhaite récupérer l'id auto incrémenté d'une base SQL server depuis Windev (en OLEDB, sans accès natif) et malheureusement cela ne fonctionne pas dans toutes les situations.
J'ai fait un projet test qui montre le problème, notamment lorsque l'on a plusieurs requêtes (avec des noms différents) sur la même base. Il est disponible ici : test_SQL et en pièce jointe de ce message.
Avec la syntaxe SQLConnecte c'est dans toutes les situations qu'il est impossible de récupérer l'ID auto généré.
Ma question: comment récupérer cet ID auto dans toutes les situations sans accès natif ?
Voici pour ceux qui n'ont pas un environnement Windev à disposition un des codes qui ne fonctionne pas (avec HouvreConnexion) :
Code windev : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 SI PAS BDD_connecte(SAI_Serveur,SAI_Utilisateur,SAI_Mot_de_passe,SAI_Nom_BD) ALORS ToastAffiche("Problème pour se connecter à la base SQL server") SINON sReq3 est une chaîne = [ INSERT INTO test1 (col_test, col_desc, col_date) VALUES (%1, %2, %3) ] sNomReq3 est une chaîne = "REQ_"+DonneGUID(guidBrut) sNomReq2 est une chaîne = "REQ_"+DonneGUID(guidBrut) sNomReq1 est une chaîne = "REQ_"+DonneGUID(guidBrut) sReq1 est une chaîne = [ SELECT * FROM test1 ] SI PAS HExécuteRequêteSQL(sNomReq1,COL_ProcéduresGlobales_HOuvreConnexion.gcnxBDDSQLServer, hRequêteSansCorrection,sReq1) ALORS Erreur(HErreurInfo(hErrMessage)) RENVOYER Faux FIN nCompteur est un entier = Hasard(1,9999) sReq3 = ChaîneConstruit(sReq3,nCompteur,"'description "+Hasard(1,99999)+"'","{d'"+DateVersChaîne(EntierVersDate(Hasard(DateVersEntier("20140101"),DateVersEntier(DateSys()))),"AAAA-MM-JJ")+"'}") SI PAS HExécuteRequêteSQL(sNomReq3,COL_ProcéduresGlobales_HOuvreConnexion.gcnxBDDSQLServer, hRequêteSansCorrection,sReq3) ALORS Erreur(HErreurInfo(hErrMessage)) RENVOYER Faux FIN sReq2 est une chaîne = [ SELECT SCOPE_IDENTITY() AS col_ID FROM test1 ] SI PAS HExécuteRequêteSQL(sNomReq2,COL_ProcéduresGlobales_HOuvreConnexion.gcnxBDDSQLServer, hRequêteSansCorrection,sReq2) ALORS Erreur(HErreurInfo(hErrMessage)) RENVOYER Faux FIN HLitPremier(sNomReq2) Info({sNomReq2+".col_ID"}) FIN
Le code de la procédure BDD_connecte :
Code windev : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 PROCEDURE BDD_connecte(LOCAL sServeur est une chaîne, LOCAL sUser est une chaîne, LOCAL sMDP est une chaîne, LOCAL sNomBD est une chaîne) sMess est une chaîne = "" HFermeConnexion(gcnxBDDSQLServer) H.ModeSQLServer = 3 HDécritConnexion(gcnxBDDSQLServer,sUser,sMDP,sServeur,sNomBD,hOledbSQLServer,hOLectureEcriture) H.ModeSQLServer = 3 SI PAS HOuvreConnexion(gcnxBDDSQLServer) ALORS sMess = "Problème de connexion à la base de données SQL Server"+HErreurInfo(hErrMessage) SI PAS EnModeWebservice() ET PAS EnModeService() ALORS ToastAffiche(sMess) FIN RENVOYER Faux SINON RENVOYER Vrai FIN
Merci pour vos idées et/ou suggestions!
Partager