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

Access Discussion :

projet access ADP: envoyer la selection multiple d'une liste vers une requete


Sujet :

Access

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Points : 19
    Points
    19
    Par défaut projet access ADP: envoyer la selection multiple d'une liste vers une requete
    bonjour à tous, mon problème est le suivant, j'aimerai envoyer laselection que je fait d'une liste à selection multiple vers une procédure stockée ou une view dans un projet ADP. sous access simple le code marche mais sous ADP il ne fonctionne pas.

    je colle au dessous le mail que j'ai envoyer sur un forum américain, en espérant qu'une ame charitable a déjà été confronté à ce problèmé (cela fait une semaine que je ma triture le cerveau)

    "hi.
    first I have a table (Clients) with :
    Numéro (number), Clients (char) as field.

    I got a form with a listbox (Liste1) with column 1 bound to the table (Clients) and a command button that open a query on click :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Commande0_Click()
        If Not PrepareList(Me.Name, Me.Liste1.Name) Then
            MsgBox "impossible de lancer la requête"
        Else
            DoCmd.OpenQuery "requête1"
        End If
    End Sub
    my module contain:
    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
     
    Option Compare Database
    Option Explicit
     
    Dim frm As Form
    Dim ctl As Control
    Dim varItm As Variant
     
    Public Function PrepareList(FormName As String, _
                                ControlName As String) As Boolean
        On Error GoTo Err_PrepareList
        Set frm = Forms(FormName)
        Set ctl = frm(ControlName)
        If ctl.ItemsSelected.Count = 0 Then GoTo Err_PrepareList
        PrepareList = True
        Exit Function
    Err_PrepareList:
        PrepareList = False
    End Function
     
    Public Function CompareList(ParameterValue As Variant) As Boolean
        For Each varItm In ctl.ItemsSelected
            If CStr(ParameterValue) = ctl.ItemData(varItm) Then
                CompareList = True
                Exit Function
            End If
        Next varItm
        CompareList = False
    End Function
    and my query (requête1)got this code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Clients.*
    FROM Clients
    WHERE CompareList([numéro]) = True;
    when I select multiple item item on the list and after I click on yhe button, my selection is vivible on the query.
    with access it works great but with ADP project, it says that ADO cannot read the (Comparelist) function that is written in my module. (as there are no query in ADP, I've tried with a view, function or procedure that I've call with:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Commande0_Click()
        If Not PrepareList(Me.Name, Me.Liste1.Name) Then
            MsgBox "impossible de lancer la requête"
        Else
            DoCmd.OpenView "requête1"
        End If
    End Sub
    for example)

    I hope you've got all the informations.
    thanx's for your help."

    merci à vous

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    Pour ce genre de requête j'envoie mes données dans une table SQL Serveur (code ADO), puis j'exécute une requête avec un INNER JOIN sur mes données.
    Exemple
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Clients.*
    FROM Clients INNER JOIN 
         ClientLookUp ON Clients.[Numéro] = ClientLookUp.[Numéro]
    Au préalable j'ai chargé mes données dans ClientLookUp.[Numéro]

    Bon courage

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    bonsoir Led,
    tout d'abord merci de ta réponse.
    peux tu m'expliquer comment tu fais pour envoyer le résultat de la liste sur une table et si possible à quoi correspond ton Clientslookup.
    mon problème c'est que ce genre de chose sous ADP me sont étrangères mais je dois finir une base pour le boulot et c'est la dernière fonction à implanter. ah si cela avait été que sous access

  4. #4
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    ClientLookup est une table.
    Prenons par exemple une table Clients dont le champ clé est [Code Client] (type texte)
    Je crée une table ClientLookup avec comme champs [Code client] (texte) et Id (texte)

    Voici un exemple de code qui charge dans la table ClientLookup les codes client sélectionnés dans la liste lstClients.
    lstClient liste les clients de la table Clients et la colonne liée est [Code Client]
    Code vb : 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
    Dim oConn As ADODB.Connection
    Dim oRS As ADODB.Recordset
    Dim strID As String, varSel As Variant
     
    strID = Environ("USERNAME")
    Set oConn = CurrentProject.Connection
    Set oRS = New ADODB.Recordset
    oRS.CursorLocation = adUseClient
    oRS.Open "ClientLookup", oConn, adOpenStatic, adLockOptimistic, adCmdTable
     
    oConn.Execute "DELETE FROM ClientLookup WHERE ID='" & strID & "'"
     
    For Each varSel In Me.lstClients.ItemsSelected
        oRS.AddNew
        oRS!Id = strID
        oRS![Code Client] = Me.lstClients.ItemData(varSel)
    Next
    If oRS.EditMode <> adEditNone Then oRS.Update
     
    oRS.Close
    oConn.Close
    Set oRS = Nothing
    Pour différencier les utilisateurs j'associe le code client à l'utilisateur windows (Environ("USERNAME"))
    Dans un premier temps je supprime de la table ClientLookup tout enregistrement dont Id = utilisateur windows en cours.
    Puis je charge les données sélectionnées dans la liste.

    Pour avoir les clients de la table Client en fonction de ma sélection il ne me reste plus qu''à faire une requête
    sur les tables Clients et ClientLookup avec comme critère Id = Utilisateur windows.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Clients.*
    FROM Clients INNER JOIN
         ClientLookup ON Clients.[Code Client] = ClientLookup.[Code Client]
    WHERE ClientLookup.Id='utilisateur'
    ou encore
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Clients.*
    FROM Clients INNER JOIN
         (SELECT [Code Client] FROM ClientLookup WHERE Id='utilisateur') T2 ON Clients.[Code Client] = T2.[Code Client]
    Il reste un problème. Je ne peux pas passer Id en paramètre à une vue (les vues n'ont pas de paramètre)
    ou à une procédure stocké (pas avec DoCmd.OpenStoredProcedure)
    Pour contourner cela, créer un formulaire en mode feuille de données basé sur la table Clients.
    Si ce formulaire s'appelle fmClients
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim strID As String
     
    strID = Environ("USERNAME")
    DoCmd.OpenForm "fmClients", acFormDS, , , , acHidden
    Forms("fmClients").RecordSource = "SELECT Clients.* " & _
         "FROM Clients INNER JOIN " & _
         "(SELECT [Code Client] FROM ClientLookup WHERE Id='" & strID & "') T2 " & _
         "ON Clients.[Code Client] = T2.[Code Client]"
    Forms("fmClients").Visible = True
    Voila comment je procède quand je veux faire des requêtes sur un Serveur en fonctions de valeurs qui sont sur mon PC.
    Je les charge dans une table dédiée à cela.

    En espèrant t'avoir éclairé.
    A+

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    lezep,

    je te remercie c'est exactement ce je recherchais depuis une semaine.
    grace à toi mon cerveau va pouvoir commencer à se refroidir.

    you are a big boss

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

Discussions similaires

  1. Envoyer une impression vers une imprimante réseau sous DOS
    Par atasekpo dans le forum Administration
    Réponses: 3
    Dernier message: 28/06/2010, 15h58
  2. Réponses: 6
    Dernier message: 06/02/2007, 14h18
  3. Réponses: 1
    Dernier message: 29/08/2006, 17h03
  4. Réponses: 1
    Dernier message: 23/07/2006, 22h15
  5. [SERVLET]envoi multiple d'img d'une servlet vers une JApplet
    Par reno.rkcrew dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 17/09/2005, 16h55

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