Comment utiliser VBA pour ajouter un nouvel enregistrement dans MS Access?
Je suis en utilisant les formulaires liés à l'utilisateur de mettre à jour l'information sur des clients nouveaux ou existants. Actuellement, j'utilise un Ajout de Nouveau Enregistrer une macro sur le bouton "soumettre" (parce que je ne suis pas sûr de la façon d'ajouter ou d'enregistrer un nouveau record grâce à VBA).
J'ai ajouté un avant l'événement de mise à jour (à l'aide de VBA) pour les utilisateurs de confirmer qu'ils veulent enregistrer les modifications avant de sortir de la forme. Pour certaines raisons, c'est remplacer le bouton ajouter un enregistrement et maintenant, les utilisateurs ne peuvent pas ajouter un nouvel enregistrement jusqu'à la sortie de l'formes.
Comment puis-je utiliser VBA pour ajouter de nouvelles informations client à la bonne table? Est-ce quelque chose qui devrait être fait avec des macros à la place?
Forme BeforeUpdate Code:
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim strmsg As String
strmsg = "Data has been changed."
strmsg = strmsg & " Save this record?"
If MsgBox(strmsg, vbYesNo, "") = vbNo Then
DoCmd.RunCommand acCmdUndo
Else
End If
End Sub
Bouton Ajouter Un Enregistrement:
Private Sub btnAddRecord_Click()
Dim tblCustomers As DAO.Recordset
Set tblCustomers = CurrentDb.OpenRecordset("SELECT * FROM [tblCustomers]")
tblCustomers.AddNew
tblCustomers![Customer_ID] = Me.txtCustomerID.Value
tblCustomers![CustomerName] = Me.txtCustomerName.Value
tblCustomers![CustomerAddressLine1] = Me.txtCustomerAddressLine1.Value
tblCustomers![City] = Me.txtCity.Value
tblCustomers![Zip] = Me.txtZip.Value
tblCustomers.Update
tblCustomers.Close
Set tblCustomers = Nothing
DoCmd.Close
End Sub
.OldValue
propriété? C'est le seul moyen que je connaisse pour uncommit un champ lié, comme les modifications sont enregistrées à la table dès que vous quittez un contrôle. Sans .OldValue
vous êtes le déclenchement de votre routine trop tard, et aurait probablement besoin d'être ajouté à l'événement BeforeUpdate de chaque contrôle, pas sur la forme. Poste le code de votre bouton de soumission et de l'événement beforeupdate à préciser.OriginalL'auteur New2This | 2016-08-23
Vous devez vous connecter pour publier un commentaire.
Afin de présenter un dossier à l'aide de VBA, créer un
On Click
cas pour le bouton, et en ce queSub
exécutez la commande suivante:Dans ce Sous, vous pouvez ajouter tous les code que vous voulez valider les valeurs saisies par l'utilisateur et de choisir si vous souhaitez ou non de soumettre le dossier. Il y a beaucoup de contrôle à l'aide de VBA pour soumettre vos formulaires, de sorte que vous n'avez pas besoin d'un
BeforeUpdate
événement.Aussi, ne PAS utiliser les formulaires liés à cette méthode. Je ne sais pas ce que les répercussions sont, mais je ne voudrais pas essayer. L'accès est super pour un début, mais que vous voulez faire des choses plus complexes, il est plus facile d'utiliser VBA.
À tout moment! J'ai essayé d'utiliser les formulaires liés au début lors de l'apprentissage d'Accès, et c'était génial, mais comme je voulais avoir plus de contrôle sur les données et où il va, j'ai trouvé que VBA a été de façon plus efficace. Si la réponse a aidé à se sentir libre d'accepter ou de upvote 😉
Fait! J'ai remarqué que le code fonctionne aussi sur les formulaires liés. Je suis dans l'apprentissage de VBA et droit d'accès à maintenant et j'espère faire encore mieux que le temps passe.
Oh c'est bizarre, il ne l'est pas. Et oui je me sentais désespérée il y a 3 mois quand j'ai commencé, mais après l'utilisation de lynda.com et de dépassement de pile, cela devient beaucoup plus facile.
OriginalL'auteur Michael
Il semble étrange que la création d'une avant l'événement de mise à jour de votre formulaire pour créer une invite avant la fermeture. Peut-être que vous devriez essayer de la fermer au lieu de l'événement. Si vous souhaitez utiliser vba pour ajouter un nouvel enregistrement à partir de la forme, vous pouvez simplifier votre déclaration. Je suis tombé sur une situation similaire lors de la conception de mon propre forme pour mon Accès DB. Ce code est testé et de travail:
Si vous êtes simplement en utilisant un DB dans votre projet et vous vous connectez au démarrage, vous pouvez parfois courir simple DoCmd.RunSQL ce type de déclarations. Vous pouvez prendre de la syntaxe et de l'adapter à votre propre projet. J'ai moi-même eu la syntaxe de base de W3 écoles. Bon site pour apprendre à écrire des requêtes SQL. Il convient également de noter que les tests de validation n'est pas inclus ici. Vous devriez assurez-vous qu'il est inclus dans les règles de validation de formulaire ou dans le code vba. Une chose de plus... dans votre SQL il semble que vous essayez d'attribuer une valeur à la colonne ID dans une zone de texte d'entrée; si l'ID est une auto numéro de colonne, ne le faites pas. ID colonnes sont généralement attribués à un nombre automatiquement, donc vous n'avez pas besoin (ou envie) de spécifier une valeur d'insertion.
Dim
déclaration, vous devez déclarersVIN, sMake, sModel, sColor
commeVariant
, bien qu'il semble que vous vouliez avoir commeString
. Vous devez définir explicitement le type de chaque variable à définir, sinon il sera initialisé commeVariant
. (Vous pouvez ajouter temporairement une ligneDebug.Print typename(sVIN)
pour voir ce que je veux dire.)Cela fait-il une différence fonctionnelle si vous exécutez
Field.SetFocus
avant de lire la valeur d'un champ? Je suis un peu confus par cette approche. Est-ce pour quelques événements de déclenchement qui ne sont pas mentionnées dans votre réponse?l' .SetFocus déclarations sont probablement pas nécessaire en fait. J'ai eu l'habitude de le faire lorsqu'on travaille avec des champs de formulaire parce que parfois, l'Accès ne permet pas de faire des choses (comme le réglage de la valeur du champ), sauf si vous définissez le focus sur l'objet de la première.
Ah, ça explique sûrement cela. J'ai couru dans le problème inverse: l'Accès ne m'a pas laissé de masquer un contrôle, à moins que je voudrais déplacer le focus à un autre endroit. 😉
OriginalL'auteur technoman23