IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Utiliser SQLExec et HExécuteRequête [WD16]


Sujet :

WinDev

  1. #1
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut Utiliser SQLExec et HExécuteRequête
    Bonsoir,

    D'après vous, est-il mauvais, déconseillé d'utiliser 2 connexions à une base de données et utiliser dans certains cas SQLExec et dans d'autres HExécuteRequête/HExécuteRequêteSQL ?

    J'avais du code qui fonctionnait bien en SQLExec, j'ai dû en passer certains en HExécuteRequête/HExécuteRequêteSQL et je n'arrive pas à tout passer. Je bloque sur la récupération de l'identifiant automatique lors d'une requête INSERT.

    Ceci fonctionne parfaitement en SQLExec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLExec("SELECT SCOPE_IDENTITY()", "REQ_IDAuto")
    J'ai tenté ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HExécuteRequêteSQL(REQ_ID, MaCNX, hRequêteSansCorrection, "SELECT SCOPE_IDENTITY() AS IDAuto")
    J'ai systématiquement 0 en retour d'IDAuto.

    Donc si je n'arrive pas à le faire avec HExécuteRequête/HExécuteRequêteSQL, cela ne me dérange pas de mixer les fonctions mais est-ce pas dangereux ?

    Merci pour votre aide.

    EDIT : Pour info, je suis connecté en OLEDB vers SQLServer.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 303
    Points : 812
    Points
    812
    Par défaut
    Bonjour WDKyle,

    Je ne crois pas que ce soit possible…

    Si tu as 2 connexions, alors je crois bien que tu as 2 sessions.
    Et SCOPE_IDENTITY() exécuté dans la session SQLExec ne peut pas voir les id créés dans l'autre session qui correspond à MaCNX du HExécuteRequêteSQL.

    Donc, logiquement ça ne peut pas fonctionner.

    Mais pour en revenir au code
    Code WLangage : Sélectionner tout - Visualiser dans une fenêtre à part
    HExécuteRequêteSQL(REQ_ID, MaCNX, hRequêteSansCorrection, "SELECT SCOPE_IDENTITY() AS IDAuto")
    et à IDAuto toujours à 0, je me demande si c'est vraiment SQL Server qui attribue l'identifiant, et si cet identifiant ne serait pas "forcé" par la couche d'accès aux données d'HyperFile.

    D'où la question… comment la ligne dont tu veux récupérer l'identifiant a-t-elle été ajoutée ? Donnes-nous le code, par exemple.

    Merci et bon courage.

  3. #3
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Bonsoir OnePoint,

    Citation Envoyé par OnePoint Voir le message
    Bonjour WDKyle,

    Je ne crois pas que ce soit possible…

    Si tu as 2 connexions, alors je crois bien que tu as 2 sessions.
    Et SCOPE_IDENTITY() exécuté dans la session SQLExec ne peut pas voir les id créés dans l'autre session qui correspond à MaCNX du HExécuteRequêteSQL.

    Donc, logiquement ça ne peut pas fonctionner.
    Je ne veux pas mixer SQLExec et HExécuteRequêteSQL pour faire des INSERTS. SELECT en HExécuteRequêteSQL et INSERT/UPDATE/DELETE avec SQLExec.

    Toujours impossible ?!

    Citation Envoyé par OnePoint Voir le message
    Mais pour en revenir au code
    Code WLangage : Sélectionner tout - Visualiser dans une fenêtre à part
    HExécuteRequêteSQL(REQ_ID, MaCNX, hRequêteSansCorrection, "SELECT SCOPE_IDENTITY() AS IDAuto")
    et à IDAuto toujours à 0, je me demande si c'est vraiment SQL Server qui attribue l'identifiant, et si cet identifiant ne serait pas "forcé" par la couche d'accès aux données d'HyperFile.

    D'où la question… comment la ligne dont tu veux récupérer l'identifiant a-t-elle été ajoutée ? Donnes-nous le code, par exemple.

    Merci et bon courage.
    Avec un INSERT tout bête... et coté code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    HExécuteRequête(REQ_Auditeur_Ajouter, MaCNX, hRequêteSansCorrection)
    HExécuteRequêteSQL(REQ_ID, MaCNX, hRequêteSansCorrection, "SELECT SCOPE_IDENTITY() AS IDAuto")

  4. #4
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Citation Envoyé par OnePoint Voir le message
    Bonjour WDKyle,

    Je ne crois pas que ce soit possible…

    Si tu as 2 connexions, alors je crois bien que tu as 2 sessions.
    Et SCOPE_IDENTITY() exécuté dans la session SQLExec ne peut pas voir les id créés dans l'autre session qui correspond à MaCNX du HExécuteRequêteSQL.

    Donc, logiquement ça ne peut pas fonctionner.

    Mais pour en revenir au code
    Code WLangage : Sélectionner tout - Visualiser dans une fenêtre à part
    HExécuteRequêteSQL(REQ_ID, MaCNX, hRequêteSansCorrection, "SELECT SCOPE_IDENTITY() AS IDAuto")
    et à IDAuto toujours à 0, je me demande si c'est vraiment SQL Server qui attribue l'identifiant, et si cet identifiant ne serait pas "forcé" par la couche d'accès aux données d'HyperFile.

    D'où la question… comment la ligne dont tu veux récupérer l'identifiant a-t-elle été ajoutée ? Donnes-nous le code, par exemple.

    Merci et bon courage.
    Bonsoir,

    La première chose à faire, c'est de tester le code retour de HExecuteRequêteSQL(), s'il est à Faux, la fonction HerreurInfo() te donnera des informations.

    Mon expérience, c'est Windev avec Oracle, ou Windev avec HyperFile, alors peut-être que je suis à côté de la plaque.
    Mais à mon avis, la requête : SELECT SCOPE_IDENTITY() AS IDAuto n'est pas acceptée.
    Pour ma part, j'essaierais :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT SCOPE_IDENTITY() AS IDAuto FROM Dual
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  5. #5
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Bonsoir,

    La première chose à faire, c'est de tester le code retour de HExecuteRequêteSQL(), s'il est à Faux, la fonction HerreurInfo() te donnera des informations.

    Mon expérience, c'est Windev avec Oracle, ou Windev avec HyperFile, alors peut-être que je suis à côté de la plaque.
    Mais à mon avis, la requête : SELECT SCOPE_IDENTITY() AS IDAuto n'est pas acceptée.
    Pour ma part, j'essaierais :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT SCOPE_IDENTITY() AS IDAuto FROM Dual
    Bonsoir tbc92,

    La requête passe mais retour 0 en idauto

  6. #6
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Bonjour

    Tu peux mixer les 2 types d'accès sans aucun problème. ça fait juste 2 connexions séparées c'est tout, je fais ça aussi parfois.

    Citation Envoyé par Onepoint
    je me demande si c'est vraiment SQL Server qui attribue l'identifiant, et si cet identifiant ne serait pas "forcé" par la couche d'accès aux données d'HyperFile
    Avec hRequêteSansCorrection Windev envoie le code tel quel et SQL Server renvoie un résultat. La couche d'accès aux données de Windev n'y touche pas (en principe)

    Citation Envoyé par tbc92
    Mais à mon avis, la requête : SELECT SCOPE_IDENTITY() AS IDAuto n'est pas acceptée.
    "SELECT SCOPE_IDENTITY() AS IDAuto" passe très bien. Si c'était incorrect ça bloquerait aussi avec SQLExec

    Pour info, je viens de tester à l'instant un INSERT et un SELECT SCOPE_IDENTITY() avec HExecuteRequêteSQL et ça fonctionne très bien

    Tu devrais peut être nous montrer ton code

  7. #7
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Bonjour,

    je me trompe peut-être mais pour moi, les identifiants automatiques n'ont jamais fonctionné avec SqlServer (accès natif ou pas) ...

    bon courage,

    Nicolas

  8. #8
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Citation Envoyé par Nicolas_Jeanneau Voir le message
    Bonjour,

    je me trompe peut-être mais pour moi, les identifiants automatiques n'ont jamais fonctionné avec SqlServer (accès natif ou pas) ...

    bon courage,

    Nicolas
    Heureusement que si

    EDIT :
    Il y plusieurs méthodes avec des différences de portée notamment :

    SELECT @@IDENTITY
    It returns the last IDENTITY value produced on a connection, regardless of the table that produced the value, and regardless of the scope of the statement that produced the value.
    @@IDENTITY will return the last identity value entered into a table in your current session. While @@IDENTITY is limited to the current session, it is not limited to the current scope. If you have a trigger on a table that causes an identity to be created in another table, you will get the identity that was created last, even if it was the trigger that created it.

    SELECT SCOPE_IDENTITY()
    It returns the last IDENTITY value produced on a connection and by a statement in the same scope, regardless of the table that produced the value.
    SCOPE_IDENTITY(), like @@IDENTITY, will return the last identity value created in the current session, but it will also limit it to your current scope as well. In other words, it will return the last identity value that you explicitly created, rather than any identity that was created by a trigger or a user defined function.

    SELECT IDENT_CURRENT(‘tablename’)
    It returns the last IDENTITY value produced in a table, regardless of the connection that created the value, and regardless of the scope of the statement that produced the value.
    IDENT_CURRENT is not limited by scope and session; it is limited to a specified table. IDENT_CURRENT returns the identity value generated for a specific table in any session and any scope.

  9. #9
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Points : 4 681
    Points
    4 681
    Billets dans le blog
    22
    Par défaut
    Bonjour

    et si tu utilises @@identity au lieu de SCOPE_IDENTITY()

    Bon dev
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  10. #10
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Bonjour,

    Je vous met du code des que possible sinon @@IDENTITY c'est plutot déconseiller car moins sur de tomber sur le bon idauto.

  11. #11
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Je me suis mal exprimé : pour moi, WinDev ne sait pas gérer les identifiants automatiques de SQLServer ! Mais finalement, je crois me souvenir que c'est uniquement avec la fonction HAjoute ...

  12. #12
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    @Nicolas_Jeanneau : c'est bien ça, il n'y a que par un HAjoute qu'on peut récupérer le dernier id auto (via la rubrique de l'analyse). Avec SQLExec ou HExecuteRequeteSQL il faut le récupérer par du SQL.
    Mais j'imagine qu'un HAjoute fait a peu près la même chose en interne, voire un max sur la colonne !

    Il faudrait tracer les requêtes et je n'ai pas le Profiler (non livré en version Express)
    Si quelqu'un peut tester

  13. #13
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonsoir,

    Je voulais juste rappeler que l'instruction INSERT de PostgreSQL dispose d'une clause RETURNING (propre à PG et donc non standard) qui permet de rapatrier aisément l'identifiant.
    Comme je ne connais pas SQLServer, j'ignore s'il dispose d'un équivalent.
    Les échanges qui précèdent semblent indiquer que non, mais sait-on jamais ...

    Hemgé

  14. #14
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Je l'ai le sql server profiler sous sqlserver 2014 express...

    Tu est sur quelle version hpascal ?

  15. #15
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Citation Envoyé par WDKyle Voir le message
    Je l'ai le sql server profiler sous sqlserver 2014 express...

    Tu es sur quelle version hpascal ?
    2008 R2
    Apparemment ce n'était pas fourni avec cette version
    Ceci d'après cette page c'est le cas aussi avec la 2014 Express : http://msdn.microsoft.com/en-us/library/cc645993.aspx

    Tu peux donc faire un petit test
    Tu fais un HAjoute et tu regardes toutes les requêtes générées

  16. #16
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Citation Envoyé par Hemgé Voir le message
    Je voulais juste rappeler que l'instruction INSERT de PostgreSQL dispose d'une clause RETURNING (propre à PG et donc non standard) qui permet de rapatrier aisément l'identifiant.
    Oui j'ai découvert ça il y a peu. C'est vraiment pratique !

  17. #17
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Voici par exemple un code qui ne fonctionne pas !

    Code : 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
     
    // AJOUT DANS LA BASE DE DONNEES
    SQLTransaction(sqlDébut, Connexion_SQL_H)
     
    SOU_IDAuto est une Source de Données
     
    SI HExécuteRequête(REQ_Auditeur_Ajouter) = Vrai ALORS
    	SI HExécuteRequêteSQL(SOU_IDAuto, Connexion_SQL_H, hRequêteSansCorrection, "SELECT SCOPE_IDENTITY() AS IDAuto") = Vrai ALORS
    		SI HLitPremier(SOU_IDAuto, "", hSansRafraîchir) = Vrai ALORS
    			Info(SOU_IDAuto.IDAuto)
    		SINON
    			SQLTransaction(sqlAnnule, Connexion_SQL_H)
    			Erreur("Erreur : " + HErreurInfo(hErrComplet))
    		FIN
    	SINON
    		SQLTransaction(sqlAnnule, Connexion_SQL_H)
    		Erreur("Erreur : " + HErreurInfo(hErrComplet))
    	FIN
    	HLibèreRequête(SOU_IDAuto)
    SINON
    	SQLTransaction(sqlAnnule, Connexion_SQL_H)
    	Erreur("Erreur : " + HErreurInfo(hErrComplet))
    FIN
    HLibèreRequête(REQ_Auditeur_Ajouter)
     
    SQLTransaction(sqlFin, Connexion_SQL_H)
    Résultat du Info(SOU_IDAuto.IDAuto) > 0

  18. #18
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Je pense que le problème vient du mix de HExécuteRequête et HExécuteRequêteSQL
    HExécuteRequêteSQL utilise la connexion Connexion_SQL_H, HExécuteRequête utilise la connexion courante

    Et même si c'est la même connexion il y a peut être des contextes différents

    Je suis sur que ça va fonctionner si tu fais ton INSERT avec HExécuteRequêteSQL

  19. #19
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Points : 4 681
    Points
    4 681
    Billets dans le blog
    22
    Par défaut
    Bonjour à tous

    Je viens de faire des tests en WD19

    Avec les fonctions SQLxxx :

    Code : 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
    SI PAS SQLConnecte("MonServeur","sa","MDP","MaBase","SQL SERVER",hOledbSQLServer) ALORS
    	SQLInfoGene()
    	Erreur(SQL.Erreur)
    SINON 
    	SI PAS SQLExec("INSERT  into test (testValeur) VALUES ('') " ,"reqTest") ALORS
    		SQLInfoGene("reqTest")
    		Erreur(SQL.Erreur+RC+SQL.MesErreur)
    	SINON
    		SQLInfoGene("reqTest")
    		SI PAS SQLExec("SELECT SCOPE_IDENTITY() as ID","reqTest") ALORS
    			SQLInfoGene("reqTest")
    			Erreur(SQL.Erreur+RC+SQL.MesErreur)
    		SINON
    			SQLPremier("reqTest")
    			Info(SQLCol("reqTest",1))
    		FIN
    	FIN
    FIN
    Avec les fonctions Hxxx :

    Code : 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
     
    MaConnexion est une Connexion 
    // Description de la connexion 
    MaConnexion..Utilisateur = "sa" 
    MaConnexion..MotDePasse = "pwd" 
    MaConnexion..Serveur = "MonServeur" 
    MaConnexion..BaseDeDonnées = "MaBase" 
    MaConnexion..Provider = hOledbSQLServer
    MaConnexion..Accès = hOLectureEcriture 
     
    SI PAS HOuvreConnexion(MaConnexion) ALORS
    	Erreur(HErreurInfo(hErrComplet))
    SINON
    	SI PAS HExécuteRequêteSQL("reqTest",MaConnexion,hRequêteSansCorrection,"INSERT  into test (testValeur) VALUES ('') ") ALORS
     
    	SINON
    		//info(sql.IdAuto)
    		SI PAS HExécuteRequêteSQL("reqTest",MaConnexion,hRequêteSansCorrection,"SELECT SCOPE_IDENTITY() as ID") ALORS
    			Erreur(HErreurInfo(hErrComplet))
    		SINON
    			HLitPremier("reqTest")
    			Info(HRécupèreRubrique("reqTest",1))
    		FIN
    	FIN
    FIN
    cela fonctionne de mon coté, j'ai même mis un point d'arrêt après la requête de type INSERT, lancer manuellement dans le manager des requête requêtes de type INSERT ; le programme me retourne le bon ID


    Bon dev
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  20. #20
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Citation Envoyé par hpascal Voir le message
    Je pense que le problème vient du mix de HExécuteRequête et HExécuteRequêteSQL
    HExécuteRequêteSQL utilise la connexion Connexion_SQL_H, HExécuteRequête utilise la connexion courante

    Et même si c'est la même connexion il y a peut être des contextes différents

    Je suis sur que ça va fonctionner si tu fais ton INSERT avec HExécuteRequêteSQL
    Je viens de tester avec le nom de connexion, même résultat > 0.

    Code : 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
     
    // AJOUT DANS LA BASE DE DONNEES
    SQLTransaction(sqlDébut, Connexion_SQL_H)
     
    SOU_IDAuto est une Source de Données
     
    SI HExécuteRequête(REQ_Auditeur_Ajouter, Connexion_SQL_H) = Vrai ALORS
    	SI HExécuteRequêteSQL(SOU_IDAuto, Connexion_SQL_H, hRequêteSansCorrection, "SELECT SCOPE_IDENTITY() AS IDAuto") = Vrai ALORS
    		SI HLitPremier(SOU_IDAuto, "", hSansRafraîchir) = Vrai ALORS
    			Info(SOU_IDAuto.IDAuto)
    		SINON
    			Erreur("Erreur : " + HErreurInfo(hErrComplet))
    		FIN
    	SINON
    		Erreur("Erreur : " + HErreurInfo(hErrComplet))
    	FIN
    	HLibèreRequête(SOU_IDAuto)
    SINON
    	Erreur("Erreur : " + HErreurInfo(hErrComplet))
    FIN
    HLibèreRequête(REQ_Auditeur_Ajouter)
     
    SQLTransaction(sqlAnnule, Connexion_SQL_H)
    Idem avec les 2 requêtes faites depuis l'éditeur de requête :

    Code : 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
     
    SI HExécuteRequête(REQ_Auditeur_Ajouter, Connexion_SQL_H) = Vrai ALORS
    	SI HExécuteRequête(REQ_IDAuto, Connexion_SQL_H, hRequêteSansCorrection) = Vrai ALORS
    		SI HLitPremier(REQ_IDAuto, "", hSansRafraîchir) = Vrai ALORS
    			Info(REQ_IDAuto.IDAuto)
    		SINON
    			Erreur("Erreur : " + HErreurInfo(hErrComplet))
    		FIN
    	SINON
    		Erreur("Erreur : " + HErreurInfo(hErrComplet))
    	FIN
    	HLibèreRequête(REQ_IDAuto)
    SINON
    	Erreur("Erreur : " + HErreurInfo(hErrComplet))
    FIN
    HLibèreRequête(REQ_Auditeur_Ajouter)
    ça ne me dérange pas d'avoir 2 connexions... Car là, je ne vois pas le soucis.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo