我正在使用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,或当前记录已被删除。请求的操作需要当前记录。>:” 感谢你的帮助。
答案 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