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 :

windev mobile 17 Utilisation du sql [WD17]


Sujet :

WinDev

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Points : 8
    Points
    8
    Par défaut windev mobile 17 Utilisation du sql
    Bonjour à tous,

    Je suis un débutant en programmation Windev.

    Je suis actuellement en stage dans une entreprise et je ne sais pas du tout comment marche le sql sous Windev.

    Je vais vous expliquer mon problème :

    Mon projet est de faire une application android pour gérer des animaux.
    J'ai donc créé une analyse avec un seul fichier de données appelé Animal.
    J'ai remarqué qu'on pouvait créer des requêtes, j'ai testé la fonctionnalité et j'ai donc inséré un tuple et fait un SELECT. Jusque là, pas de problème.

    Mon soucis se situe au niveau du code.
    Il m'est en effet impossible de récupérer le champ que j'ai inséré dans ma table et je ne sais d'ailleurs mème pas si la table est détectée par mon programme.

    Au niveau du code j'ai créé une procédure et un traitement sur un bouton qui sont les suivants :


    la procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SI EnModeAndroid() ALORS
    	// Décrit la connexion qui sera utilisée
    	SI HDécritConnexion(cstNomConnexion,"PASCAL","","c:\androbook\androbook.db","",hAccèsHF7,hOLectureEcriture) = Faux ALORS
    		Erreur("Impossible de décrire la connexion", HErreurInfo(hErrMessage))
    		FinProgramme(Vrai)
     
    SI HChangeConnexion("*",cstNomConnexion) =Faux ALORS
    		Erreur("Impossible de changer la connexion", HErreurInfo(hErrMessage))
    		FinProgramme(Vrai)
    	FIN	
     
    FIN
    	FIN
    le traitement sur le bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CodeSQL est une chaîne = "SELECT * FROM Animal WHERE Numero11Animal= "
     
     
    sCodeSQL = sCodeSQL + SAI_Numero_national
    HExécuteRequêteSQL(gsdLaRequete,hRequêteDéfaut,sCodeSQL)
     
     
    POUR TOUT gsdLaRequete 
     
    	SAI_Numero_de_lot = gsdLaRequete.numLotAnimal
    FIN
    voici le schéma relationnel de ma table :

    Animal(IDAminal, IDPere, IDMere, CodePaysAnimal, Numero11Animal, NumLotAnimal)

    Mon objectif est en fait de saisir un numéro11Animal dans une zone de texte et qu'à partir de là quand je clique sur le bouton, le programme aille me chercher le numéro de lot d'un animal.

    Quelqu'un pourrait me dire si le problème viendrait de mon code ? ou si j'aurais mal paramétré ma connexion ? Merci d'avance pour vos réponses

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 239
    Points : 12 866
    Points
    12 866
    Par défaut
    Bonjour,
    Tu peux commencer par tester le retour de hExceuteRequeteSQL, tu auras peut-être une piste...

    Tatayo.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 136
    Points : 241
    Points
    241
    Par défaut
    Citation Envoyé par thecam64 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SI EnModeAndroid() ALORS
    	// Décrit la connexion qui sera utilisée
    	SI HDécritConnexion(cstNomConnexion,"PASCAL","","c:\androbook\androbook.db","",hAccèsHF7,hOLectureEcriture) = Faux ALORS
    		Erreur("Impossible de décrire la connexion", HErreurInfo(hErrMessage))
    		FinProgramme(Vrai)
     
    SI HChangeConnexion("*",cstNomConnexion) =Faux ALORS
    		Erreur("Impossible de changer la connexion", HErreurInfo(hErrMessage))
    		FinProgramme(Vrai)
    	FIN	
     
    FIN
    	FIN
    A priori il me semble qu'il manque l'ouverture de ta connexion.
    Tu utilises HDecritConnexion, pour indiquer la connexion que tu souhaites utiliser mais tu ne l'ouvre pas.
    Pour cela, il faut faire, après le HDecritConnexion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HOuvreConnexion (cstNomConnexion)
    ou tu peux remplacer le mot HDecritConnexion par HOuvreConnexion

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 217
    Points : 487
    Points
    487
    Par défaut
    Bonjour,

    Il me semble que le type de fichier sous android ne peut être que du SQLite.
    Dans la description de votre connexion, il est écrit hAccèsHF7 qui est un accès Hyperfile Classic.
    Une partie de votre problème vient surement de là.
    Commencez par remplacer hAccèsHF7 par hAccèsNatifSQLite

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Merci pour votre aide.

    J'ai apporté les modifications que vous m'avez indiqué mais il y a toujours un problème voici le message d'erreur qui a été retourné :


    Erreur à la ligne 13 du traitement Clic sur BTN_OK1.
    Le mécanisme de sécurité HyperFileSQL s'est déclenché lors d'un parcours intégré du fichier 'gsdLaRequete' sur la rubrique ''.
    Fichier <gsdLaRequete> inconnu dans l'analyse <C:\Mes Projets Mobile\Androbook\Androbook_1.wdd>, ou requête ou vue non initialisée.
    Si il s'agit d'une requête, l'exécution de cette requête a peut-être échoué.

    **********************************************

    ----- Informations techniques -----

    Appel WL :
    Traitement de 'Clic sur BTN_OK1' (FEN_programme.ONG_production.BTN_OK1), ligne 13, thread 0

    Que s'est-il passé ?
    Le mécanisme de sécurité HyperFileSQL s'est déclenché lors d'un parcours intégré du fichier 'gsdLaRequete' sur la rubrique ''.
    Fichier <gsdLaRequete> inconnu dans l'analyse <C:\Mes Projets Mobile\Androbook\Androbook_1.wdd>, ou requête ou vue non initialisée.
    Si il s'agit d'une requête, l'exécution de cette requête a peut-être échoué.

    Code erreur : 70018
    Niveau : erreur fatale (EL_FATAL)
    Code erreur WD55 : 18

    Dump de l'erreur du module 'WD170HF.DLL' (17.0.111.5).
    Identifiant des informations détaillées (.err) : 70116
    Informations de débogage :
    IEWDHF=1.1
    Module=<WDHF>
    Version=<17.0.111.5>
    Informations supplémentaires :
    EIT_PATHWDD : <C:\Mes Projets Mobile\Androbook\Androbook_1.wdd>
    EIT_LOGICALTABLENAME : <gsdLaRequete>
    EIT_PILEWL :
    Clic sur BTN_OK1 (FEN_programme.ONG_production.BTN_OK1), ligne 13
    EIT_DATEHEURE : 26/01/2012 16:01:25
    Ce que je ne comprend pas c'est que j'ai enlevé la partie hyperdile citée précédemment et le progremme me donne encore un message d'erreur portant sur le hyperfile.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 136
    Points : 241
    Points
    241
    Par défaut
    Il semblerait que cette erreur ce produise sur la ligne de code POUR TOUT.

    Que renvoie la fonction HExecuteRequeteSQL ? Vrai ou Faux ? Si Faux, que contient retourne alors ErreurInfo() ?

    la variable "gsdLaRequete" est bien déclaré comme "source de données" ?

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    no such table Animal
    donc dès le départ ça ne détecterai pas la table animal ?

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 136
    Points : 241
    Points
    241
    Par défaut
    En effet, il ne trouve pas la table donc la requête ne s’exécute pas.
    Donc en testant le résultat de HExecuteRequeteSQL, ton application ne plante plus... mais il est vrai qu'elle ne te fournit pas le résultat souhaité.

    Je ne connais pas SQLLite mais dans ton fichier "c:\androbook\androbook.db", est-il possible d'avoir plusieurs base ? Dans ce cas ne manquerait-il pas un paramètre à HDecritConnexion pour indiquer quelle base utiliser ?
    Le fichier "c:\androbook\androbook.db" est-il bien accessible en lecture ?

    Au lieu de faire un SELECT, tu peux tenter de faire un "CREATE TABLE" avec un autre nom de table de façon à peut-être voir où est créé cette table.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Apparament ma requête marche le hexecuterequetesql m'a renvoyé vrai.

    J'ai rajouté ceci dans ma procédure de connexion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SI HCréationSiInexistant("*") =Faux ALORS 
    	Erreur("Impossible de créer les fichiers de données", HErreurInfo(hErrMessage))
    	FinProgramme(Vrai)
    FIN
    Il me reste donc un dernier soucis : je n'arrive toujours pas a récupérer le résultat de ma requête. à partir de l'a j'ai envisagé 2 possibilités :

    - ma base serait peut être vide mais le hexecuterequetesql m'aurait renvoyé faux mais j'en suis pas totalement sur.

    - ou alors je m'y prend mal pour récupérer ma valeur. voici mon code :

    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
    CodeSQL est une chaîne = "SELECT * FROM Animal WHERE Numero11Animal= "
     
     
    sCodeSQL = sCodeSQL + SAI_Numero_national
    Info(sCodeSQL)
    SI HExécuteRequêteSQL(gsdLaRequete,hRequêteDéfaut,sCodeSQL)    ALORS
    	Info("ça marche")
    	POUR TOUT gsdLaRequete 
     
    		SAI_Numero_de_lot = gsdLaRequete.numLotAnimal
    		FIN
     
    	SINON
    		Info(ErreurInfo(errComplet))
     
    FIN

    Dans tous les cas je tiens à vous remercier de votre aide car j'ai pas mal avancé grâce à vous.

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 136
    Points : 241
    Points
    241
    Par défaut
    Citation Envoyé par thecam64 Voir le message
    - ma base serait peut être vide mais le hexecuterequetesql m'aurait renvoyé faux mais j'en suis pas totalement sur.
    Non, HExecuteRequeteSQL renvoit vrai même si le résultat de la requête ne contient rien.
    Cette fonction ne renvoit Faux que si la requête n'a pas pu être exécutée (la table Animal n'exist pas par exemple).

    Essaye ta requête sans mettre de Where. Tu auras peut-être ton enregistrement.

    Sinon, tu peux obtenir le nombre d'enregistrement que te retourne ta requête avec HNbEnr

    Après ton HExecuteRequeteSQL, rajoute ces lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HLitPremier(gsdLaRequete) // Nécessaire afin de pouvoir utiliser HNbEnr
    Info("Nb résultat = "+HNbEnr(gsdLaRequete))
    Personnellement, pour lire le résultat de mes requêtes je suis de la veille école et je n'utilise donc pas de POUR TOUT.
    Mon code aurait été le suivant après ton HExecuteRequeteSQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SI HLitPremier(gsdLaRequete) ALORS // Renvoit faux si 0 enregistrement
       SAI_Numero_de_lot = gsdLaRequete.numLotAnimal
    FIN
    HAnnuleDeclaration(gsdLaRequete) // Pour libérer la mémoire
    Où Si le résultat peut contenir plusieurs résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    HLitPremier(gsdLaRequete) ALORS // Renvoit faux si 0 enregistrement
    TANT QUE PAS HEndehors(gsdLaRequete)
       Info(gsdLaRequete.numLotAnimal)
       HLitSuivant(gsdLaRequete) 
    FIN
    HAnnuleDeclaration(gsdLaRequete) // Pour libérer la mémoire

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    J'ai trouvé d'ou venait le problème c'était une erreur d'étourderie le champ numero11animal étant de type texte, j'avais oublié de mettre des quotes dans ma requête quand je voulais le récupérer. merci beaucoup de m'avoir aidé encore une fois et à la prochaine

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation du DumpCléGénerique.MSI pour WindeV Mobile 18
    Par samson dans le forum Windev Mobile
    Réponses: 3
    Dernier message: 04/04/2015, 21h26
  2. Réponses: 11
    Dernier message: 13/03/2013, 00h55
  3. Réponses: 1
    Dernier message: 11/03/2013, 16h45
  4. [Windev Mobile, SQL Server et RPC] Retour d'expérience ?
    Par Penouille dans le forum Windev Mobile
    Réponses: 3
    Dernier message: 20/09/2011, 09h27
  5. Utilisation de SQL-Server comme Windev
    Par willsonlebig dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 23/06/2011, 11h52

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