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

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mars 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : mars 2019
    Messages : 5
    Points : 1
    Points
    1

    Par défaut Exécution d'un requête SQL et lecture SQLfetch

    Bonjour

    Je reprends du code d'un vieux programme alors ne m'en voulez pas, ce n'est pas moi qui ai mis de GOTO (j'ai bien l'intention de les remplacer)
    mon soucis décrit étape par étape:
    - je teste ma connexion SQl via ODBC qui fonctionne bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    cnxfast = SQLConnecte("Mabase","","","","ODBC")
    SI cnxFast = 0 ALORS
    	fEcritLigne(numlog,"ERROR: Connexion ODBC Impossible")	
    	GOTO C_fini
    SINON
    	fEcritLigne(numlog," Connexion ODBC  OK")
    FIN
    - J'exécute une simple requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	SQLChangeConnexion(cnxFast)	
    		req1 = "SELECT CODE,EDIENSEIGNE,TARIFPV FROM MAG WHERE ILN = '"+code_cli+"' "
    		SI PAS SQLExec(req1,nomreq1) ALORS
    			fEcritLigne(numlog,"Warning: Impossible d'exécuter la  requête: " + req1)
    			SQLErreur(nomreq1,req1)
    			GOTO C_fait
    		FIN
     
    		SI SQLFetch(nomreq1) <> 0 ALORS
    			GOTO C_fait
    		FIN
    Si j'exécute ma requête SQL sur un éditeur comme DBeaver, il me retourne bien une ligne de résultat.
    Lorsque je lance mon programme, le SQLExec est bon mais le SQLfetch me retourne toujours 1 alors qu'il devrait retourner 0 pour me dire qu'il a bien trouvé la ligne existante.
    Je ne comprends pas ce qui ne va pas.

    Merci par avance pour votre aide

  2. #2
    Membre habitué
    Homme Profil pro
    Chef de projet
    Inscrit en
    mars 2017
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2017
    Messages : 72
    Points : 137
    Points
    137

    Par défaut

    Uu, voilà un truc que j'ai jamais vu. J'ai jamais utilisé les ordres SQL ainsi.
    C'est quoi la base utilisée par l'ODBC, son nom?
    Ta version de Windev?
    Je pourrais tester de mon côté déjà pour voir si j'obtiens un truc cohérent.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mars 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : mars 2019
    Messages : 5
    Points : 1
    Points
    1

    Par défaut

    Bonjour.

    Ma base est une base MySql version 8.
    version de Windev: 15

    Merci beaucoup

  4. #4
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    mutlitâche-multifonction
    Inscrit en
    juin 2003
    Messages
    3 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : mutlitâche-multifonction
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2003
    Messages : 3 221
    Points : 5 447
    Points
    5 447

    Par défaut

    Question à 2 balles : tu dis que tu as exécuté la requête sur un autre soft, mais tu n'aurais pas un code_cli qui aurait une casse différente/des espaces qui s'inséreraient ?

    Un test à faire est de remplacer ton sqlexec par un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    MaRequête est uen source de données
    si HExécuteRequêteSQL(MaRequête,cnxFast,hRequêteSansCorrection,SELECT CODE,EDIENSEIGNE,TARIFPV FROM MAG WHERE ILN = '"+code_cli+"') alors
    Hlitpremier(MaRequête)
    info(MaRequete.EDIENSEIGNE)
    HannuleDeclaration(MaRequête)
    FIN
    Attention, c'est du brut de fonderie sans test, ni vérification syntaxique. A vérifier donc !

    Une piste est de passer par un accès natif (je ne sais pas si celui de MySQL existent encore en V15). Par contre, il faudrait revoir tous les accès à la BDD
    Commencez toujours par là : et puis n'hésitez à passer par là : ou par un autre moteur de recherche...
    Pas de question par MP s'il vous plait. Le forum est fait pour cela...

    Make it real not fantasy

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mars 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : mars 2019
    Messages : 5
    Points : 1
    Points
    1

    Par défaut

    Merci pour la réponse
    Quand j'exécute le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MaRequête est une Source de Données
    		HExécuteRequêteSQL(MaRequête,cnxFastmag,"SELECT CODE,EDIENSEIGNE,TARIFPV FROM MAG WHERE ILN = '"+code_cli+"'")
    		HLitPremier(MaRequête)
    		Info(MaRequête.EDIENSEIGNE)
    		HAnnuleDéclaration(MaRequête)
    J'ai un plantage à l'exécution de la commande HLitPremier

    Erreur à la ligne 402 du traitement Procédure globale LivraisonsFM_new.
    Vous avez appelé la fonction HLitPremier.
    Aucune analyse n'est ouverte et le fichier <MaRequête> n'a pas été décrit.


    J'ai cherché sur l'aide et le web mais je ne vois pas ce qui ne va pas

  6. #6
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    mutlitâche-multifonction
    Inscrit en
    juin 2003
    Messages
    3 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : mutlitâche-multifonction
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2003
    Messages : 3 221
    Points : 5 447
    Points
    5 447

    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    si HExécuteRequêteSQL(MaRequête,cnxFast,hRequêteDéfaut,SELECT CODE,EDIENSEIGNE,TARIFPV FROM MAG WHERE ILN = '"+code_cli+"') alors ...
    hRequêteDéfaut à la place de hRequêteSansCorrection

    Sans conviction car comme tu n'as pas d'analyse, je ne sais pas comment ça va réagir.

    Ton code_cli vaut quoi ?
    Commencez toujours par là : et puis n'hésitez à passer par là : ou par un autre moteur de recherche...
    Pas de question par MP s'il vous plait. Le forum est fait pour cela...

    Make it real not fantasy

  7. #7
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    décembre 2013
    Messages
    2 530
    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 : 2 530
    Points : 5 443
    Points
    5 443

    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MaRequête est une Source de Données
    		HExécuteRequêteSQL(MaRequête,cnxFastmag,"SELECT CODE,EDIENSEIGNE,TARIFPV FROM MAG WHERE ILN = '"+code_cli+"'")
    		HLitPremier(MaRequête)
    		Info(MaRequête.EDIENSEIGNE)
    		HAnnuleDéclaration(MaRequête)
    Ce code là peut marcher, pas de problème.
    Mais si tu es en galère, si tu as besoin de comprendre pourquoi ça bugge, ce code est 'inacceptable'.
    La commande hLitPremier plante parce que le hExecuteRequeteSQL qui est juste avant n'a pas fait son job. Demandons à Windev ce qui a empéché hExecuteRequeteSQL de fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    MaRequête est une Source de Données
    brc est un booleen 
    		brc =HExécuteRequêteSQL(MaRequête,cnxFastmag,"SELECT CODE,EDIENSEIGNE,TARIFPV FROM MAG WHERE ILN = '"+code_cli+"'")
                    si pas brc alors 
                         Erreur ( " plantage ", herreurinfo() )
                         Retour
                    fin 
    		HLitPremier(MaRequête)
    		Info(MaRequête.EDIENSEIGNE)
    		HAnnuleDéclaration(MaRequête)
    Il faut tester le code retour de hExecuteRequeteSQL, la fonction hErreurInfo peut te donner plein d'infos très utiles.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  8. #8
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    mutlitâche-multifonction
    Inscrit en
    juin 2003
    Messages
    3 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : mutlitâche-multifonction
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2003
    Messages : 3 221
    Points : 5 447
    Points
    5 447

    Par défaut

    +1 tbc92.

    Je n'avais pas vu l'absence de test d'exécution du HExécuteRequêteSQL.
    Commencez toujours par là : et puis n'hésitez à passer par là : ou par un autre moteur de recherche...
    Pas de question par MP s'il vous plait. Le forum est fait pour cela...

    Make it real not fantasy

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mars 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : mars 2019
    Messages : 5
    Points : 1
    Points
    1

    Par défaut

    Merci pour vos retours.
    Je ne sais pas quel est le bon paramétrage pour la commande HExécuteRequêteSQL (j'ai quand même jeté un œil sur l'aide)
    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    brc =HExécuteRequêteSQL(hRequêteDéfaut,"SELECT CODE,EDIENSEIGNE,TARIFPV FROM MAG WHERE ILN = 'BT0031'")
    brc =HExécuteRequêteSQL(MaRequête,cnxFastmag,"SELECT CODE,EDIENSEIGNE,TARIFPV FROM MAG WHERE ILN = 'BT0031'")
    brc =HExécuteRequêteSQL(MaRequête,hRequêteDéfaut,"SELECT CODE,EDIENSEIGNE,TARIFPV FROM MAG WHERE ILN = 'BT0031'")
    Dans tous les cas, cela plante (brc=faux). mais on ne connaît pas la raison de ce plantage

    alors que lorsque j'utilisais la commande SQLExec (dont je teste le retour dans mon code, cf premier post), ça fonctionnait mais c'est le fetch qui plantait.
    Je désespère

  10. #10
    Membre éclairé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    juin 2017
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : juin 2017
    Messages : 566
    Points : 894
    Points
    894

    Par défaut

    Bonjour,
    Citation Envoyé par cdruais Voir le message
    Dans tous les cas, cela plante (brc=faux). mais on ne connaît pas la raison de ce plantage
    (
    La raison du plantage est indiquée dans le message d'erreur qui s'affiche si brc=faux cf post 7
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    MaRequête est une Source de Données
    brc est un booleen 
    		brc =HExécuteRequêteSQL(MaRequête,cnxFastmag,"SELECT CODE,EDIENSEIGNE,TARIFPV FROM MAG WHERE ILN = '"+code_cli+"'")
                    si pas brc alors 
                         Erreur ( " plantage ", herreurinfo() )
                         Retour
                    fin
    Il y a peut être plus simple, mais ça tourne

  11. #11
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    décembre 2013
    Messages
    2 530
    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 : 2 530
    Points : 5 443
    Points
    5 443

    Par défaut

    hErreurInfo() dit forcément quelque chose.
    Peut-être que le message renvoyé par hErreurInfo n'est pas suffisamment clair, et dans ce cas, donne nous ce message.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mars 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : mars 2019
    Messages : 5
    Points : 1
    Points
    1

    Par défaut

    Je vous confirme que HErreurInfo() retourne une chaîne vide

    Nom : erreur.jpg
Affichages : 23
Taille : 92,4 Ko

  13. #13
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    décembre 2013
    Messages
    2 530
    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 : 2 530
    Points : 5 443
    Points
    5 443

    Par défaut

    Ici, tu fais Valeur est une chaine = hErreurInfo()Puis ensuite tu fais info( hErreurInfo() )Donc tu lances la fonction hErreurInfo() 2 fois de suite, et tu regardes le résultat du 2ème appel de hErreurInfo().

    Je ne suis pas certain à 100%, mais c'est tout à fait possible que le 1er appel de hErreurInfo() donne quelque chose, alors que le 2ème donne une chaine vide. C'est un comportement pas très intuitif, mais tout à fait cohérent avec toute la gestion des erreurs.

    Modifie ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Valeur est une chaine = hErreurInfo() 
    Warning ( "plantage", valeur )
    Ou bien, dans le debugger, regarde le contenu de ta chaine de caractères 'Valeur'. Tu devrais avoir ta réponse comme ça.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  14. #14
    Membre éclairé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    juin 2017
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : juin 2017
    Messages : 566
    Points : 894
    Points
    894

    Par défaut

    Citation Envoyé par tbc92 Voir le message
    c'est tout à fait possible que le 1er appel de hErreurInfo() donne quelque chose, alors que le 2ème donne une chaine vide.
    C'est tout à fait ça. HErreurInfo renvoie les infos concernant la HErreur en cours et se comporte comme HErreur(), bien souvent, le 2° appel annule le 1°.
    Il suffit d'ailleurs de regarder la doc :
    Remarques :
    Cette fonction doit être appelée immédiatement après l'appel de la fonction qui échoue. En effet, l'appel à une fonction (différente d'une fonction d'erreur) peut ré-initialiser et modifier le compte-rendu de la fonction HErreurInfo.
    L'affectation de HErreurInfo renvoie bien, l'erreur, mais l'appel de HErreurInfo dans Erreur fait référence à la dernière erreur sur une opération HF i.e l'appel de HErreurInfo() dans l'affectation. Comme dans ce cas, il n'y a pas de raison qu'il y ait une erreur, HErreurInfo prend la valeur ""
    Il y a peut être plus simple, mais ça tourne

Discussions similaires

  1. exécution d'une requête SQL dans access
    Par skyarnangel dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/02/2009, 11h18
  2. Exécution d'une requête SQL qui affiche un message
    Par Platon93 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 29/11/2006, 16h15
  3. Assurer l'exécution d'une requête SQL
    Par condor_01 dans le forum JDBC
    Réponses: 4
    Dernier message: 11/08/2006, 11h23
  4. problème d'exécution d'un requête SQL!
    Par binhjuventus dans le forum C++Builder
    Réponses: 5
    Dernier message: 12/07/2006, 04h21
  5. Erreur d'exécution d'une requête sql
    Par marceline dans le forum Oracle
    Réponses: 2
    Dernier message: 11/07/2006, 13h12

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