2012-07-06 47 views
0

我具有可以通過這個查詢來表示兩個表(I作出此查詢的形式的記錄源):添加新條目到SQL從MS Access前端

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 

我得到它說,你不能一個值ASIGN到該對象並指向這一行的錯誤:Me.txtRCMTASKID = MyField的(「MaxOf_RCMTASKID」)+ 1

我如何做這個?

回答

1

這是一個經典的表單/子表單設置。創建一個完全基於tblrcmtask的表格和子表格tblrcmtaskoptions。鏈接子字段和主字段應設置爲公共ID。巫師會爲你做這件事。沒有要求的代碼。 id將被鏈接字段自動添加。

您可以在2007 version of the Northwind sample database中看到一個示例。

+0

我得到的錯誤「不能將空值插入tblRCMTASKOPTIONS.ID」插入失敗 – user1175126 2012-07-06 11:00:33

+0

你從哪裏得到這個錯誤? – Fionnuala 2012-07-06 11:01:42

+0

當我編輯具有控制源的文本框作爲tblRCMTASKOPTIONS.RCMTASKOPTIONS,然後移動到下一個文本框添加另一個。但我很驚訝這個錯誤不存在ttblRCMTask.ID。 – user1175126 2012-07-06 11:10:51

1

嘗試在自動編號字段上執行操作時,訪問會給您帶來麻煩。如果你想進行這些操作,你最好使用一個普通數字作爲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("[email protected]@IDENTITY")(0) 
'Now you have the autoID of the recent insertion, so you may use it for your next one. 
+1

嘗試使用自動編號時,訪問不會給您帶來很多麻煩。這種情況確實很容易,如果設置正確,將生成數字。不熟悉MS Access的人幾乎總是寫很多不必要的代碼。 – Fionnuala 2012-07-09 09:15:30

+0

作爲一個新的Access用戶,我可以證實這一點。我覺得用VBA編碼的一切都比依靠嚮導更安全。話雖如此,我已經使用了一些形式的嚮導,並且對功能感到驚喜。 – Scotch 2012-07-09 13:40:27