我有两个表可以用这个查询表示(我已经把这个查询作为表单的Recordsource):
SELECT tblrcmtask.id, tblrcmtask.rcmtask,tblrcmtaskoptions.id,
tblrcmtaskoptions.rcm_id,
tblrcmtaskoptions.rcmtaskoptions
FROM tblrcmtask
INNER JOIN tblrcmtaskoptions
ON tblrcmtask.id=tblrcmtaskoptions.rcm_id
我希望用户能够通过访问2007中的表单将新条目添加到这些表中。
列tblrcmtask.id
和tblrcmtaskoptions.id
分别是表tblrcmtask
和tblrcmtaskoptions
的主键。
我不明白如何在用户添加新条目时在两个表中创建新ID。用户只能在表单中添加tblrcmtaskoptions.rcmtaskoptions和tblrcmtask.rcmtask。此外,表tblrcmtaskoptions中有多个行用于每个tblrcmtask 。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
我该怎么做?
答案 0 :(得分:1)
这是一个经典的表单/子表单设置。仅使用带有子表单tblrcmtask
的{{1}}创建表单。链接子字段和主字段应设置为公共ID。巫师会为你做这件事。不需要代码。该ID将由链接字段自动添加。
您可以在2007 version of the Northwind sample database中找到一个示例。
答案 1 :(得分: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.