如何使用VBA在MS Access中添加新记录?

时间:2016-08-23 19:29:17

标签: vba forms ms-access button access-vba

我使用绑定表单为用户更新有关新客户或现有客户的信息。现在我在提交按钮上使用添加新记录宏(因为我不确定如何通过VBA添加或保存新记录)。

我添加了一个更新前事件(使用VBA),让用户在退出表单之前确认他们要保存更改。出于某种原因,这会覆盖添加记录按钮,现在用户无法在退出表单之前添加新记录。

如何使用VBA将新客户信息添加到正确的表中?这是应该用宏来完成的吗?

表格BeforeUpdate代码:

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

添加记录按钮:

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

3 个答案:

答案 0 :(得分:7)

要使用VBA提交记录,请为该按钮创建On Click事件,并在该Sub中运行以下命令:

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

在此Sub中,您可以添加要验证用户输入值的所有代码,并选择是否要提交记录。使用VBA提交表单有很多控制权,因此您不需要BeforeUpdate事件。

此外,请勿使用此方法使用绑定表单。我不知道会有什么影响,但我不会尝试。 Access很适合初学,但是当你想做更复杂的事情时,更容易使用VBA。

答案 1 :(得分:0)

您似乎很奇怪,您需要为表单创建一个before update事件,以便在关闭之前创建提示。也许你应该尝试关闭事件。如果要使用vba从表单添加新记录,可以简化语句。在为Access DB设计自己的表单时遇到了类似的情况。此代码经过测试并正常运行:

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 & "')"

如果您只是在项目中使用一个数据库并且在启动时连接,则有时可以像这样运行简单的DoCmd.RunSQL语句。您可以在此处使用语法并将其调整为您自己的项目。我自己从W3学校获得了基本语法。学习编写SQL查询的好网站。还应注意,此处不包括验证测试。您应该确保它包含在表单验证规则或vba代码中。还有一件事......在您的SQL中,您似乎正在尝试从文本框条目为ID列分配值;如果ID是自动编号列,请不要这样做。 ID列通常会自动分配一个数字,因此您不需要(或想要)为其指定插入值。

答案 2 :(得分:0)

请注意: 我注意到通过VBA功能(如您的“添加记录按钮”代码中那样)添加记录比使用DoCmd.Run SQL“ INSERT INTO ...”快约400倍: 大约55,000条记录/秒的记录/秒,而具有5列(ID + 4个短字符串)的表的140条记录/秒。

对于表格来说,这没有实际意义,因为手动输入数据是可以的,但是如果表格生成更多记录,则可以节省大量时间。