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

Requêtes et SQL. Discussion :

[Requête] Requête ajout dont les données proviennent d'une liste à sélection multiple


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 29
    Points : 22
    Points
    22
    Par défaut [Requête] Requête ajout dont les données proviennent d'une liste à sélection multiple
    Bonjour,


    Je suis sous access 2000

    J'ai un formulaire avec 24 combobox pour pouvoir sélectionner des pays recepteurs d'uns assistance technique, il est aussi possible de sélectionner l'ensemble des pays membres de l'onu comme recepteur via une tickbox qui sélectionne toutes les valeurs d'une list box.

    J'ai fait une requete pour aditionner les pays sélectionnés dans un table country_beneficiary_mission.

    mais lorsque je la fait tourner je recois le message "runtime error 424 'object required' ".

    je n'y comprends plus rien. Si quelquún peut m'aider ce serait avec plaisir.

    Voici le code mis en place.

    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
    47
    48
    49
    'On Error GoTo err_Continue_Click
        Dim db As Database, qry As QueryDef, qryName As String, errCause As String
        Dim sql As String
        Dim stdocname As String
        Set db = CurrentDb
        errCause = "owen"
        qryName = "Q_append_country_to_mission"
        stdocname1 = "F_enter_participant"
        stdocname2 = "F_enter_country"
     
        sql = "INSERT INTO Country_beneficiary_mission ( Country_code, Mission_key )" _
            & " SELECT Country.Country_code, Last(Mission.Mission_key) AS LastOfMission_key" _
            & " FROM Country, Mission" _
            & " GROUP BY Country.Country_code" _
            & " HAVING (Country.Country_code)=" & Chr(34) & chkTrim(Me.Combo2) & Chr(34) _
            & " Or (Country.Country_code)=" & Chr(34) & chkTrim(Me.Combo4) _
            & " Or (Country.Country_code)=" & Chr(34) & chkTrim(Me.Combo6) _
            & " Or (Country.Country_code)=" & Chr(34) & chkTrim(Me.Combo8) Or (Country.Country_code) = " & Chr(34) & chkTrim(Me.Combo10) Or (Country.Country_code)=" & Chr(34) & chkTrim(Me.Combo12) _
     
            sql = sql & " Or (Country.Country_code)=" & Chr(34) & chkTrim(Me.Combo14) & Chr(13) & Chr(10) _
                        & " Or (Country.Country_code)=" & Chr(34) & chkTrim(Me.Combo16) & Chr(13) & Chr(10) _
                        & " Or (Country.Country_code" & Chr(34) & chkTrim(Me.Combo18) & Chr(13) & Chr(10) _
                        & " Or (Country.Country_code)=" & Chr(34) & chkTrim(Me.Combo20) & Chr(13) & Chr(10) _
                        & " Or (Country.Country_code)=" & Chr(34) & chkTrim(Me.Combo22) & Chr(13) & Chr(10) _
                        & " Or (Country.Country_code)=" & Chr(34) & chkTrim(Me.Combo24) & Chr(13) & Chr(10)
            sql = sql & " Or (Country.Country_code)=" & Chr(34) & chkTrim(Me.Combo26) Or (Country.Country_code) = " & Chr(34) & chkTrim(Me.Combo28) Or (Country.Country_code)=" & Chr(34) & chkTrim(Me.Combo30) Or (Country.Country_code) = " & Chr(34) & chkTrim(Me.Combo32) & Chr(13) & Chr(10)" _
                & " Or (Country.Country_code)=" & Chr(34) & chkTrim(Me.Combo34) Or (Country.Country_code) = " & Chr(34) & chkTrim(Me.Combo36) Or (Country.Country_code) = " & Chr(34) & chkTrim(Me.Combo38) Or (Country.Country_code) = " & Chr(34) & chkTrim(Me.Combo40) & Chr(13) & Chr(10)" _
                & " Or (Country.Country_code)=" & Chr(34) & chkTrim(Me.Combo42) Or (Country.Country_code) = " & Chr(34) & chkTrim(Me.Combo44) Or (Country.Country_code)=" & Chr(34) & chkTrim(Me.Combo46) Or (Country.Country_code) = " & Chr(34) & chkTrim(Me.Combo48)"
     
     
        Dim itm As Variant
        For Each itm In Me.Lstcountry.ItemsSelected
            sql = sql & " Or (Country.Country_code)=" & Chr(34) & Me.Lstcountry.ItemData(itm) & Chr(34)
        Next itm
        sql = sql & ";"
        Debug.Print sql
        Set qry = db.CreateQueryDef("", sql)
        qry.Execute dbFailOnError
        ' DoCmd.SetWarnings warningsoff
        ' DoCmd.OpenQuery qryName
        ' DoCmd.SetWarnings warningson
        DoCmd.Close acForm, stdocname2, acSaveYes
        DoCmd.OpenForm stdocname1, acNormal
    exit_Continue_Click:
        Exit Sub
    err_Continue_Click:
        MsgBox Err.Number & Err.Description
        Resume exit_Continue_Click
    End Sub
    chktrim est un module dont voici le code mais a priori il fonctionne.

    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
    Function chkTrim(MyData As Variant) As Variant
    On Error GoTo err_chktrim
    Dim myString As Variant
                Select Case VarType(MyData)
                    Case vbDate
                       myString = DateOrd(MyData) & Chr(32) _
                            & MonthDisplay(MyData) & Chr(32) _
                            & YearDisplay(MyData)
                    Case vbString
     
                       myString = Trim(MyData)
                    Case vbDouble
                       myString = Trim(str(MyData))
                    Case vbLong
                        myString = Trim(str(MyData))
                    Case vbInteger
                        myString = Trim(str(MyData))
                    Case vbSingle
                        myString = Trim(str(MyData))
                    Case vbObject
                        Set myString = MyData
     
                    Case vbBoolean
                        If MyData = True Then
                           myString = "Yes"
                        End If
                        If MyData = False Then
                          myString = "No"
                        End If
                    Case vbNull
                      myString = ""
                    Case Else
                       myString = ""
                    End Select
    chkTrim = myString
    exit_chktrim:
        Exit Function
    err_chktrim:
        MsgBox "Function_chkTrim_" _
            & Err.Number & Err.Description
            Resume exit_chktrim
    End Function
    Je me prends la tete la dessus depuis le début de la journée si quelquún peut m'aider je serais vraiment reconnaissant et je chanterai des chansons.

    Merci d'avance

  2. #2
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 316
    Points : 367
    Points
    367
    Par défaut
    Bonjour,

    Pourquoi La table Mission est utilisée ?
    Pourquoi ne pas faire un Where au lieu de Having?

    A+

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 29
    Points : 22
    Points
    22
    Par défaut
    Bonjour,


    Je récupére le code mission_key de la table mission pour identifier les pays béneficiaires de telle mission.

    Si l'on utilise where au lieu de having aprés essai ca ne change rien.

    merci

  4. #4
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 316
    Points : 367
    Points
    367
    Par défaut
    Bonjour,

    Quelle est la relation entre les tables Country et Mission?
    il n'existe pas de jointure entre-elles?

    A+

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 29
    Points : 22
    Points
    22
    Par défaut
    En fait je peux avoir plusieurs pays pour une missionet plusiseurs missions pour un pays. J'ai donc une relaton "many to many". Pour la gérer j'ai créer une table "Country_beneficiary_mission" qui fait l'interface entre Mission et Country et ki contient le Mission_key et le Country_code.

    voila

  6. #6
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 316
    Points : 367
    Points
    367
    Par défaut
    Bonjour,

    Essaie d'abord ceci sans les conditions piur voir s'il ya un message d'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sql = "INSERT INTO Country_beneficiary_mission ( Country_code, Mission_key )" _
            & " SELECT Country.Country_code, Last(Mission.Mission_key) AS LastOfMission_key" _
            & " FROM Country, Mission" _
            & " GROUP BY Country.Country_code" _
    A+

  7. #7
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    bjr,

    mais lorsque je la fait tourner je recois le message "runtime error 424 'object required' ".
    Sur quelle ligne de code?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 29
    Points : 22
    Points
    22
    Par défaut
    dsl de ne pas avoir repondu avant mais je suis vraiment en spped. Je cours de réunion en meeting toute la journée.

    Je n ai pas eu le temps de tester le code de Soltani. Je le ferais ce soir.
    Sinin Arkham c'est pas sur une ligne mais sur le bloc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     sql = "INSERT INTO Country_beneficiary_mission ( Country_code, Mission_key )" _
            & " SELECT Country.Country_code, Last(Mission.Mission_key) AS LastOfMission_key" _
            & " FROM Country, Mission" _
            & " GROUP BY Country.Country_code" _
            & " HAVING (Country.Country_code)=" & Chr(34) & chkTrim(Me.Combo2) & Chr(34) _
            & " Or (Country.Country_code)=" & Chr(34) & chkTrim(Me.Combo4) _
            & " Or (Country.Country_code)=" & Chr(34) & chkTrim(Me.Combo6) _
            & " Or (Country.Country_code)=" & Chr(34) & chkTrim(Me.Combo8) Or (Country.Country_code) = " & Chr(34) & chkTrim(Me.Combo10) Or (Country.Country_code)=" & Chr(34) & chkTrim(Me.Combo12) _
    j espere que ca va etre utile.

    Cela dit je suis en train de me demander si je ne vais pas choisir une autre solution technique. (un continuous form fondé sur une table Country_temp avec une combobox qui a comme row source les codes et nom des pays) et avec une append query de Country_temp vers Country_benef et une delete query pour raz la table country_temp après utilisation)

    Voila


    merci

  9. #9
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781

  10. #10
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    y a un _ en trop à la fin du bloc ....

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 29
    Points : 22
    Points
    22
    Par défaut
    j ai enlevé le _ de trop mais ca ne change rien

    pour le debug print.sql c est juste pour avoir le message d'erreur.

  12. #12
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    bjr,

    A mon avis : manque de rigeur
    - l'indentation du code est aléatoire
    - les retours à la lignes aussi
    - les opérateurs de concatenation & et les guillemets encadrant les chaines de caractères sont parfois mal positionnés (c'est ça qui plante je pense)

    En alignant le code de manière rigoureuse c'est beaucoup plus facile à déboguer

  13. #13
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    Tout à fait d'accord avec Arkham46.

    lors que je vois un formulaire avec 24 listes box pour choisir des pays cela me parait très confu et surtout pas du tout ergonomique.

    Je te proposerais de faire un formulaire avec 2 zones de listes dans lesquelles tu peux basculer des pays. ensuite tu peux facilement creer ta requête sql en chargeant une clause Where .... in (liste des pays)

    Ce sera mieux gérable pour toi. dans la FAQ il existe un code pour crée ces listes je te mets un exemple en image (ici avec des adresses)
    Images attachées Images attachées  

Discussions similaires

  1. Ajout de Node a partir d'objet contenant une liste d'objet
    Par Al_Bundy dans le forum Windows Forms
    Réponses: 4
    Dernier message: 05/08/2008, 14h35
  2. Réponses: 2
    Dernier message: 04/03/2008, 11h32
  3. Réponses: 4
    Dernier message: 14/01/2008, 00h15
  4. Réponses: 1
    Dernier message: 01/09/2006, 20h13
  5. Réponses: 2
    Dernier message: 16/05/2006, 10h52

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