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 :

Utilisation judicieuse de HDéclareExterne() [WD15]


Sujet :

WinDev

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 161
    Points : 221
    Points
    221
    Par défaut Utilisation judicieuse de HDéclareExterne()
    Hello à tous !

    J'ai quelques problèmes de compréhension du fonctionnement de HDéclareExterne()... Ou du moins la suite.

    Attaquons !

    Voici le code en l'état actuel des choses :
    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
    //Connexion à la base distance
    Requetes est une Connexion
     
    // Paramètres de la connexion
    Requetes..Provider = hAccèsHFClientServeur
    Requetes..Utilisateur = "admin"
    Requetes..MotDePasse = ""
    Requetes..Serveur = "<.....>"
    Requetes..BaseDeDonnées = "<.....>"
    Requetes..Cryptage = hCryptageNon
     
    //Déclaration externe du fichier Contacts pour pouvoir le manipuler
    MesContacts est une Source de Données
     
    SI PAS HOuvreConnexion(Requetes) ALORS
    	Trace(HErreurInfo())
    FIN
     
    SI PAS HDéclareExterne("CONTACTS.fic",MesContacts,Requetes) ALORS
    	Trace(HErreurInfo())
    FIN
    Ok jusque là, ça va plutôt bien.

    En faisant un bête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    HLitPremier(MesContacts)
    SI HTrouve()
    Trace(MesContacts.AdresseEmail)
    FIN
    Tip top ! ça fonctionne ! Youpi ! Tralala !

    Et là.......... c'est le drame.

    J'essaye d'isoler une enregistrement. Dans le cas présent, je désire vérifier 2 paramètres qui se traduisent par un AND en SQL..

    Essai n° 1 :

    HFiltre(MesContacts,"NoCLIENT = '"<Truc>"' ET Initiales = '"+<Machin>+"'")

    Windev me répond (assez sèchement d'ailleurs)

    Erreur à la ligne 66 du traitement Procédure globale PrepareMail.
    Vous avez appelé la fonction HFiltre.
    Il n'existe pas de rubrique <NoCLIENT='' ET INitialesSMS = 'GEM> dans le fichier <MesContacts>.

    Essai n°2 :

    Dans le désespoir, un HExécuteRequêteSQL... pas mieux, un gros message d'erreur

    Essai n°3 :
    HLitRecherche(). alors oui, super, mais je n'ai qu'un seul de mes deux paramètres à vérifier.

    Je pensais qu'une variable de type source de données était une sorte d'"Image" des enregistrements qu'on donne et sur laquelle on pouvait faire n'importe quelle interrogation "standard"....


    Des pistes?

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Bonjour,

    Essai n°1, d'après l'aide :
    Après l'exécution de la fonction HFiltre, le parcours du fichier doit obligatoirement être effectué sur la rubrique renvoyée par la fonction HFiltre. Si une autre rubrique est utilisée pour le parcours du fichier, le filtre ne sera pas pris en compte.
    Sachant que je n'utilise jamais HFiltre.

    Essai n°2 :

    Il serait bon de préciser les messages, sinon pas d'aide possible

    Essai n°3 :

    Voir HLitRecherche dans l'aide, section "Recherche sur une clé composée"

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 161
    Points : 221
    Points
    221
    Par défaut
    Oulah, je déleste déjà, je viens de trouver la solution.

    En l'occurrence j'ai opté pour la solution de requête SQL. J'ai dû créer une autre Source de Données différente que celle utilisée dans le HDéclareExterne() et cela fonctionne (pour l'instant).


  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2002
    Messages : 899
    Points : 1 100
    Points
    1 100
    Par défaut
    Heu, bêtement, tu as essayé en mettant AND à la place de ET ?
    (perso j'écris toujours mes HFiltres comme des where de SQL)

    de plus, je suppose que c'est une faute de frappe, mais si le poste répond bien
    <NoCLIENT='' ET INitialesSMS = 'GEM>
    alors il te manques un apostrophe, le moteur ne peut donc pas comprendre la requête qu'il reçoit.
    EDIT :
    Je viens de tester chez moi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    LOCAL
    	Article			est une Source de Données
    	sCleFiltre		est une chaîne
    	sCleFiltre = HFiltre(Article, "Article_Cle LIKE 'A5%' AND Article_Valide_ID = 0")
    	SI sCleFiltre <> "" _ET_ HLitPremier(Article, sCleFiltre) ALORS 
    		BOUCLE
    			Trace(Article.Article_Cle)
    		A FAIRE TANTQUE HLitSuivant(Article, sCleFiltre)
    	FIN
    ça marche parfaitement

  5. #5
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juin 2008
    Messages : 122
    Points : 124
    Points
    124
    Par défaut
    Bonjour,


    D'accord Avec Bowen pour le AND.
    Et les + pour la première condition,

    "NoCLIENT = '"<Truc>"'
    "NoCLIENT = '"+<Truc>+"'

    C'est un détail mais bon...

    Par contre c'est possible dans ta table que <Truc> soit vide?

    N_Ron


    PS : SORRY ... pas vu le Résolu!!

  6. #6
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 161
    Points : 221
    Points
    221
    Par défaut
    Hello à tous !

    Absolument pas et c'est bien là le problème. Quant à l'apostrophe, j'ai viré le code maintenant mais je ne crois pas (ou n'espère) pas avoir fait cette erreur

    Je note pour mes prochains HFiltre de penser en SQL pur et dur !

    J'ai toutefois opté pour une autre solution (qui fonctionne ma foi extrêmement bien) :

    Je fais mon HDéclareExterne(), puis attaque la source de données avec un bon vieux HExécuteRequêteSQL(). Ca fonctionne


    Amicalement

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

Discussions similaires

  1. Utilisation judicieuse du design pattern Factory
    Par Agoudard dans le forum C++
    Réponses: 12
    Dernier message: 17/01/2011, 22h37
  2. utilisation judicieuse des vertex/pixel shader....
    Par conrad dans le forum DirectX
    Réponses: 8
    Dernier message: 03/03/2006, 11h59
  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