【问题标题】:Code not executing properly but no error appears to be raised代码未正确执行,但似乎没有引发错误
【发布时间】:2013-02-03 08:07:54
【问题描述】:

最近两次,与下面基本相同的代码未能正确执行。

在同一时间段内,它也会正常执行数百次。

两次打印单据,但没有记录添加到数据库中,也没有向用户报告错误。

我无法理解这是怎么回事。

发生错误的计算机通过有线网络连接到一个共享的 Jet 数据库,其中大约有 8 台计算机。

On Error GoTo ErrorHandler1

BeginTrans
Dim RS as RecordSet
Dim strRS as string

strRS = "Select * from Blah"

Set RS = DB.OpenRecordset(strRS)

RS.AddNew
RS.Fields("Date1").value =  Now
RS.Fields("OpID").value =  intOpId
RS.Update                              

PrintSlip Now, intOpId                 
CommitTrans

Exit Sub

ErrorHandler1:
Rollback
MsgBox "There has been an error"

他们最近用新的电缆和机器升级了他们的网络,但我看不出任何原因,特别是为什么这可能是问题。

【问题讨论】:

  • 您能提供 PrintSlip 的代码吗?在打印发生之后,代码是否有可能在该方法中引发错误?你见过 MsgBox 吗?
  • ... 否则CommitTrans 代码可能有问题。我们可以看看吗?
  • @Lynn Crumbling,您好抱歉耽搁了。包含的代码已大大简化,但 printslip 子没有错误处理程序,因此调用代码中的错误处理程序会捕获它。
  • @George begintrans、committrans 和 rollback 都是 dao dbengine 的内置方法,我没有它们的内部代码
  • @kjack PrintSlip() 在发送打印作业后做什么?有什么可能出错的吗?是否可以成功发送打印作业,但随后在PrintSlip() 内部引发错误,从而导致RollbackCommitTrans 发生之前?

标签: ms-access vb6 dao jet


【解决方案1】:

您可以使用QueryDef 对象添加记录,而不是依赖于引发的错误,然后测试.RecordsAffected 属性以查看实际添加了多少记录。

这里有一些细节: How can I get a value from the update query prompt in Access VBA?

总结一下:

  1. 使用两个parameters[TheDate][TheOpID] 创建追加查询
  2. 运行如下所示的代码:

Dim qdf As New QueryDef
Set qdf = DB.QueryDefs("qappMyCoolParameterQuery")
With qdf
    !TheDate = Now
    !TheOpID = intOpId
    .Execute
    If .RecordsAffected = 0 Then
        'Freak Out, alert user, etc
    End If
End With

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    相关资源
    最近更新 更多