0
votes

Enregistrement d'accès à la MS Access avec VBA

mise à jour:

Je tente de configurer un formulaire "Tâches", où lorsque vous cliquez sur un bouton, il prendra tous les enregistrements avec un [statut] de 10 et copier-les, les enregistrements précédents seraient alors marqués comme [Statut] 100.

Alors, ce que j'ai est le suivant "avant" de la fiche technique: Avant le code

Une fois que vous avez exécuté le code, il ressemblera comme suit: After Code

Le code dupliquera tous les enregistrements qui ont un [statut] de 10 ("en cours") marquent les anciens enregistrements comme [Statut] 100 ("terminé ") Et horodatage Le champ [Date terminé].

Espérons que cela aide à clarifier un peu plus de ce que j'essaie de faire.

code est comme suit: xxx


1 commentaires

Utilisez une requête APPEND pour une tâche comme celle-ci.


3 Réponses :


1
votes

Ces

DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
DoCmd.RunCommand acCmdPasteAppend


3 commentaires

J'ai fait des modifications pour essayer de clarifier ce que j'essaie de faire. Peut-être que l'utilisation d'un enregistrement n'est pas la bonne façon d'aller ??


Probablement pas. Très probablement ce que vous voulez, c'est simple à faire avec une requête Ajout suivie d'une requête Mettre à jour , mais vous devrez fournir des structures de table, des exemples de données et d'exemple de résultat attendu pour tout aide significative avec ça.


Je mette à jour mon message original maintenant.



1
votes

Vous ne semblez pas faire quoi que ce soit pour le jeu d'enregistrements.

Ceux-ci: p>

Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset

Set rs1 = CurrentDb.OpenRecordset("Source")
Set rs2 = CurrentDb.OpenRecordset("Destination")

rs1.MoveFirst

If Not (rs1.EOF And rs1.BOF) And Me.Status = 10 Then

Do Until rs1.EOF = True
    If(rs1![Field] = 10) Then
       With rs2
            .AddNew
            ![Field]=rs1![Field]
            .Update
       End With
    End If
    rs1.MoveNext
Loop
Else
    MsgBox ("Nothing Done")
'do nothing
End If

    MsgBox ("Complete")

rs1.Close 'Close the recordset
Set rs1 = Nothing 'Clean up
rs2.Close 'Close the recordset
Set rs2 = Nothing 'Clean up
End Sub


4 commentaires

J'ai tenté d'utiliser votre code mais il y a une raccrochette sur ! [Champ] = rs1. [Champ] i Obtenir l'erreur "Méthode ou membre de données non trouvé" Si je le contourne, je reçois une erreur que j'ai une boucle sans commandement do.


Remplacez-vous [champ] avec le nom des champs réels dans les tables? Oh et je l'ai écrit légèrement faux, je pense que c'est censé être ! [champ] = RS1! [champ]


Oui, j'ai remplacé "champ" avec le champ, il est censé avoir dans ce cas, j'ai utilisé le statut comme champ. Avec votre mise à jour, je reçois la boucle sans erreur ...


J'ai attrapé ça. mais obtenait toujours l'erreur. Mais réinscrit comme vous avez ci-dessus et cela a fonctionné!



4
votes

Pourquoi n'utiliseriez-vous pas une requête d'insertion code> simple code> pour cette tâche?

E.g.: P>

insert into tblTasks
select * from tblTasks where tblTasks.status = 10


0 commentaires