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

Runtime Discussion :

Formulaire Recherche MultiCritère et RunTime


Sujet :

Runtime

  1. #1
    Membre régulier Avatar de fbu78
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 79
    Points
    79
    Par défaut Formulaire Recherche MultiCritère et RunTime
    Bonjour,

    En suivant le tuto de Cafeine, j'ai crée un formulaire de recherche multi-critère sur une base de données construites avec ACCESS 2002 et prévue pour fonctionner avec des utilisateurs ayant le RunTime 2002.

    Tout se passe bien avec ceux qui ont la version complète d'ACCESS mais ceux qui ont le runtime sont carrément jeté de l'appli avec le message "Cette application a été arrêté à cause d'une erreur d'exécution...Elle ne peut pas continuer et va être fermée."

    Le problème survient lorsque les utilisateurs RunTime clique sur la case chkDate1 pour pouvoir préciser une date.

    Voici le code employé, directement adapté du tuto (Merci beaucoup d'ailleurs) :
    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
    ==============================================
    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWHERE As String
     
    SQL = "SELECT Compteur, DateJournée, UARIBCOMPTE, NumOperation, Nom, TypeOP, Montant, Sens, CommentaireCRQ, NumDossierLAB FROM Tab_Comptes WHERE Tab_Comptes!Compteur <> 0"
     
    If Not Me.chkTypeOp Then
    SQL = SQL & "And Tab_Comptes!TypeOP = '" & Me.cmbRechType & "' "
    End If
     
    If Not Me.chkMontant Then
    SQL = SQL & "And Tab_Comptes!Montant = " & Me.cmbRechMontant & ""
    End If
     
    If Not Me.chkNomClient Then
    SQL = SQL & "And Tab_Comptes!NOM like '*" & Me.txtNomClient & "*' "
    End If
     
    If Not Me.chkDate1 Then
    SQL = SQL & "And Tab_Comptes!DateJournée =#" & Format(Me.txtDate1, "mm/dd/yyyy") & "#"
    End If
     
    If Not Me.chkDate2 Then
    SQL = SQL & "WHERE (((Tab_Comptes.DateJournée) Between #" & Format(Me.txtDate1, "mm/dd/yyyy") & "#" And "#" & Format(Me.txtDate2, "mm/dd/yyyy") & "#"""
    End If
     
    SQLWHERE = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
    SQL = SQL & ";"
     
     
    Me.lblStats.Caption = DCount("*", "Tab_Comptes", SQLWHERE) & " / " & DCount("*", "Tab_Comptes")
    Me.lstResults.RowSource = SQL
    Me.lstResults.Requery
     
    End Sub
    ---------------------------------------------------------------------------------------------------------------
    Private Sub chkDate1_Click()
     
    Me.txtDate1.Visible = Not Me.txtDate1.Visible
    SendKeys "{Tab}"
    If txtDate1 = "" Then
    End
    Else
    RefreshQuery
    End If
    End Sub
    ----------------------------------------------------------------------------------------------------------------
    Private Sub chkDate2_Click()
     
    Me.txtDate2.Visible = Not Me.txtDate2.Visible
    RefreshQuery
     
    End Sub
    ----------------------------------------------------------------------------------------------------------------
    Private Sub chkMontant_Click()
     
    Me.cmbRechMontant.Visible = Not Me.cmbRechMontant.Visible
    SendKeys "{Tab}"
    cmbRechMontant = "0"
    RefreshQuery
     
    End Sub
    ----------------------------------------------------------------------------------------------------------------
    Private Sub chkNomClient_Click()
     
    Me.txtNomClient.Visible = Not Me.txtNomClient.Visible
    txtNomClient.Value = ""
    SendKeys "{Tab}"
    RefreshQuery
     
    End Sub
    ----------------------------------------------------------------------------------------------------------------
    Private Sub chkTypeOp_Click()
     
    Me.cmbRechType.Visible = Not Me.cmbRechType.Visible
    cmbRechType.Value = ""
    SendKeys "{Tab}"
     
    RefreshQuery
     
    End Sub
    ----------------------------------------------------------------------------------------------------------------
    Private Sub cmbRechType_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
    ----------------------------------------------------------------------------------------------------------------
    Private Sub Form_Load()
    Dim ctl As Control
     
    For Each ctl In Me.Controls
        Select Case Left(ctl.Name, 3)
            Case "chk"
                ctl.Value = -1
     
            Case "lbl"
                ctl.Caption = "- * - * -"
     
            Case "txt"
                ctl.Visible = False
                ctl.Value = ""
     
            Case "cmb"
                ctl.Visible = False
     
        End Select
    Next ctl
     
    Me.lstResults.RowSource = "SELECT Compteur, DateJournée, UARIBCOMPTE, NumOperation, NOM, TypeOp, Montant, Sens, CommentaireCRQ, NumDossierLAB FROM Tab_Comptes;"
    Me.lstResults.Requery
     
    End Sub
    ----------------------------------------------------------------------------------------------------------------
    Private Sub lstResults_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
    ----------------------------------------------------------------------------------------------------------------
    Private Sub lstResults_DblClick(Cancel As Integer)
    DoCmd.OpenForm "F_AutoTab_Comptes", acNormal, , "[Compteur]=" & Me.lstResults
    End Sub
    ----------------------------------------------------------------------------------------------------------------
     
    Private Sub txtDate1_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
    ----------------------------------------------------------------------------------------------------------------
    Private Sub txtDate2_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
    ----------------------------------------------------------------------------------------------------------------
    Private Sub cmbRechMontant_AfterUpdate()
    RefreshQuery
    End Sub
    ----------------------------------------------------------------------------------------------------------------
    Private Sub txtMontant_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
    ----------------------------------------------------------------------------------------------------------------
    Private Sub txtNomClient_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
    ----------------------------------------------
    SI quelqu'un a une idée, elle est la bienvenue, car tous les autres contrôles fonctionnent très bien.
    Merci

    edit : cafeine, merci d'utiliser les balises code

  2. #2
    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
    Par défaut
    Hello,

    quelques étonnements sur ton adaptation du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If Not Me.chkDate1 Then
    SQL = SQL & "And Tab_Comptes!DateJournée =#" & Format(Me.txtDate1, "mm/dd/yyyy") & "#"
    End If
     
    If Not Me.chkDate2 Then
    SQL = SQL & "WHERE (((Tab_Comptes.DateJournée) Between #" & Format(Me.txtDate1, "mm/dd/yyyy") & "#" And "#" & Format(Me.txtDate2, "mm/dd/yyyy") & "#"""
    End If
    1- si l'utilisateur clique sur chkDate2, le SQL est invalide puisque tu as deux clauses WHERE, remplace le par un AND
    en plus tu as mis un "" qui va renvoyer une erreur

    2- il semble manque des espaces dans tes critères presque à chaque fois (j'ai mis un underscore pour que tu le voies (_))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "SELECT Compteur, DateJournée, UARIBCOMPTE, NumOperation, Nom, TypeOP, Montant, Sens, CommentaireCRQ, NumDossierLAB FROM Tab_Comptes WHERE Tab_Comptes!Compteur <> 0_"
    idem ici ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = SQL & "And Tab_Comptes!DateJournée =#" & Format(Me.txtDate1, "mm/dd/yyyy") & "#_"
    3- bref ton SQL est à deboguer ... j'ai rédigé un tuto pour ça ...
    http://cafeine.developpez.com/access...el/debugprint/

    bonne continuation
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  3. #3
    Membre régulier Avatar de fbu78
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 79
    Points
    79
    Par défaut
    Merci pour ces conseils que je vais m'empressez de suivre !

    Sur la partie chkDate2, elle n'est pas encore livrée car l'idée est de faire un intervalle de date, j'ai mis le code comme je le sentais et je le modifierai ensuite !

    Je m'occupe de debug.print et je reviens !

    A+

  4. #4
    Membre régulier Avatar de fbu78
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 79
    Points
    79
    Par défaut
    Bon ça y'est, enfin j'espère... Merci Cafeine pour le tuto sur le debogage !

    Après correction, hélas j'ai toujours le même problème avec les runtime 2002.
    Revoici le 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
    '-------------------------------------
    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWHERE As String
     
    SQL = "SELECT Compteur, DateJournée, UARIBCOMPTE, NumOperation, Nom, TypeOP, Montant, Sens, CommentaireCRQ, NumDossierLAB FROM Tab_Comptes WHERE Tab_Comptes!Compteur <> 0 "
     
     
    If Not Me.chkTypeOp Then
    SQL = SQL & "And Tab_Comptes!TypeOP = '" & Me.cmbRechType & "' "
    End If
     
    If Not Me.chkMontant Then
    SQL = SQL & "And Tab_Comptes!Montant = " & Me.cmbRechMontant & " "
    End If
     
    If Not Me.chkNomClient Then
    SQL = SQL & "And Tab_Comptes!NOM like '*" & Me.txtNomClient & "*' "
    End If
     
    If Not Me.chkDate1 Then
    SQL = SQL & "And Tab_Comptes!DateJournée = #" & Format(Me.txtDate1, "mm/dd/yyyy") & "# "
    End If
     
    SQLWHERE = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
    SQL = SQL & "ORDER BY Tab_Comptes!dateJournée DESC;"
    Debug.Print
     
     
    Me.lblStats.Caption = DCount("*", "Tab_Comptes", SQLWHERE) & " / " & DCount("*", "Tab_Comptes")
    Me.lstResults.RowSource = SQL
    Me.lstResults.Requery
     
    End Sub
    '------------------------------------------
    Private Sub chkDate1_Click()
     
    Me.txtDate1.Visible = Not Me.txtDate1.Visible
    SendKeys "{Tab}"
    txtDate1 = ""
    If txtDate1 = "" Then
    End
    Else
    RefreshQuery
    End If
    End Sub
    '--------------------------------------------------
    Private Sub chkMontant_Click()
     
    Me.cmbRechMontant.Visible = Not Me.cmbRechMontant.Visible
    SendKeys "{Tab}"
    cmbRechMontant = "0"
    RefreshQuery
     
    End Sub
    '--------------------------------------------------
    Private Sub chkNomClient_Click()
     
    Me.txtNomClient.Visible = Not Me.txtNomClient.Visible
    txtNomClient.Value = ""
    SendKeys "{Tab}"
    RefreshQuery
     
    End Sub
    '-----------------------------------------------
    Private Sub chkTypeOp_Click()
     
    Me.cmbRechType.Visible = Not Me.cmbRechType.Visible
    cmbRechType.Value = ""
    SendKeys "{Tab}"
     
    RefreshQuery
     
    End Sub
    '-------------------------------------------------
    Private Sub cmbRechType_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
    '----------------------------------------------
    Private Sub Form_Load()
    Dim ctl As Control
     
    chkDate2.Visible = False
     
    For Each ctl In Me.Controls
        Select Case Left(ctl.Name, 3)
            Case "chk"
                ctl.Value = -1
     
            Case "lbl"
                ctl.Caption = "- * - * -"
     
            Case "txt"
                ctl.Visible = False
                ctl.Value = ""
     
            Case "cmb"
                ctl.Visible = False
     
        End Select
    Next ctl
     
    Me.lstResults.RowSource = "SELECT Compteur, DateJournée, UARIBCOMPTE, NumOperation, NOM, TypeOp, Montant, Sens, CommentaireCRQ, NumDossierLAB FROM Tab_Comptes ORDER BY Tab_Comptes!DateJournée DESC;"
    Me.lstResults.Requery
     
    End Sub
    '-------------------------------------------------
    Private Sub lstResults_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
    '--------------------------------------------------------
    Private Sub lstResults_DblClick(Cancel As Integer)
    DoCmd.OpenForm "F_AutoTab_Comptes", acNormal, , "[Compteur]=" & Me.lstResults
    End Sub
    '-------------------------------------------------------
     
    Private Sub txtDate1_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
     
    '------------------------------------------------
    Private Sub txtMontant_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
    '---------------------------------------------------
    Private Sub txtNomClient_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
    Private Sub btnretourmenugeneral_Click()
        DoCmd.Close
        DoCmd.OpenForm "Menu_Général", acNormal
    End Sub
    '--------------------------
    Si quelqu'un a une idée ...elle est la bienvenue, pour l'instant j'ai enlevé la possibilité de choisir une date mais j'aimerai bien y revenir !

    Merci encore

    edit : cafeine, merci d'utiliser les balises code, le prochain message sans ces balises sera modéré.

  5. #5
    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
    Par défaut
    Hello,

    ce n'est pas clair ...

    oublions un peu le Runtime pour l'instant, avant distribuer l'appli assure toi qu'elle est parfaitement au point dans Access ...

    dans l'environnement de dev Access, voici mes questions
    1- je ne comprends pas l'utilité des SendKeys
    2- quel est ton bug exact ?
    3- le SQL créé répond-il à ton besoin ?
    4- pourquoi n'arrives-tu pas à gérer un Between date1 et date2 ?
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  6. #6
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    En plus des conseils de cafeine, je te préconise aussi de travailler en simulant l'environnement Runtime sur ton poste...
    Tu disposes de Tutoriels pour savoir comment s'y prendre.

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  7. #7
    Membre régulier Avatar de fbu78
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 79
    Points
    79
    Par défaut
    Merci pour tes conseils ... je vais essayer ça.
    Je réponds aussi à tes question :

    Le pb dela date 1 et 2 est résolu depuis le post du précédent message.
    Les sendkeys permettent de mettre le focus sur la zone voulue (je sais je pourrais faire ça autrement !)

    Le bug exact est que :

    Dès qu'un utilisateur RunTime clique sur "chkDate1", l'appli sort violemment comme indiqué dans mon 1er post
    !
    Merci encore pour vos conseils !

  8. #8
    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
    Par défaut
    Citation Envoyé par fbu78
    Merci pour tes conseils ... je vais essayer ça.
    Je réponds aussi à tes question :

    Le pb dela date 1 et 2 est résolu depuis le post du précédent message.
    Les sendkeys permettent de mettre le focus sur la zone voulue (je sais je pourrais faire ça autrement !)

    Le bug exact est que :

    Dès qu'un utilisateur RunTime clique sur "chkDate1", l'appli sort violemment comme indiqué dans mon 1er post
    !
    Merci encore pour vos conseils !
    Oui c'est parce que tu es en Runtime où il n'y a pas d'erreur non prévue permise ...
    il faut impérativement retourner en base de dev sous Access et déboguer tout ça ... avant de distribuer ...
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  9. #9
    Membre régulier Avatar de fbu78
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 79
    Points
    79
    Par défaut
    En fait j'ai trouvé d'où vient le pb : Il vient de cette ligne

    Me.lblStats.Caption = DCount("*", "Tab_Comptes", SQLWHERE) & " / " & DCount("*", "Tab_Comptes")

    Elle ne reussi pas à calculer les stats quand il s'agit de dates. Je ne sais pas pourquoi.

    L'exemple du tuto était prévu avec des libellés et c'est vrai qu'avec les dates il faut une syntaxe particulière, je vais chercher de mon côté.

    Si qqn a une idée aussi...je suis preneur !

    Merci d'avance.

  10. #10
    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
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



Discussions similaires

  1. Formulaire recherche multicritère
    Par mathgamer18 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 08/02/2012, 00h39
  2. Réponses: 9
    Dernier message: 21/09/2011, 15h48
  3. [AC-2003] formulaire Recherche multicritère - liste déroulante/Requête
    Par kichnifou dans le forum IHM
    Réponses: 6
    Dernier message: 03/05/2011, 13h27
  4. Formulaire Recherche Multicritère
    Par benjamin002 dans le forum IHM
    Réponses: 2
    Dernier message: 23/11/2009, 17h09
  5. lstresults formulaire recherche multicritères
    Par melitoriva dans le forum IHM
    Réponses: 13
    Dernier message: 18/01/2007, 11h28

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