2011-10-25 117 views
0

防止意外數據覆蓋我有一個簡單的Access 2007數據庫,和我添加了一個按鈕,它切換到編輯當前顯示的記錄能力的形式。在Access 2007

默認情況下,我有AllowEdits,AllowAdditions設置爲false AllowDeletions。點擊'編輯模式'按鈕改變它。

我還添加了一些形式的活動,這樣,當顯示的記錄被更改,編輯模式將被取消。

我現在發現我無法創建新記錄,因爲當我單擊BtnNew(標準添加新記錄宏附件)時,我收到錯誤「您無法訪問指定的記錄」。

VB代碼我在數據庫中有如下,任何人都可以看到我做錯了什麼,或從哪裏開始尋找? (我的VB/Access知識缺乏,但我理解我是C#開發人員的概念)。

Private Sub BtnEdit_Click() 
    If lblEditMode.Caption = "Edit Mode" Then 
     Disable 
    Else 
     Enable 
    End If 
End Sub 

Private Sub Form_AfterDelConfirm(Status As Integer) 
    Disable 
End Sub 

Private Sub Form_Current() 
    Disable 
End Sub 

Private Sub Disable() 
    AllowEdits = False 
    AllowAdditions = False 
    AllowDeletions = False 
    BtnNew.Enabled = False 
    BtnDelete.Enabled = False 
    lblEditMode.Caption = "" 
End Sub 

Private Sub Enable() 
    AllowEdits = True 
    AllowAdditions = True 
    AllowDeletions = True 
    BtnNew.Enabled = True 
    BtnDelete.Enabled = True 
    lblEditMode.Caption = "Edit Mode" 
End Sub 

它讓我感到我不知道如何將AllowAdditions設置爲True,但我的標籤清楚地正確顯示了「編輯模式」。

+0

用戶是否必須在單擊btnNew之前單擊編輯模式?我可能會在btnNew中編寫自己的代碼(與宏代碼或嚮導代碼相對),以便在用戶單擊btnNew時測試AllowEditions屬性是否爲true。 – HK1

回答

1

你的問題是,當你到了新的記錄訪問通過Form_Current這使得停留在新的記錄無效(基本)設置AllowAdditions爲false。我不確定這是否是最好的解決方案,但我會設置一個狀態變量作爲表單級別,然後當選擇新的按鈕時,設置該變量並設置Form_Current跳過禁用功能。

Enum ValidStates 
    Locked = 0 
    Edit = 1 
    NewRecord = 2 
End Enum 

Dim formState As ValidStates 

那麼對於btnNew,使用[事件過程]

Private Sub btnNew_Click() 
    On Error GoTo Err_btnNew_Click 

    formState = NewRecord 
    DoCmd.GotoRecord , , acNewRec 

    Exit Sub 

Err_btnNew_Click: 
    MsgBox Err.Description 
End Sub 

而在Form_Current事件,補充一點:

Private Sub Form_Current() 
    If formState <> NewRecord Then Disable 
    formState = Edit 
End Sub 

這將允許你編輯的新紀錄。您的啓用和禁用功能也將每個添加一行以設置正確的表單狀態:

formState = Locked ' for Disable 
formState = Edit ' for Enable 
+0

非常感謝,讀你的迴應後,我修改我的代碼如下: '私人小組Form_Current() 如果RecordStatusEnum.dbRecordNew = false,那麼 禁用 結束如果 結束Sub'其中大多解決了這一問題(然而,它並不完美) – Bryan