2015-09-07 77 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黑盒的另一个奇怪问题,而不是特定代码的问题。

相关问题