web-dev-qa-db-fra.com

Comment utiliser VBA pour ajouter un nouvel enregistrement dans MS Access?

J'utilise des formulaires reliés pour permettre à l'utilisateur de mettre à jour des informations sur des clients nouveaux ou existants. En ce moment, j'utilise une macro Add New Record sur le bouton d'envoi (car je ne sais pas comment ajouter ou sauvegarder un nouvel enregistrement via VBA). 

J'ai ajouté un événement avant la mise à jour (à l'aide de VBA) pour que l'utilisateur confirme qu'il souhaite enregistrer les modifications avant de quitter le formulaire. Pour une raison quelconque, cela annule le bouton Ajouter un enregistrement. Désormais, les utilisateurs ne peuvent pas ajouter de nouvel enregistrement avant de quitter les formulaires.

Comment utiliser VBA pour ajouter de nouvelles informations client à la table appropriée? Est-ce quelque chose qui devrait plutôt être fait avec des macros?

Formulaire avant le code de mise à jour:

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
7
New2This

Pour soumettre un enregistrement à l'aide de VBA, créez un événement On Click pour le bouton et dans celui-ci Sub, exécutez la commande suivante:

Private Sub submitButton_Click()

'All the code to validate user input. Prompt user to make sure they want to submit form, etc.

DoCmd.RunSQL "INSERT INTO tblCustomers (txtCustomerID.Value, txtCustomerName.Value, txtCustomerAddressLine1.Value, txtCity.Value, txtZip.Value)"

End Sub

Dans cette sous-section, vous pouvez ajouter tout le code pour valider les valeurs entrées par l'utilisateur et choisir si vous souhaitez ou non soumettre l'enregistrement. VBA utilise beaucoup de contrôle pour soumettre vos formulaires. Vous n'avez donc pas besoin d'un événement BeforeUpdate.

De plus, n'utilisez PAS de formulaires liés avec cette méthode. Je ne sais pas quelles sont les répercussions, mais je ne l'essayerais pas. L’accès est excellent pour commencer, mais si vous voulez faire des choses plus complexes, il est plus facile d’utiliser simplement VBA.

7
Michael

Il semble étrange que vous créiez un événement avant la mise à jour pour que votre formulaire crée une invite avant la fermeture. Peut-être devriez-vous plutôt essayer l'événement sur près. Si vous souhaitez utiliser vba pour ajouter un nouvel enregistrement à partir du formulaire, vous pouvez simplifier votre déclaration. Je suis tombé sur une situation similaire lors de la conception de mon propre formulaire pour ma base de données Access. Ce code est testé et fonctionne:

Dim sVIN, sMake, sModel, sColor, sType As String
Dim intYear As Integer

Me.txtVIN.SetFocus: sVIN = Me.txtVIN.Value
Me.txtMake.SetFocus: sMake = Me.txtMake.Value
Me.txtModel.SetFocus: sModel = Me.txtModel.Value
Me.txtColor.SetFocus: sColor = Me.txtColor.Value
Me.comboType.SetFocus: sType = Me.comboType.SelText
Me.txtVehicleYear.SetFocus: intYear = Me.txtVehicleYear.Value

DoCmd.RunSQL "INSERT INTO Vehicles (VIN, Make, Model, VehicleYear, Color, Type) VALUES ('" & sVIN & "', '" & sMake & "', '" & sModel & "', " & intYear & ", '" & sColor & "', '" & sType & "')"

Si vous utilisez uniquement une base de données dans votre projet et que vous vous connectez au démarrage, vous pouvez parfois exécuter de simples instructions DoCmd.RunSQL telles que celles-ci. Vous pouvez prendre la syntaxe ici et l’adapter à votre propre projet. J'ai moi-même eu la syntaxe de base des écoles W3. Bon site pour apprendre à écrire des requêtes SQL. Il convient également de noter que les tests de validation ne sont pas inclus ici. Vous devez vous assurer qu'il est inclus dans les règles de validation du formulaire ou dans le code vba. Une dernière chose ... dans votre code SQL, il semble que vous tentiez d'attribuer une valeur à la colonne ID à partir d'une entrée de zone de texte; Si ID est une colonne à numéro automatique, ne le faites pas. Un numéro est généralement attribué automatiquement aux colonnes ID. Vous n'avez donc pas besoin (ou ne voulez pas) spécifier une valeur d'insertion pour cela.

0
technoman23