0

我有两个可以由这个查询表示的表(我已经将此查询作为表单的 Recordsource):

SELECT tblrcmtask.id, tblrcmtask.rcmtask,tblrcmtaskoptions.id, 
tblrcmtaskoptions.rcm_id,
tblrcmtaskoptions.rcmtaskoptions 
FROM tblrcmtask 
INNER JOIN tblrcmtaskoptions 
ON tblrcmtask.id=tblrcmtaskoptions.rcm_id 

我希望用户能够通过 access 2007 中的表单将新条目添加到这些表中。列tblrcmtask.idtblrcmtaskoptions.id分别是表的主键tblrcmtasktblrcmtaskoptions。我不明白如何在用户添加新条目时在两个表中创建新 ID。用户只能在表单中添加 tblrcmtaskoptions.rcmtaskoptions 和 tblrcmtask.rcmtask。此外,每个 tblrcmtask 表中都有多行 tblrcmtaskoptions 。ID。我希望用户能够在表 tblrcmtaskoptions 中为现有的 tblrcmtask.id 添加新行

我尝试对这两个使用下拉菜单,但是在将新 ID 创建为 ID + 1 的最大值时遇到了问题。

Dim MyRecords As DAO.Recordset 
Dim Myfield As DAO.Fields 
SQL = "SELECT Max(tblRCMTASK.ID) AS MaxOf_RCMTASKID FROM tblRCMTASK;" 
Set MyRecords = dbTHIS.OpenRecordset(SQL) 
Set Myfield = MyRecords.Fields 
Me.txtRCMTASKID = Myfield("MaxOf_RCMTASKID") + 1 
Me.txtRCMTASKID.DefaultValue = Myfield("MaxOf_RCMTASKID") + 1 
MyRecords.Close 
End If 
Dim MyRecords1 As DAO.Recordset 
Dim Myfield1 As DAO.Fields 
SQL = "SELECT Max(tblRCMTASKOPTIONS.ID) AS MaxOf_RCMOPTIONSID FROM tblRCMTASK;" 
Set MyRecords = dbTHIS.OpenRecordset(SQL) 
Set Myfield1 = MyRecords1.Fields 
Me.txtRCMOPTIONSID = Myfield1("MaxOf_RCMOPTIONSID") + 1 
Me.txtRCMOPTIONSID.DefaultValue = Myfield("MaxOf_RCMOPTIONSID") + 1 
MyRecords1.Close

我收到一条错误消息,提示您无法为该对象分配值并指向此行: Me.txtRCMTASKID = Myfield("MaxOf_RCMTASKID") + 1

我该怎么做呢?

4

2 回答 2

1

尝试对自动编号字段执行操作时,Access 会给您带来麻烦。如果您想做这些类型的操作,您最好只使用一个常规数字作为 PK。

要获取最近插入的自动编号字段以在相关表中插入相同的数字,这是 VBA:

假设记录集和数据库被声明,rs 和 db

     dim id as integer
     set db = CurrentDb
     set rs = db.openrecordset("firstTable", dbOpenDynaSet)
 With rs
   .addNew
   .Fields("field1").Value = Me.control1   'adds to column1 of your table the value of control1
   .Fields("field2").Value = Me.control2
   .update                                 'updates the record. If it is an autonumber, it will be automatically assigned. I will show you how to access this for your next insert
 end with

 'To get the autoID of the entry we just inserted, do this
 id = db.OpenRecordSet("SELECT@@IDENTITY")(0)
 'Now you have the autoID of the recent insertion, so you may use it for your next one.
于 2012-07-06T13:17:23.207 回答
1

这是一个经典的表单/子表单设置。仅基于tblrcmtask使用子表单创建表单tblrcmtaskoptions。链接子字段和主字段应设置为公共 ID。向导将为您执行此操作。不需要代码。id 将由链接字段自动添加。

您可以在2007 版的 Northwind 示例数据库中看到一个示例。

于 2012-07-06T09:26:47.933 回答