Database MS Access未打开时,DMax功能不工作
我正在用VBA编写代码,允许使用MS Excel中的用户表单在数据库中添加新用户。提交表单后,必须自动更新数据库。我正在使用Database MS Access未打开时,DMax功能不工作,database,vba,excel,ms-access,Database,Vba,Excel,Ms Access,我正在用VBA编写代码,允许使用MS Excel中的用户表单在数据库中添加新用户。提交表单后,必须自动更新数据库。我正在使用DMax函数获取表中现有的最高主键。然后我增加它以获得要添加的新用户的主键。当数据库在MS Access中打开时,代码可以完美地工作。但是,只要MS Access未打开,它就会返回错误“Sub或Function not defined.”。 以下是出现错误时突出显示的代码: userID = DMax("[UserID]", "subscriber_user") + 1
DMax
函数获取表中现有的最高主键。然后我增加它以获得要添加的新用户的主键。当数据库在MS Access中打开时,代码可以完美地工作。但是,只要MS Access未打开,它就会返回错误“Sub或Function not defined.”。
以下是出现错误时突出显示的代码:
userID = DMax("[UserID]", "subscriber_user") + 1
userID
是我的变量,userID
是包含主键的列,subscriber\u user
是数据库中表的名称
数据库是否需要使用MS Access打开才能正常工作?是否有另一种方法确保数据库在不通过MS Access或任何其他IDE打开的情况下得到更新?数据库的DMax是Access VBA函数,而不是Excel VBA函数 您需要通过DAO/ADO进行连接,或者创建如下的访问对象:
Public Sub AccessDmax()
Dim userID as Integer
Dim oAccess As Object
Set oAccess = CreateObject("Access.Application")
oAccess.Visible = False
oAccess.OpenCurrentDatabase "C:\test_databases\test.accdb"
userID = oAccess.DMax("ID", "subscriber_user")
oAccess.Quit
Set oAccess = Nothing
End Sub
您应该使用DAO/ADO来更新数据,在这种情况下,您可以使用SELECT查询来获取ID。我不太清楚为什么需要获得PK。@Rory我正在使用SQL查询更新数据,效果很好。我唯一的问题是DMax函数。我对所有这些都不熟悉,我不确定自动递增在这里应该如何工作,所以我得到了最新记录的PK,这样我就可以使用代码递增它,然后将它传递到查询中,我将新记录插入表中。你的PK不是自动编号吗?如果是,则在添加数据时不需要包含它。@Rory我不是创建数据库的人,所以我不是很确定,但我正在研究它。谢谢成功了!我仍然不清楚哪些函数在Access下,哪些函数在Excel下。非常感谢。