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

VBA Access Discussion :

Affiche des données sur une listebox à partir d'une requete sql [AC-2003]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut Affiche des données sur une listebox à partir d'une requete sql
    Bonjour,

    J'essaie de créer un code vba qui, a partir d'une requete sql, m'afficherait le resultat dans une listebox.

    je m'explique :
    Dans un formulaire, j'ai :
    - un texte_box
    - un bouton de commande "envoyer"
    - une liste_box

    Dans le texte_box, j'insere un numero de colis. J'appuie ensuite sur le bouton "envoyer" et là je devrais voir apparaitre le resulat de ma requete sql dans la liste box.. mais rien ne s'affiche..

    Je précise que je suis novice en language sql. J'ai donc crée ma requete en mode création puis je l'aie affiché en sql.
    Dans cette requete sql , le numero de colis est une variable VNumerocolis ;
    Deplus, je ne sais pas trop faire la difference entre WHERE ET HAVING.

    Merci de votre aide

    Voici le code sql :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Option Compare Database
    Dim VNumerocolis As Variant
    Dim txt_ChaineSQL As String
    Dim strSQLSELECT As String
    Dim strSQLWHERE As String
    Dim strSQLGROUPBY As String
    Dim strSQLORDERBY As String
    Dim strSQLHAVING As String
     
    Private Sub Cmd_envoyer_Click()
    VNumerocolis = CVar(Texte_Numerocolis.Value)
     
     
    With Me.Listerecirculation
    .RowSourceType = "Table/Requête"
    .ColumnCount = 5 ' nombre de colonne que dois avoir le formulaire intitulé "Listerecirculation"
    .BoundColumn = 1 ' la colonne de reference
     
     
     
    strSQLSELECT = "SELECT T_codecolisQUALITE.numcolis, dbo_vwParts.DisplayName, [table_Affich-general].[Nom Porte principale], [table_Affich-general].DESTINATION, dbo_vwItemData.DischargeEventTime" & _
    " FROM T_codecolisQUALITE INNER JOIN ((dbo_vwItemData INNER JOIN dbo_vwParts ON dbo_vwItemData.DischargePartID = dbo_vwParts.ID) INNER JOIN [table_Affich-general] ON dbo_vwParts.DisplayName = [table_Affich-general].[Chute (format access)]) ON T_codecolisQUALITE.ItemID = dbo_vwItemData.ItemID"
     
     
    strSQLGROUPBY = "GROUP BY T_codecolisQUALITE.numcolis, dbo_vwParts.DisplayName, [table_Affich-general].[Nom Porte principale], [table_Affich-general].DESTINATION"
     
    strSQLHAVING = "HAVING T_codecolisQUALITE.numcolis=" & VNumerocolis & "  AND ((dbo_vwItemData.DischargeEventTime)>=(CVDate(Fix(Now()-(5/24)))+5/24)));"
     
     
     
    'MsgBox VNumerocolis
    'MsgBox strSQLHAVING
     
     
    txt_ChaineSQL = strSQLSELECT & vbCrLf & _
                    strSQLWHERE & vbCrLf & _
                    strSQLGROUPBY & vbCrLf & _
                    strSQLHAVING
     
    'MsgBox txt_ChaineSQL
     
    .RowSource = txt_ChaineSQL
    .Requery
    End With
     
    End Sub

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Il y a une solution bien plus simple et sans presque de code.

    Tu crées ta listbox, puis dans le source de ta listbox tu crée ta requête en mettant comme critere quelque chose qui ressemble à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [forms]![NomTonFormulaire]![NomTonChampClef]
    NomTonChampClef est celui qui alimente VNumerocolis.

    Et tu mets sur l'événement Après MAJ (after update) de NomTonChampClef

    Ceci va forcer la mise à jour des données affichées.

    Note qu'utiliser un sous-formulaire lié au lieu d'une liste peut faire en sorte que tes données s'affichent plus rapidement.

    Pour une de mes applications je suis passé de 60s à 3s pour afficher les mêmes informations.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Salut Marot,

    Le souci, c'est que je souhiterais avoir un texte box dans le formul

  4. #4
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Salut Marot,

    Le souci, c'est que je souhiterais avoir un texte box dans le formulaire où j'inserais le code colis.
    Avec ta soultion si je ne me trompe pas, je n'aie pas la possibilité de rechercher les données à partir d 'un critère mentionné dans le texte box.

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    [forms]![NomTonFormulaire]![NomTonChampClef] se réfère jsustement au contenu de ta textBox.

    Tu peux utiliser n'importe quel contrôle d'un formulaire du moment qu'il affiche l'info dont tu as besoin dans ta requête. Un grand classique est d'utiliser une ComboBox (liste déroulante) pour ce genre de chose.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    marot,

    je t 'assure que je prefere ce systeme de code vba..
    Auparavemment, je fais des liste box issue de table et jamais d'une requete directement.
    J'aimerais savoir pourquoi ma requete sql ne fonctionne pas

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Ok, la méthode la plus simple est de faire exécuter ton code puis quand ton SQL est final, le faire afficher dans la fenêtre d'éxécution immédiate (pour l'afficher taper [ctrl][g], puis print txt_ChaineSQL.

    Après tu sélectionne le SQL et tu le copie.
    Tu ouvre une nouvelle requête Access, tu passe en mode d'affichage "SQL" et tu colle le SQL.
    Tu demande d'exécuter ta requête.
    Après selon le résultat tu modfie tes critères ou tes jointures.
    Une fois que la requête donne le resultat attendu tu mets le SQL dans le code.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  8. #8
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    la je nage en eau trouble...
    il me faudrait un coup de main...

  9. #9
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    J'ai trouve dans ce forum une discussion de tee_grandbois sur les zone de selection multiples sur access.
    Je me demandais si je pouvais m'en inspirer ??

  10. #10
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Marot,
    J'ai crée une liste_box dans mon formulaire.
    Mais je m'apercois que je ne peux pas y inscrire les numeros de colis.

  11. #11
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Bonjour marot,
    Lorsque tu ecris
    il faut utiliser une listbox à sélection multiple
    ,faut il que je puisse ecrire dans cette liste box les codes colis. Et ce n'est pas le cas.
    je suis perdu..

  12. #12
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    On ne peut pas simplement écrire dans une listBox.

    La listBox à sélection multiple affiche une liste de valeur et l'utilisateur peut en choisir plusieurs parmis celles-ci.

    Si tu veux une liste comme tu le décris, je procéderai ainsi :
    avoir un textBox (ou une comboBox) qui permet à l'utilisateur de saisir le numéro de colis.
    Du code qui ajoute le numéro choisi à la liste.

    Bon ça c'est la solution lourde :-).

    Une solution plus légère consiste à avoir une table temporaire

    Table TemporaireClient
    NumColis

    où on enregistre les numéros de colis et un sous-formulaire basé sur cette table.

    Ensuite on utilise cette table comme source de données avec une jointure par exemple.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

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

Discussions similaires

  1. Afficher des données sur une date à venir
    Par Martial2 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 29/05/2014, 21h42
  2. Charger des données dans un GridPanel à partir d'une DB
    Par Erwan62 dans le forum Ext JS / Sencha
    Réponses: 4
    Dernier message: 15/05/2009, 16h27
  3. Réponses: 1
    Dernier message: 19/04/2008, 16h26
  4. Réponses: 3
    Dernier message: 28/01/2007, 19h25
  5. Afficher des données dans un datagrid à partir d'une base de données MySQL
    Par General_Garrisson dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 13/07/2006, 15h14

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