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

IHM Discussion :

SQL comme source de contrôle d'une zone de texte


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 116
    Points : 52
    Points
    52
    Par défaut SQL comme source de contrôle d'une zone de texte
    Bonjour,

    Je cherche le moyen de mettre le résultat d'un SELECT SQL dans une zone de texte.

    J'ai essayé en mettant la requête SQL dans la source de contrôle (ControlSource) de la zone de texte (TextBox) mais cela ne fonctionne pas.
    Pourtant, dans la doc d'Access, pour la propriété ControlSource il est dit que "Le contrôle est dépendant d'un champ d'une table, d'une requête ou d'une instruction SQL."

    Quelqu'un aurait-il des explications ou une autre idée ?

    Merci d'avance.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 353
    Points : 23 819
    Points
    23 819
    Par défaut
    On ne peut simplement pas le faire directement.

    Tu peux par contre utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DFirst("NomChamp","NomSource","Critere")
    qui va te retourner la 1ere valeur trouvée pour le champ NomChamp dans une table ou une requête NomSource selon le critère contenu dans critere. Cette fonction retourne Null si aucun enregistrement ne correspond.

    A+

  3. #3
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 86
    Points : 77
    Points
    77
    Par défaut
    Seconde solution, passer par du code VBA, à insérer dans un module et à mettre dans la propriété "onclick" d'un commandbutton par exemple

    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
     
    Public Function afficher_texte()
     
    Dim db as DAO.databse
    Dim rst as DAO.recordset
     
    Set db = currentdb()
    Set rst = db.openrecordset("Ta requête SQL")
     
    Forms("Ton Formulaire").Controls("Ton Textbox").Value = Chr(34) & rst.Fields(x).Value & Chr(34)   'Chr(34) si tu affiches du texte
     
    rst.Close
     
    Set rst = Nothing
     
    End Function

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour à tous
    Et si ta requête te retourne plusieurs enregistrements, tu peux lire ceci:
    http://jdgayot.developpez.com/tutori...ultats-labels/

    Avec toutes les réponses que tu as eu, tu dois pouvoir y arriver.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 116
    Points : 52
    Points
    52
    Par défaut
    Merci pour vos réponses.

    La solution par les domain aggregate functions (ex. DFirst) est assez simple, mais est-ce qu'on peut mettre dans le second paramètre une requête SQL sur plusieurs tables avec p.ex. des outer joins ? Je pensais que la fonction ne marche que sur une table.

    La solution en passant par l'intermédiaire d'un recordset est ce que je veux contourner : c'est lourd !

    Je ne vois pas pourquoi mettre une donnée dans zone de texte par une requête SQL n'est pas possible alors que c'est possible avec une liste déroulante par :
    Origine source : table/requête
    Contenu : (la requête SQL)

    Y aurait-il un autre objet qu'une zone de texte ou un autre moyen pour afficher dans une zone une valeur unique résultat d'une requête sur plusieurs tables ?

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 353
    Points : 23 819
    Points
    23 819
    Par défaut
    Non, tu ne peux pas mettre de SQL dans le DFirst mais tu peux mettre le nom d'une requête.

    Pour la source de zone de texte SQL, écrit à Bill GATES pour te plaindre :-). J'imagine que c'est parce que Access a toujours fait tout ce qu'il pouvait pour masquer le SQL dérière une interface.

    Tu pourrais peut-être utiliser une zone de liste à une seule ligne cela devrait sensiblement donner le même résultat qu'une zone de texte monoligne.

    A+

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 116
    Points : 52
    Points
    52
    Par défaut
    Merci.
    Oui, une zone de liste à la place d'une zone de texte. Je l'ai déjà fait, mais ce n'est pas idéal surtout quand l'utilisateur va cliquer dessus.
    Merci à tous pour vos réponses.

  8. #8
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour

    En partant du principe indiqué par GAYOT, mais sans utiliser les recordset, voici ce que je ferais.

    Une liste avec comme source le code sql. Cette liste est invisible.
    Un controle texte à qui on affecte la valeur de la liste.

    Quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.Modifiable1 = Me.Modifiable1.ItemData(0)
    Me.Texte3 = Me.Modifiable1
    Pierre

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour à tous
    Tous les moyens sont bons, mais la solution par Recordset n'est pas si lourde que celà, surtout si tu es certain que ta requête te renvoie un enregistrement unique.
    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
      Dim oDb As DAO.Database
        Dim oRst As DAO.Recordset
        Dim Result As Variant 'j'ai mis Variant car je ne connais pas le type de tes données
        Set oDb = CurrentDb
        Set oRst = oDb.openRecordSet("SELECT XXXXXX" & _
                                     "FROM Tbl_YYYY ", dbOpenSnapshot)
     
       If oRst.EOF Then
       MsgBox "Pas d'enregistrements"
       Else
       Result = oRst.Fields(0) 'renvoie la valeur de la première colonne de la ligne1
       Me.Txt_NomDeTaZone.ControlSource = "=" & Result
       End If
       oDb.Close
       Set oDb = Nothing
       Set oRst = Nothing
    A adapter, mais je n'ai pas l'impression que se soit si compliqué.
    Cela rejoint en grande partie le code de Glherbier.
    Mais les autres méthodes fonctionnent également.
    Donc à toi de voir...

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 116
    Points : 52
    Points
    52
    Par défaut
    Merci Pierre pour ton astuce. Le passage par l'intermédiaire d'une zone de liste reste toutefois une méthode indirecte.

    Merci aussi à toi GAYOT. Pas si lourd ? Plus lourd quand même que :

    Me.MaZoneTexte.ControlSource.sql = "SELECT ..."

    Une seule ligne, et pas de risque de bloquer des ressources.
    J'invente le .sql mais il est là pour des raisons évidentes.

    D'après la doc, on aurait pu s'attendre à ce que ce soit possible : "Le contrôle est dépendant d'un champ d'une table, d'une requête ou d'une instruction SQL."

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 116
    Points : 52
    Points
    52
    Par défaut
    Je vais créer une fonction du genre :

    Function ResultFromSQL(RequeteSQL as string) as Variant

    pour s'occuper de la cuisine avec le recordset.

    Ainsi je pourrai arriver au même résultat, mais en passant par du code VBA pour mettre le résultat de la requête dans la zone de texte :

    Me.MyZoneTexte = ResultFromSQL("Select ...")

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

Discussions similaires

  1. SQL comme source de contrôle d'une zone de texte
    Par voxov dans le forum VBA Access
    Réponses: 0
    Dernier message: 21/12/2010, 13h04
  2. Réponses: 12
    Dernier message: 03/12/2007, 19h41
  3. Source d'enregistrement d'une zone de texte dans un état
    Par beabzh dans le forum VBA Access
    Réponses: 4
    Dernier message: 30/07/2007, 12h22
  4. Réponses: 2
    Dernier message: 22/06/2007, 12h11

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