从ms访问前端向sql添加新条目

时间:2012-07-06 09:21:02

标签: ms-access ms-access-2007

我有两个表可以用这个查询表示(我已经把这个查询作为表单的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.idtblrcmtaskoptions.id分别是表tblrcmtasktblrcmtaskoptions的主键。 我不明白如何在用户添加新条目时在两个表中创建新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

我该怎么做?

2 个答案:

答案 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.