【发布时间】: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 对象。最后一个在其他机器上不行
【问题讨论】:
-
尝试指定选项,(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 上运行。但不能在其他机器上运行。)