2015-09-07 95 views
1

使用Access 2010,我有一個表格Purchase_Orders其中status取決於子表單中的Items是否已發送,並且它也受日期的影響。保存記錄時,爲什麼會出現運行時錯誤「2759」?訪問2010

Private Sub Form_AfterUpdate() 

Dim rs As Recordset 
Dim db As Database 
Dim var_Delivered As String 

var_Delivered = "SELECT Count(*) AS d_Count" & _ 
      " FROM Items" & _ 
      " WHERE PO_ID =" & Me.PO_ID.Value & _ 
      " AND Supplier_Dnote_ID IS Null" & _ 
      " AND Delivered_Without_Dnote =0;" 

Set db = CurrentDb 
Set rs = db.OpenRecordset(var_Delivered, dbOpenDynaset) 
'MsgBox rs!d_Count 
    If rs!d_Count > 0 Then 
     If Me.Supply_date < Date Then 
      Me.Status = "Overdue" 
     Else 
      Me.Status = "Submitted" 
     End If 
    Else 
     Me.Status = "Delivered" 
    End If 

db.Close 
Set db = Nothing 
Set rs = Nothing 

End Sub 

這將運行Purchase_Orders的after_update。我有一個save_close按鈕,使用下面的代碼,並且不返回一個錯誤:

If Me.Dirty = True Then 
    DoCmd.Close acForm, "Purchase_Orders", acSaveYes 
Else 
    DoCmd.Close acForm, "Purchase_Orders", acSaveNo 
End If 

不過,我也有一個Save按鈕不關閉窗體。這是我得到運行時錯誤2759:您試圖調用對象的方法失敗。調試突出顯示saverecord行。

Private Sub SaveOnlyBtn_Click() 
If Me.Dirty = True Then 
    docmd.RunCommand acCmdSaveRecord 
End If 
End Sub 

如果我對狀態碼發表評論並使用保存按鈕,該記錄可以很好地保存而不會出現任何錯誤。爲什麼我會得到這個錯誤?我完全難住,搜索網上的錯誤也沒有幫助我。

+0

嘗試'Me.Dirty = False'而不是'docmd.RunCommand acCmdSaveRecord'。這有幫助嗎? –

+0

我試過這個,我得到了一個不同的錯誤。我認爲這是運行時錯誤57097. – LiamH

+0

您的表單是否將'Purchase_Orders'綁定到一個表,如果是,那麼綁定到該表中某個字段的字段'status'? –

回答

1

所以我發現,當我把代碼放在「on dirty」事件中時,錯誤並沒有發生,這讓我意識到,我不需要必須在表單更新之後運行代碼,只有當具體領域改變。所以我將我的代碼更改爲公共代碼,並在supply datedelivered_without_dnotesupplier_Invoice_ID發生更改時調用它。

市民代碼:

Public Sub delivered_status() 

On Error GoTo errTrap1 

If Forms!Purchase_Orders_Ex.Form!Status = "Cancelled" Then 
    Exit Sub 
Else 
    DoCmd.RunCommand acCmdSaveRecord 
    Dim rs As Recordset 
    Dim db As Database 
    Dim var_Delivered As String 

    var_Delivered = "SELECT Count(*) AS d_Count" & _ 
        " FROM Items" & _ 
        " WHERE PO_ID =" & Forms!Purchase_Orders_Ex.Form!PO_ID.Value & _ 
        " AND Supplier_Dnote_ID IS Null" & _ 
        " AND Delivered_Without_Dnote =0;" 

    Set db = CurrentDb 
    Set rs = db.OpenRecordset(var_Delivered, dbOpenDynaset) 
    'MsgBox "Outstanding Items: " & rs!d_Count 
     If rs!d_Count > 0 Then 
      If Forms!Purchase_Orders_Ex.Form!Supply_date < Date Then 
       Forms!Purchase_Orders_Ex.Form!Status = "Overdue" 
      Else 
       Forms!Purchase_Orders_Ex.Form!Status = "Submitted" 
      End If 
     Else 
      Forms!Purchase_Orders_Ex.Form!Status = "Delivered" 
     End If 

    rs.Close 
    Set db = Nothing 
    Set rs = Nothing 
End If 

errTrap1: 
    Select Case Err.Number 
     Case 3314 'form not complete and other required fields are empty 
      Exit Sub 
     Case Else 
      If Err.Number > 0 Then 
       MsgBox Err.Number & ": " & Err.Description 
      End If 
    End Select 

End Sub 

現在,當我請使用save_closeSave_Only我沒有得到錯誤2759我不完全理解這我原來的方法的一部分造成的錯誤,但它這種方法不再發生。

0

我剛剛遇到過這個問題,並且將代碼從Form_AfterUpdate移出來也解決了我的問題。

什麼(隱約)有趣的是,有問題的代碼在本地運行良好,但在部署到客戶端時無法正常工作。我試圖導入修改後的表格而不是替換整個訪問應用程序,但我仍然遇到了同樣的問題。我還將後端數據庫從服務器複製到我的開發計算機,但仍未在本地解決問題。最重要的是,我做了無數的壓縮/修復和反編譯/編譯。

我最後得出的結論是,這是來自Access黑盒的另一個奇怪問題,而不是特定代碼的問題。

相關問題