【问题标题】:Cannot run Exec with DAO Grid on other machine无法在其他机器上使用 DAO Grid 运行 Exec
【发布时间】:2015-11-13 20:31:17
【问题描述】:

运行 DAO Grid 的旧程序有问题。 (是的,我知道,不是我的选择) 在一个新项目中,我重新创建了该问题,看起来 Records-set 不会“绑定”到 Data1-object。

我已经在 32/64bits, Win7/8.1/10 机器上测试过了。 在开发机器上它工作正常。 (在 VB6 中并作为 Exec 程序)

Private Sub Command1_Click()
 Dim tmpDB As Database
 Dim r As Recordset
 On Error Resume Next

 Set tmpDB = OpenDatabase("test.mdb", 0, False)
 Set r = tmpDB.OpenRecordset("Budget")
 Set Data1.Recordset = r

 Text1.Text = r.RecordCount 'works fine
 Text2.Text = Data1.Recordset.RecordCount 
 If (Err.Number <> 0) Then Text2.Text = Err.Description
 'Object variable or With block variable not set; on other machines
 End Sub

我已经检查了组件版本、注册、文件访问...一切似乎都很好。

以下是两个屏幕截图。左边是不工作的版本,右边是在开发中。机器运行。 它打开一个数据库,获取一个记录集并对记录进行两次计数。第一次来自 Recordset 对象,第二次来自 Data1 对象。最后一个在其他机器上不行

我注意到的是客户端机器上的 exec 没有创建 ldb 文件。但是可以在 Recordset 中访问数据

【问题讨论】:

  • 尝试指定选项,(RecordsetOptionEnum),这样您就可以确定您没有不能绑定到 data1 控件的只进游标。另外,注释掉On Error Resume Next,以便在调试时看到错误,或者编写适当的错误处理程序。
  • 嗨,Jac,好提示。我已经设置了 RecordsetOption。我可以在“r”对象中跳来跳去(前后)。所以没有只向前游标。接下来的 on error resume 仅用于测试并以一种不错的方式捕获错误描述。问题出在 Data1.Recordset=r 这一行之后,Data1.Recordset 仍然为空。 (选项设置前后)
  • 加载网格不只是某种延迟? Data1.Recordset Is Nothing 是在 Set 发生后立即返回 True 还是在 RecordCount 失败后返回(假设您将 On Error Resume Next 保持打开状态?
  • 嗨,马克,不,这不是延迟。 Data1.Recordset 只是不设置。 (没有错误)Jac 的提示很有趣,因为我没有看到 ldb 文件。更改选项后,我现在拥有专有权,因此在所有情况下都没有 ldp 文件。 (但程序确实可以在 VB6 中的 dev.machine 和 exec 上运行。但不能在其他机器上运行。)

标签: ms-access vb6 dao


【解决方案1】:

使用 Data1.Refresh

要获得 RecordCount,您可能需要先执行 MoveLast,然后再执行 MoveFirst;

【讨论】:

    猜你喜欢
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多