从vb6中的mdb文件读取数据时出现问题

时间:2010-11-02 12:15:09

标签: ms-access vb6 ado

我正在使用vb6并尝试将mdb文件读入

Set rs = New ADODB.Recordset
rs.Open SqlStr, mvarDB

这个我的标准字符串“id ='SA / -AS 0N'和mp<>'N'”,表中有一条记录,其中id是上面提到的并且它的mp列不是N.但是

   rs.MoveFirst

在观察窗口中,我可以看到第一列的值。但是当下面运行时,标题会显示

   rs.Filter = sCriteria

“:值BOF或EOF为True,或当前记录已被删除。请求的操作需要当前记录。>:”   感谢你的帮助。

5 个答案:

答案 0 :(得分:1)

我也同意,检查以确保您先拥有记录。你不应该直接使用rs.MoveFirst。

If rs.RecordCount > 0 Then

 rs.Filter = strCriteria

End If

同时验证您要过滤的列实际上是否存在于Recordset中。

希望这有帮助。

答案 1 :(得分:1)

如果mp列值为NULL,则使用过滤条件mp <> 'N'将导致从过滤结果集中删除该行。

SQL使用相同的three-valued logic。我的想法是mp <> NULL评估为UNKNOWN,结果是在SQL DML中删除的行(但保留在SQL DDL中......)

如果您使用的是SQL,则可以使用谓词(mp <>'N' OR mp = NULL)。遗憾的是,ADO has a known problem阻止在过滤器属性条件中使用NULL

3VL疯狂和ADO错误应该可以让您得出应该避免NULL值的结论。理想情况下,您应该删除数据库中的NULL个列。在短期内,您可以确保您的视图和过程不会暴露NULL值。您可以使用另一个“魔术”文字值,但更好的方法是返回合适的默认域值。例如,非mp的{​​{1}}的任何值都必须为N

Y

答案 2 :(得分:0)

通过这样的健全性检查来保护MoveFirst

If Not rs.EOF Or Not rs.BOF Then
    rs.MoveFirst
End If

答案 3 :(得分:0)

好的问题是2折,当评论有用但问题是,

1- mdb文件的worng数据类型为NUMBER,因此行中的每个空都导致记录达到EOF。所以我将数据类型设置为TEXT。

2-TO在我做的记录集中找到空白

dataSet.Find sCriteria, adSearchForward 'sCriteria = id = 'NW'

然后我检查这个列是否为空,

If IsNull(dataSet!col1) Then

如果找到null,我使用'sCriteria = id ='NW',否则我使用id ='NW'并且mp&lt;&gt;'N'。

工作得很好。 Null正在引发问题。

答案 4 :(得分:0)

没有必要这样做

rs.MoveFirst

如果找到任何内容,记录将自动定位在第一条记录上

接下来做这个

If rs.EOF=false Or rs.BOF=false Then
' manipulate recordset here
End If