我在訪問資料庫中創建的表單中遇到了一些奇怪的行為。我有一個名為 frmSeedling 的表單和一個名為 frmSeedling detail 的子表單。frmSeedling 由一個名為 frmTransect 的單獨表單上的命令按鈕的事件程序啟動。OpenArgs 將 frmTransect 的主鍵 Transect_OID 傳遞給 frmSeedling。Transect_OID 是 frmSeedling 和 frmSeedlingDetail 之間的鏈接欄位。我在 frmSeedling 中有一個 Form_Current 事件程序來計算 frmSeedling 上唯一條目的數量,并創建一個名為 Seedling_OID 的自定義唯一 ID。作為這些表單的記錄源的表是鏈接的 ODBC 表。下面是代碼:
Private Sub Form_Current()
Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone
If Not (rs.EOF) Then
rs.MoveLast
End If
Set rs = Nothing
If IsNull(Seedling_OID) Then
Entry_No = Nz(DCount("Seedling_OID", "rd_Seedling", "Transect_OID = '" & Me.Transect_OID & "'"), 0) 1
Seedling_OID = Transect_OID & "SD" & Entry_No
End If
End Sub
但是,當我從 frmTransect 啟動 frmSeedling 時,我收到一條錯誤訊息,指出我正在嘗試覆寫主鍵。當我查看表單時,發生這種情況是因為 Access 以某種方式嘗試在表單的開頭而不是表單的末尾創建一個新記錄,從而認為我擁有的唯一 Id: created 已被使用。這是一個螢屏截圖,以顯示我的意思:

奇怪的是,使用名為 frmDWD 的單獨表單和子表單 frmDWDdetail,我已經使用了這個確切的設定并且它運行良好。這是來自 frmDWDdetail 的代碼:
Private Sub Form_Current()
Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone
If Not (rs.EOF) Then
rs.MoveLast
End If
Set rs = Nothing
If IsNull(DWD_OID) Then
DWD_Piece = Nz(DCount("DWD_OID", "rd_DWD", "Transect_OID = '" & Me.Transect_OID & "'"), 0) 1
DWD_OID = Transect_OID & "W" & DWD_Piece
End If
End Sub
這是它的樣子:

注意在 frmDWD 中,正在編輯的記錄是表單中的最后一條記錄,而在 frmSeedling 中,它試圖編輯表單中的第一條記錄。我已將表單和子表單中的所有資料屬性設定為完全相同,至少在我看來,代碼看起來相同。我得到這種行為的任何 SQL 原因?任何修復的想法?謝謝!!
uj5u.com熱心網友回復:
在玩了幾個小時“這些東西中的哪些不一樣”后,我發現問題出在子表單的屬性表中。我將“空主過濾器”從“是”切換到“否”,這解決了我的問題。
uj5u.com熱心網友回復:
你沒有使用記錄集做任何事情,所以試試這個簡化的代碼:
Private Sub Form_Current()
Dim Entry_No As Long
If IsNull(Me!Seedling_OID.Value) Then
Entry_No = Nz(DCount("*", "rd_Seedling", "Transect_OID = '" & Me!Transect_OID.Value & "'"), 0) 1
Me!Seedling_OID.Value = Me!Transect_OID.Value & "SD" & Entry_No
End If
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/395463.html
