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

IHM Discussion :

parcours de lignes de formulaire continue avec recordset


Sujet :

IHM

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Points : 183
    Points
    183
    Par défaut parcours de lignes de formulaire continue avec recordset
    Bonjours a tous, encore un problème de recordset aujourd'hui^^ (d'ailleurs je ne sais pas trop si je doit le mettre ici ou dans le topic vba, donc je m'excuse d'avance si je ne suis pas au bon endroit)

    Bien ceci étant dit rentrons dans le vif du sujet :

    Je dispose donc d'un formulaire en mode continue, ou je veut mettre à jours les données par appui sur le bouton valider. les données se mettent à jours en fonctions de valeurs dans le formulaire père de mon sous formulaire, ainsi qu'en fonction de valeurs dans d'autres sous formulaires, elles sont de plus misent à jours dans plusieurs tables.

    J'utilise donc le recordset du sous formulaire pour "parcourir" les lignes de celui ci. Mais je récupère a chaque fois d'une erreur :

    "erreur d'exécution '3426'

    Cette méthode a été annulée par un objet associé"

    Cette erreur survient lorsque je veut passer à la ligne suivante (rst.MoveNext)

    Voici le code du 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
    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
    Private Sub btnValider_Click()
     
    'Enregistre la commande dans l'historique et modifie dans la table outillage la disponibilité et la tranche, ainsi que la référence du groupement
     
    Dim db As DAO.Database
    Dim rst As DAO.Recordset 'recordset permettant de parcourir les lignes du formulaire
    Dim rst2 As DAO.Recordset 'Recordset allant chercher l'enregistrement correspondant dans la table historique
    Dim rst3 As DAO.Recordset 'Recordset ouvrant la table outillage pour effectuer les modifications nécessaires dessus
    Dim i As Integer
     
    Set rst = Me.Recordset
    Set db = CurrentDb()
     
    'Tant que l'on est pas à la fin du formulaire
     
    While Not rst.EOF
     
        Set rst3 = db.OpenRecordset("SELECT DetailCommandeC.Group_Outil FROM DetailCommandeC WHERE DetailCommandeC.RefCommande = " & Forms![frmCreationModifChantier].Form.Controls("txtRefCommande").Value & _
        " AND DetailCommandeC.RefGroupement = '" & Me.txtType.Value & "' ;")
     
        If rst3.EOF Then
     
        'Ouvre la table historique en cherchant l'enregistrement correspondant à la commande
     
            Set rst2 = db.OpenRecordset("SELECT * FROM Historique WHERE Historique.RefCommande = " & Forms![frmCreationModifChantier].Form.Controls("txtRefCommande").Value & _
            " AND Historique.refGroupement = '" & Forms![frmCreationModifChantier]![ssfrmDetailCommandeC].Form.Controls("cmbRefGroupement").Value & _
            "' AND Historique.refOutillage = '" & Me.cmbRepereOutil.Value & "' AND Historique.Operation = 'Commande Chantier';")
     
        Else
     
            Set rst2 = db.OpenRecordset("SELECT * FROM Historique WHERE Historique.RefCommande = " & Forms![frmCreationModifChantier].Form.Controls("txtRefCommande").Value & _
            " AND Historique.refGroupement = ' '" & _
            " AND Historique.refOutillage = '" & Me.cmbRepereOutil.Value & "' AND Historique.Operation = 'Commande Chantier';")
     
        End If
     
        rst3.Close
        Set rst3 = Nothing
     
        'Si on trouve un enregistrement, alors on le modifie
     
        If Not rst2.EOF Then
     
            rst2.Edit
            rst2("DateDepart") = Forms![frmCreationModifChantier].Form.Controls("txtDateDebut").Value
            rst2("DateRetour") = Forms![frmCreationModifChantier].Form.Controls("txtDateFin").Value
            rst2("RefResp") = Forms![frmCreationModifChantier].Form.Controls("cmbChargeAffaire").Value
            rst2("operation") = "Commande Chantier"
     
     
     
        'Si on ne trouve pas d'enregistrement, alors il ne s'agit pas d'une modification mais d'une création de commande
     
        ElseIf rst2.EOF Then
     
            rst2.AddNew
            rst2("refCommande") = Forms![frmCreationModifChantier].Form.Controls("txtrefCommande").Value
            rst2("NDetailCommandeC") = Forms![frmCreationModifChantier]![ssfrmDetailCommandeC].Form.Controls("txtNumAuto")
            If Forms![frmCreationModifChantier]![ssfrmDetailCommandeC].Form.Controls("cmbGroup_Outil") = "Outillage" Then
     
                rst2("RefGroupement").Value = ""
            Else
     
                rst2("Refgroupement").Value = Forms![frmCreationModifChantier]![ssfrmDetailCommandeC].Form.Controls("cmbrefgroupement").Value
     
            End If
     
            rst2("refOutillage") = Me.cmbRepereOutil.Value
            rst2("DateDepart") = Forms![frmCreationModifChantier].Form.Controls("txtDateDebut").Value
            rst2("DateRetour") = Forms![frmCreationModifChantier].Form.Controls("txtDateFin").Value
            rst2("RefResp") = Forms![frmCreationModifChantier].Form.Controls("cmbChargeAffaire").Value
            rst2("operation") = "Commande Chantier"
     
     
        End If
     
        'On modifie l'enregistrement dans la table outillage aussi
     
     
            Set rst3 = db.OpenRecordset("SELECT * FROM Outillage WHERE Outillage.RepereOutil = '" & rst("cmbRepereOutil").Value & "' ;")
            rst3.Edit
            rst3("Disponibilite") = 0
            rst3("tranche") = Forms![frmCreationModifChantier].Form.Controls("cmbTranche").Value
            rst3("RefGroupement").Value = rst2("refGroupement").Value
            rst3("refResponsable") = rst2("refResp").Value
            rst3.Update
     
            'libération des objets
            rst2.Update
            rst3.Close
            Set rst3 = Nothing
     
     
     
        'Libération des objets
     
        rst2.Close
        Set rst2 = Nothing
        rst.MoveNext  'Ligne ou l'erreur survient
    Wend
     
    'Libération des objets
     
     
    db.Close
    Set db = Nothing
    End Sub
    voila, le code est assez long et j'y utilise beaucoup de recordset donc les possibilités d'erreurs sont nombreuses... je suis donc ouvert à toute suggestion ou observation....

    Merci d'avance de vos réponse

    Cordialement

    Mcfly

    Edit : Petite précision dont je viens de m'apercevoir, ce bug ne se produit que lorsque je change la valeur dans la liste cmbRepereOutil, cette liste me permet en fait d'afficher par défaut le premier outillage trouvé dans la table outil (s'il est disponible, conforme etc...) mais le but est de pouvoir ensuite choisir parmis tous les outillages dispo si besoin... apparement ca serais ça le point bloquant.... à mon avis ca doit être une question de mise à jours des formulaires (je change une valeur sur le recordset mais peut être que cette valeur n'est pas encore enregistré lorsque je le parcours... je doit avouer être assez novice dans ce domaine)

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Points : 183
    Points
    183
    Par défaut
    Bonjours... Bien nouvelle évolution, sachant que cela plantais lorsque je changeais la valeur de cmbRepereOutil, j'ais donc décider de mettre un code sur chagement de cette liste afin de pouvoir directement enregistré lors du changement voici 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
    Private Sub cmbRepereEndel_Change()
    'Enregistre la commande dans l'historique et modifie dans la table outillage la disponibilité et la trnche, ainsi que la référence du groupement
     
    Dim db As DAO.Database
    Dim rst2 As DAO.Recordset 'Recordset allant chercher l'enregistrement correspondant dans la table historique
    Dim rst3 As DAO.Recordset 'Recordset ouvrant la table outillage pour effectuer les modifications nécessaires dessus
     
    Set db = CurrentDb()
     
        Set rst3 = db.OpenRecordset("SELECT DetailCommandeC.Group_Outil FROM DetailCommandeC WHERE DetailCommandeC.RefCommande = " & Forms![frmCreationModifChantier].Form.Controls("txtRefCommande").Value & _
        " AND DetailCommandeC.RefGroupement = '" & Me.txtType.Value & "' ;")
     
        If rst3.EOF Then
     
        'Ouvre la table historique en cherchant l'enregistrement correspondant à la commande
     
            Set rst2 = db.OpenRecordset("SELECT * FROM Historique WHERE Historique.RefCommande = " & Forms![frmCreationModifChantier].Form.Controls("txtRefCommande").Value & _
            " AND Historique.refGroupement = '" & Forms![frmCreationModifChantier]![ssfrmDetailCommandeC].Form.Controls("cmbRefGroupement").Value & _
            "' AND Historique.refOutillage = '" & Me.cmbRepereEndel.OldValue & "' AND Historique.Operation = 'Commande Chantier';")
     
        Else
     
            Set rst2 = db.OpenRecordset("SELECT * FROM Historique WHERE Historique.RefCommande = " & Forms![frmCreationModifChantier].Form.Controls("txtRefCommande").Value & _
            " AND Historique.refGroupement = ' '" & _
            " AND Historique.refOutillage = '" & Me.cmbRepereOutil.OldValue & "' AND Historique.Operation = 'Commande Chantier';")
     
        End If
     
        rst3.Close
        Set rst3 = Nothing
     
        'Si on trouve un enregistrement, alors on le modifie
     
        If Not rst2.EOF Then
     
            rst2.Edit
            rst2("refOutillage") = Me.cmbRepereOutil.Value
     
            'Modifie l'outillage que l'on vien d'ajouter
     
            Set rst3 = db.OpenRecordset("SELECT * FROM Outillage WHERE Outillage.RepereOutil = '" & Me.cmbRepereOutil.Value & "' ;")
            rst3.Edit
            rst3("Disponibilite") = 0
            rst3("tranche") = Forms![frmCreationModifChantier].Form.Controls("cmbTranche").Value
            rst3("RefGroupement").Value = rst2("refGroupement").Value
            rst3("refResponsable") = rst2("refResp").Value
            rst3.Update
            rst3.Close
            Set rst3 = Nothing
     
            'Modifie l'outillage qui a été retiré
     
            Set rst3 = db.OpenRecordset("SELECT * FROM Outillage WHERE Outillage.RepereOutil = '" & Me.cmbRepereOutil.OldValue & "' ;")
            rst3.Edit
            rst3("Disponibilite") = -1
            rst3("tranche") = ""
            rst3("RefGroupement").Value = ""
            rst3("refResponsable") = ""
            rst3.Update
            'libération des objets
            rst2.Update
            rst3.Close
            Set rst3 = Nothing
     
        End If
        'Libération des objets
     
        rst2.Close
        Set rst2 = Nothing
     
     
     
    'Libération des objets
     
     
    db.Close
    Set db = Nothing
    End Sub
    comme vous pouvez vous en douter cela ne change rien. Je pédale donc complétement dans les spaghettis... Merci d'avance de votre aide.

Discussions similaires

  1. [AC-2007] Formulaire continu avec controle liste déroulante
    Par lio33 dans le forum IHM
    Réponses: 1
    Dernier message: 06/10/2011, 11h28
  2. N° de ligne dans formulaire continu
    Par Invité dans le forum IHM
    Réponses: 7
    Dernier message: 13/11/2007, 08h22
  3. Réponses: 4
    Dernier message: 30/04/2007, 23h46
  4. Réponses: 3
    Dernier message: 18/08/2006, 14h59
  5. [Formulaire continu] une ligne sur deux en gris
    Par genius99 dans le forum IHM
    Réponses: 7
    Dernier message: 30/10/2005, 18h52

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