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 :

Comment créer une requete


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 38
    Points
    38
    Par défaut Comment créer une requete
    Bonjour,

    Quelqu'un pourrait-il m'indiquer comment (d'une maniere tres precise car je debute) creer une requete manuelle (que je voudrais appele qryTemp) me permettant de recuperer les donnees resultantes de la rq sql du vb de mon formulaire de recheche ? SVP Merci

    Voici la portion de code de mon formulaire (frm_Recherche) qui cree :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
       strSql = "SELECT DISTINCTROW " & strTable & ".*"
       strSql = strSql + " FROM " & strTable
       strSql = strSql + " WHERE ((" & strCriteria & "));"
    End If
     
     
        Me.lst_resultat.RowSource = strSql  ' affecte sql a lst_Resultat
        Me.lst_resultat.Requery             ' recalcule la liste
    End Sub
    Merci
    Raphael

  2. #2
    Membre confirmé Avatar de ypicot
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 412
    Points : 579
    Points
    579
    Par défaut
    Solution possible en utilisant ADOX :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Dim cat As New Catalog
        Dim qr As View
     
        cat.ActiveConnection = CurrentProject.Connection
        Set qr = cat.Views("qryTemp")
        qr.Command = strSql
     
        Set cat = Nothing
    Pour cela, il faut cocher le composant ad-hoc (menu outils / références / Microsoft ADO Ext XXX for DLL and sécurity)

    Yvan
    Une solution n'est valable que dans un contexte donné

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 38
    Points
    38
    Par défaut Creation requete puis etat
    Bonjour,

    Merci pour la reponse.

    J'utilise Access d'Office 2003.

    J'ai cocher le composant ad-hoc.


    Mon but est de creer un etat dans lequel apparaitera seulement les enregistrement qui repondent a la recherche effectuee dans frmRechehe et qui y sont affiché dans lstResultat.

    Voici le code de mon formulaire (frmRecherche) contenant maintenant ton code :

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
     
    Option Compare Database
    Option Explicit
     
    Private Sub cbo_champ_AfterUpdate()
    If IsNull(Me.cbo_table) Or IsNull(Me.cbo_champ) Then
       Exit Sub     ' l'un des champs est vide
    End If
     
    ' initialise les étiquettes de l'opérateur
    Me.lbl_Etiq1.Visible = True
    Me.lbl_Etiq2.Visible = True
    Me.lbl_Etiq3.Visible = True
    Me.lbl_Etiq4.Visible = True
    Me.lbl_Etiq5.Visible = True
    Me.opt_Ope1.Visible = True
    Me.opt_Ope2.Visible = True
    Me.opt_Ope3.Visible = True
    Me.opt_Ope4.Visible = True
    Me.opt_Ope5.Visible = True
    Me.txt_critere.Visible = True
     
     
    Select Case lf_GetTypeField(Me.cbo_table, Me.cbo_champ)  ' pour trouver le type du champs
     
     
        Case Is = dbBoolean     ' Booléen
             Me.lbl_TypeChamp.Caption = "Oui/Non"
             Me.lbl_Etiq1.Caption = "Oui"
             Me.lbl_Etiq2.Caption = "Non"
             Me.lbl_Etiq3.Visible = False   ' cache car inusité dans ce cas
             Me.lbl_Etiq4.Visible = False   ' idem
             Me.lbl_Etiq5.Visible = False   ' idem
             Me.opt_Ope3.Visible = False
             Me.opt_Ope4.Visible = False
             Me.opt_Ope5.Visible = False
             Me.txt_critere.Visible = False   ' pas de critere
     
        Case dbByte To dbBinary, dbLongBinary, dbGUID To dbVarBinary, dbNumeric To dbTimeStamp   ' Numériques / date
             Me.lbl_TypeChamp.Caption = "Numérique"
             Me.lbl_Etiq1.Caption = "Etre égale ="
             Me.lbl_Etiq2.Caption = "Etre supérieure >="
             Me.lbl_Etiq3.Caption = "Etre inférieure <="
             Me.lbl_Etiq4.Caption = "Etre différente <>"
             Me.lbl_Etiq5.Visible = False
             Me.opt_Ope5.Visible = False
     
        Case dbText, dbMemo, dbChar ' texte / mémo
             Me.lbl_TypeChamp.Caption = "Texte"
             Me.lbl_Etiq1.Caption = "Etre strictement identique"
             Me.lbl_Etiq2.Caption = "Commencer par la valeur"
             Me.lbl_Etiq3.Caption = "Contenir la valeur"
             Me.lbl_Etiq4.Caption = "Finir par la valeur"
             Me.lbl_Etiq5.Caption = "Pas contenir la valeur"
     
         Case Else
             Me.lbl_TypeChamp.Caption = "Cas non prévu " & lf_GetTypeField(Me.cbo_table, Me.cbo_champ)
     
    End Select
    End Sub
     
    Private Sub cbo_table_AfterUpdate()
    Me.cbo_champ.RowSource = Me.cbo_table.Value
        Me.cbo_champ.Requery
    End Sub
     
    Private Sub cmd_recherche_Click()
    Dim strTable As String, strField As String, strCriteria As String, strSql As String
        Dim Criter As Variant
     
    Dim intTypChamp As Integer
    Dim intOpeChamp As Integer
     
        strTable = Me.cbo_table         ' recupère le nom de la table
        strField = Me.cbo_champ         ' recupère le nom du champ
     
        intTypChamp = lf_GetTypeField(strTable, strField)  ' pour trouver le type du champs ...
    intOpeChamp = Me.opt_Recherche
     
    Select Case intTypChamp
     
           Case dbBoolean                       ' bool
                If intOpeChamp = 1 Then          ' oui
                   strCriteria = strTable & "." & strField & "=-1"
                ElseIf intOpeChamp = 2 Then      ' non
                   strCriteria = strTable & "." & strField & "=0"
                Else
                   strCriteria = strTable & "." & strField & "=Null"
                End If
     
           Case dbByte To dbBinary, dbLongBinary, dbBigInt To dbVarBinary, dbNumeric To dbTimeStamp                  ' traite les numeriques
                strCriteria = Me.txt_critere
                ' traite la virgule si elle existe
                If InStr(1, Me.txt_critere, ",") > 0 Then strCriteria = Replace(Me.txt_critere, ",", ".", 1)
                ' pour les versions antérieure à la 2000
                'If InStr(1, Me.txt_critere, ",") > 0 Then strCriteria = Left(Me.txt_critere, InStr(1, Me.txt_critere, ",") - 1) & "." & Right(Me.txt_critere, InStr(1, Me.txt_critere, ","))
     
                If intTypChamp = dbDate And IsDate(Me.txt_critere) Then strCriteria = "#" & Me.txt_critere & "#"                   ' type champ = date
                ' rajoute les dièses
     
                If Not IsNull(Me.txt_critere) Then
                   Select Case intOpeChamp                    ' numerique, date
                       Case 1 ' =
                            strCriteria = strTable & "." & strField & "=" & strCriteria
     
                       Case 2 ' >=
                            strCriteria = strTable & "." & strField & ">=" & strCriteria
     
                       Case 3 ' <=
                            strCriteria = strTable & "." & strField & "<=" & strCriteria
     
                       Case 4 '<>
                            strCriteria = strTable & "." & strField & "<>" & strCriteria
                   End Select
                End If
     
           Case dbText, dbMemo, dbChar                      ' texte
                Select Case intOpeChamp
                      Case 1 ' strictement egal
                           strCriteria = strTable & "." & strField & " Like """ & Me.txt_critere & """"
                      Case 2 ' commence par
                           strCriteria = strTable & "." & strField & " Like """ & Me.txt_critere & "*"""
                      Case 3 ' contient
                           strCriteria = strTable & "." & strField & " Like ""*" & Me.txt_critere & "*"""
                      Case 4 ' fini par
                           strCriteria = strTable & "." & strField & " Like ""*" & Me.txt_critere & """"
                      Case 5 ' ne contient pas
                           strCriteria = "NOT (" & strTable & "." & strField & " Like ""*" & Me.txt_critere & "*"")"
               End Select
           Case Else
                MsgBox "Cas non prévu."
                Exit Sub
       End Select
        If Me.Opt_RechCourante And Not Len(Me.lst_resultat.RowSource) = 0 Then
       If Not Me.lst_resultat.RowSource Like "*FROM " & strTable & "*" Then
          MsgBox "La recherche précédente ne porte pas sur la même table que la recherche actuelle.", vbExclamation + vbOKOnly, "Erreur"
          Exit Sub
       End If
       strSql = Left(Me.lst_resultat.RowSource, Len(Me.lst_resultat.RowSource) - 3)
       strSql = strSql & " AND " & strCriteria & "));"
    Else
       ' construit la rq sql
       strSql = "SELECT DISTINCTROW " & strTable & ".*"
       strSql = strSql + " FROM " & strTable
       strSql = strSql + " WHERE ((" & strCriteria & "));"
    End If
     
     
        Me.lst_resultat.RowSource = strSql  ' affecte sql a lst_Resultat
        Me.lst_resultat.Requery             ' recalcule la liste
     
        'Creation de la requete qryTemp
     
        Dim cat As New Catalog
        Dim qr As View
     
        cat.ActiveConnection = CurrentProject.Connection
        Set qr = cat.Views("qryTemp")
        qr.Command = strSql
     
        Set cat = Nothing
    End Sub
     
    Private Sub Form_Open(Cancel As Integer)
    ' crée la liste des tables
     If lf_GetTableList() = 0 Then
       MsgBox "Pas de tables dans cette application .", vbInformation + vbOKOnly, "Erreur"
       Cancel = True
    End If
    End Sub
     
    Private Sub lst_resultat_DblClick(Cancel As Integer)
    DoCmd.OpenForm "frmAutoMedias", acNormal, , "[CodMedia]=" & Me.lst_resultat
     
    End Sub
    Quand j'utilise le formulaire, j'ai les enregistrements qui correspondent a la reche qui s'affiche dans lstResultat mais j'ai une fenetre de debogage : Erreur d'execution 3265' : Impossible de trouver l'objet dans la collection correspondant au nom ou a la reference ordinale demande".

    La ligne surlignee est la suivante :
    Set qr = cat.Views("qryTemp")

    Peux tu m'aider ? Que doise-je faire ? SVP Merci

    Raphael

  4. #4
    Membre confirmé Avatar de ypicot
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 412
    Points : 579
    Points
    579
    Par défaut
    Est-ce que la rq qryTemp existe bien (elle doit apparaitre dans la liste des requêtes) ?

    Yvan
    Une solution n'est valable que dans un contexte donné

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 38
    Points
    38
    Par défaut Requete puis etat
    Salut,

    Non elle n'apparait pas dans dans ma liste de requetes de la fenetre base de donnees.

    Raphael

  6. #6
    Membre confirmé Avatar de ypicot
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 412
    Points : 579
    Points
    579
    Par défaut
    Et bien dans ce cas tu la créé (en mettant n'importe quoi dedant).
    C'est cette rq que tu devras utiliser par la suite, car elle contient le "résultat" de ton filtre.

    Yvan
    Une solution n'est valable que dans un contexte donné

  7. #7
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    salut
    Permettez que je comprenne un peu le sujet:
    je voudrais que juste apres cette partie de ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.lst_resultat.RowSource = strSql  ' affecte sql a lst_Resultat 
        Me.lst_resultat.Requery             ' recalcule la liste
    que tu mettes ceci:
    Je voudrais donc savoir si cette reque que tu cherches à recuperer.
    NB:Affiche la fenetre d'execution(Affichage-->Fenetre d'execution)
    @+

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 38
    Points
    38
    Par défaut requete puis etat
    Bonjour,

    Je viens de cree la requete qryTemp (j'ai juste selectionne une de mes tables (par exemple Medias) et je l'ai nomée qryTemp

    Voila ce qui est dedansJ'ai rajouté la partie du code demande. Voila ce qui s'affiche quand j'ai utilise mon formulaire frm_Recherche (en selectionnant dans ce formulaire : la table : Medias ; le champs : Auteur ; la valeur recherchée : h et le critere : doit contenir). Il s'affiche les enregistrement correspondants et dans la fenetre du VB "Execution" : SELECT DISTINCTROW Medias.* FROM Medias WHERE ((Medias.Auteur Like "*h*"));


    J'ai, egalement, la meme fenetre de debogage qui apparait (voir post precedent) et la ligne surlignée est toujours :

    Set qr = cat.Views("qryTemp")

    Pouvez vous m'aider ? Que dois je faire ? SVP Merci
    Merci pour l'aide

    Raphael

  9. #9
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    Raphael39 a ecrit:
    Mon but est de creer un etat dans lequel apparaitera seulement les enregistrement qui repondent a la recherche effectuee dans frmRechehe et qui y sont affiché dans lstResultat.
    Ceci est la requete de ton form:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCTROW Medias.* FROM Medias WHERE ((Medias.Auteur Like "*h*"));
    Pour la mettre sur ton etat tu la mets dans une variable public que tu affectes à la source de ton etat à l'ouverture.
    @+

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 38
    Points
    38
    Par défaut requete puis etat
    Bonjour,

    Oui c'est cela que je veux faire.

    Pourrais-tu me dire comment mettre la requete de mon form dans une variable publique puis creer un etat base sur cette variable publique ?

    Faut-il que je supprime le code et la requete que j'ai cree suite au post de YPicot.

    Merci pour l'aide

    Raphaël

  11. #11
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    Raphael39 a écrit:
    Faut-il que je supprime le code et la requete que j'ai cree suite au post de YPicot.
    Supprimer, non! c'est une voie à explorer et elle sera tres elegante si elle aboutit.
    pour ma soluce:
    1/Dans la fenetre BD:Modules-->Nouveau-->
    [code]Function MesVarPubliques()
    public varqry as string
    End Function
    2/Referme ton module en lui donnant un nom
    3/A l'endroit de ton code où tu as ecrit:
    &#91;code&#93;debug.print strSql&#91;/code&#93;
    tu ecris:
    &#91;code&#93;varqry = strSql&#91;/code&#93;
    3/tu supprime la partie proposée par ypicot
    4/sur l'evenement "sur ouverture" de ton etat tu ecris:
    &#91;code&#93;Me.recordsource=varqry &#91;/code&#93;
    Essai ça pour voir
    @+

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 38
    Points
    38
    Par défaut Requete puis etat
    Salut,

    J'ai cree le module (Module1) dont voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Option Compare Database
    Function MesVarPubliques()
    Public varqry As String
    End Function
    Voici le code du frm_Recherche :

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
     
    Option Compare Database
    Option Explicit
     
    Private Sub cbo_champ_AfterUpdate()
    If IsNull(Me.cbo_table) Or IsNull(Me.cbo_champ) Then
       Exit Sub     ' l'un des champs est vide
    End If
     
    ' initialise les étiquettes de l'opérateur
    Me.lbl_Etiq1.Visible = True
    Me.lbl_Etiq2.Visible = True
    Me.lbl_Etiq3.Visible = True
    Me.lbl_Etiq4.Visible = True
    Me.lbl_Etiq5.Visible = True
    Me.opt_Ope1.Visible = True
    Me.opt_Ope2.Visible = True
    Me.opt_Ope3.Visible = True
    Me.opt_Ope4.Visible = True
    Me.opt_Ope5.Visible = True
    Me.txt_critere.Visible = True
     
     
    Select Case lf_GetTypeField(Me.cbo_table, Me.cbo_champ)  ' pour trouver le type du champs
     
     
        Case Is = dbBoolean     ' Booléen
             Me.lbl_TypeChamp.Caption = "Oui/Non"
             Me.lbl_Etiq1.Caption = "Oui"
             Me.lbl_Etiq2.Caption = "Non"
             Me.lbl_Etiq3.Visible = False   ' cache car inusité dans ce cas
             Me.lbl_Etiq4.Visible = False   ' idem
             Me.lbl_Etiq5.Visible = False   ' idem
             Me.opt_Ope3.Visible = False
             Me.opt_Ope4.Visible = False
             Me.opt_Ope5.Visible = False
             Me.txt_critere.Visible = False   ' pas de critere
     
        Case dbByte To dbBinary, dbLongBinary, dbGUID To dbVarBinary, dbNumeric To dbTimeStamp   ' Numériques / date
             Me.lbl_TypeChamp.Caption = "Numérique"
             Me.lbl_Etiq1.Caption = "Etre égale ="
             Me.lbl_Etiq2.Caption = "Etre supérieure >="
             Me.lbl_Etiq3.Caption = "Etre inférieure <="
             Me.lbl_Etiq4.Caption = "Etre différente <>"
             Me.lbl_Etiq5.Visible = False
             Me.opt_Ope5.Visible = False
     
        Case dbText, dbMemo, dbChar ' texte / mémo
             Me.lbl_TypeChamp.Caption = "Texte"
             Me.lbl_Etiq1.Caption = "Etre strictement identique"
             Me.lbl_Etiq2.Caption = "Commencer par la valeur"
             Me.lbl_Etiq3.Caption = "Contenir la valeur"
             Me.lbl_Etiq4.Caption = "Finir par la valeur"
             Me.lbl_Etiq5.Caption = "Pas contenir la valeur"
     
         Case Else
             Me.lbl_TypeChamp.Caption = "Cas non prévu " & lf_GetTypeField(Me.cbo_table, Me.cbo_champ)
     
    End Select
    End Sub
     
    Private Sub cbo_table_AfterUpdate()
    Me.cbo_champ.RowSource = Me.cbo_table.Value
        Me.cbo_champ.Requery
    End Sub
     
    Private Sub cmd_recherche_Click()
    Dim strTable As String, strField As String, strCriteria As String, strSql As String
        Dim Criter As Variant
     
    Dim intTypChamp As Integer
    Dim intOpeChamp As Integer
     
        strTable = Me.cbo_table         ' recupère le nom de la table
        strField = Me.cbo_champ         ' recupère le nom du champ
     
        intTypChamp = lf_GetTypeField(strTable, strField)  ' pour trouver le type du champs ...
    intOpeChamp = Me.opt_Recherche
     
    Select Case intTypChamp
     
           Case dbBoolean                       ' bool
                If intOpeChamp = 1 Then          ' oui
                   strCriteria = strTable & "." & strField & "=-1"
                ElseIf intOpeChamp = 2 Then      ' non
                   strCriteria = strTable & "." & strField & "=0"
                Else
                   strCriteria = strTable & "." & strField & "=Null"
                End If
     
           Case dbByte To dbBinary, dbLongBinary, dbBigInt To dbVarBinary, dbNumeric To dbTimeStamp                  ' traite les numeriques
                strCriteria = Me.txt_critere
                ' traite la virgule si elle existe
                If InStr(1, Me.txt_critere, ",") > 0 Then strCriteria = Replace(Me.txt_critere, ",", ".", 1)
                ' pour les versions antérieure à la 2000
                'If InStr(1, Me.txt_critere, ",") > 0 Then strCriteria = Left(Me.txt_critere, InStr(1, Me.txt_critere, ",") - 1) & "." & Right(Me.txt_critere, InStr(1, Me.txt_critere, ","))
     
                If intTypChamp = dbDate And IsDate(Me.txt_critere) Then strCriteria = "#" & Me.txt_critere & "#"                   ' type champ = date
                ' rajoute les dièses
     
                If Not IsNull(Me.txt_critere) Then
                   Select Case intOpeChamp                    ' numerique, date
                       Case 1 ' =
                            strCriteria = strTable & "." & strField & "=" & strCriteria
     
                       Case 2 ' >=
                            strCriteria = strTable & "." & strField & ">=" & strCriteria
     
                       Case 3 ' <=
                            strCriteria = strTable & "." & strField & "<=" & strCriteria
     
                       Case 4 '<>
                            strCriteria = strTable & "." & strField & "<>" & strCriteria
                   End Select
                End If
     
           Case dbText, dbMemo, dbChar                      ' texte
                Select Case intOpeChamp
                      Case 1 ' strictement egal
                           strCriteria = strTable & "." & strField & " Like """ & Me.txt_critere & """"
                      Case 2 ' commence par
                           strCriteria = strTable & "." & strField & " Like """ & Me.txt_critere & "*"""
                      Case 3 ' contient
                           strCriteria = strTable & "." & strField & " Like ""*" & Me.txt_critere & "*"""
                      Case 4 ' fini par
                           strCriteria = strTable & "." & strField & " Like ""*" & Me.txt_critere & """"
                      Case 5 ' ne contient pas
                           strCriteria = "NOT (" & strTable & "." & strField & " Like ""*" & Me.txt_critere & "*"")"
               End Select
           Case Else
                MsgBox "Cas non prévu."
                Exit Sub
       End Select
        If Me.Opt_RechCourante And Not Len(Me.lst_resultat.RowSource) = 0 Then
       If Not Me.lst_resultat.RowSource Like "*FROM " & strTable & "*" Then
          MsgBox "La recherche précédente ne porte pas sur la même table que la recherche actuelle.", vbExclamation + vbOKOnly, "Erreur"
          Exit Sub
       End If
       strSql = Left(Me.lst_resultat.RowSource, Len(Me.lst_resultat.RowSource) - 3)
       strSql = strSql & " AND " & strCriteria & "));"
    Else
       ' construit la rq sql
       strSql = "SELECT DISTINCTROW " & strTable & ".*"
       strSql = strSql + " FROM " & strTable
       strSql = strSql + " WHERE ((" & strCriteria & "));"
    End If
     
     
        Me.lst_resultat.RowSource = strSql  ' affecte sql a lst_Resultat
        Me.lst_resultat.Requery             ' recalcule la liste
        varqry = strSql
     
     
    End Sub
     
    Private Sub Form_Open(Cancel As Integer)
    ' crée la liste des tables
     If lf_GetTableList() = 0 Then
       MsgBox "Pas de tables dans cette application .", vbInformation + vbOKOnly, "Erreur"
       Cancel = True
    End If
    End Sub
     
    Private Sub lst_resultat_DblClick(Cancel As Integer)
    DoCmd.OpenForm "frmAutoMedias", acNormal, , "[CodMedia]=" & Me.lst_resultat
     
    End Sub
    J'ai supprine le code de ypicot.
    J'ai cree un etat (avec l'assistant base sur la table Medias) est nome E_Recherche. Sur l'evenement "sur ouverture" j'ai mis le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Option Compare Database
     
    Private Sub Report_Open(Cancel As Integer)
     
    End Sub
    Quand je lance le frm_Recheche j'ai une fenetre VB qui s'ouvre puis une autre qui indique : Erreur de compilation variable non definie et lla igne indiquée est :

    (varqry y etant surligne).

    Que faire ?

    Raphael[/code]

  13. #13
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    Mea culpa
    A la place de ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Option Compare Database 
    Function MesVarPubliques() 
    Public varqry As String 
    End Function
    Fais plutot ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Compare Database 
    Public varqry As String
    Oui, Efface la fonction;tu declares seulement la variable.
    @+

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 38
    Points
    38
    Par défaut Requete puis etat
    Salut,

    Il n'y a plu d'apparition de fenetre de debogage mais l'etat montre tous les enregistrements de la table qui lui a servi pour etre construit et non les seuls qui corespondent a la dite reche.

    Comment faire ?

    Raphael

  15. #15
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    Raphael39 a ecrit:
    J'ai cree un etat (avec l'assistant base sur la table Medias) est nome E_Recherche. Sur l'evenement "sur ouverture" j'ai mis le code :

    Code:

    Option Compare Database

    Private Sub Report_Open(Cancel As Integer)

    End Sub
    Eh bien entre Private Sub R... et End sub ecrit ça:
    Attention ouvres ton form avant ton etat sinon varqry ne contiendra rien.
    Le mieux c'est de créer un bouton sur ton form; par ex Btn
    et sur l'event clic de Btn:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim rpt as new E_Recherche
    Me.Minimize
    rpt.recordsource=varqry 
    rpt.show
    set rpt=nothing
    j'espere que ça marchera
    @+

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 38
    Points
    38
    Par défaut Requete puis etat
    Bonjour, cela marche si je fais une recherche sur la table qui a servi a cree l'etat sinon j'ai une fenetre qui s'ouvre quand on clique sur le bouton (apres avoir obtenu le resultat de la recherche dans lstResultat). Il s'affiche "entre une valeur parametre CodMedia". Faut-il que je modifie ma methode de creation de l'etat ?

    Je ne vois pas ou ajouter ton code pour le bouton. Access m'a cree le code suivant quand j'ai cree le bouton :

    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
     
    Private Sub Btn_Click()
    On Error GoTo Err_Btn_Click
     
        Dim stDocName As String
     
        stDocName = "E_Recherche"
        DoCmd.OpenReport stDocName, acPreview
     
    Exit_Btn_Click:
        Exit Sub
     
    Err_Btn_Click:
        MsgBox Err.Description
        Resume Exit_Btn_Click
     
    End Sub
    Pourrais-tu me dire où mettre ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim rpt as new E_Recherche
    Me.Minimize
    rpt.recordsource=varqry
    rpt.show
    set rpt=nothing
    As-tu recu mon mail et donc ma base. Peut etre pourrais-tu me renvoye cette base avec les modifications ?

    Merci
    Raphaël

  17. #17
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    petite modif:
    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
    Private Sub Btn_Click() 
    On Error GoTo Err_Btn_Click 
     
        Dim stDocName As String 
        me.minimize
        stDocName = "E_Recherche" 
        DoCmd.OpenReport stDocName, acPreview 
     
    Exit_Btn_Click: 
        Exit Sub 
     
    Err_Btn_Click: 
        MsgBox Err.Description 
        Resume Exit_Btn_Click 
     
    End Sub
    sur l'evenement "ouverture" de l'etat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Report_Open(Cancel As Integer) 
        Me.Recordsource=varqry
    End Sub
    tu ouvres ton form puis clic sur Btn
    je vais voir ma boite pour ta bd
    @+

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 38
    Points
    38
    Par défaut Requete puis etat
    salut,

    apres avoir fait tes modification, j'ai lancé le frm_Recherche cela marche jusqu'au clique sur le bouton une fenetre s'ouvre Erreur de compilation membre de methode ou données introuvable

    Private Sub Btn_Click() est sur ligné en jaune
    Minimize est surligné en bleu

    Que faire ?

    Merci

    Raphael

  19. #19
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    escuses moi Raph c'est plutot
    @+

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 38
    Points
    38
    Par défaut Requete puis etat
    Hello,

    Ca marche mais seulement si je fais une recherche sur la table qui a servi pour creer l'etat (par l'intermediaire de l'assistant ETAT).

    Faut-il que je cree autant de boutons et d'etat que de table ou y a t il une solution autre ?

    Merci

    Raphaël

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [reports] comment créer une requete dynamiquement
    Par lifeisgood dans le forum Reports
    Réponses: 4
    Dernier message: 31/01/2007, 12h15
  2. [CR11] comment créer une requete manuelle ?
    Par c_moi_c_moi dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 14/05/2006, 22h35
  3. Comment effacer et créer une requete Access ??
    Par Mustard007 dans le forum Bases de données
    Réponses: 1
    Dernier message: 01/11/2005, 23h15
  4. Réponses: 2
    Dernier message: 03/05/2004, 12h13
  5. Comment créer une Table dans 1 Bdd ACCESS avec Builder??
    Par makandja dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/03/2004, 20h21

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