VB程序员博客
实时错误-2147217825(80040e5f):过滤器不能被打开?
请教高手,根据文本框中的内容,对记录集进行过滤,代码如下:
Private Sub Text1_Change()
Dim s As String
s = "计量编号 like " & "'" & Trim(TxtBacterinMeasure.Text) & "%' or 拼音简写 like " & "'" & Trim(TxtBacterinMeasure.Text) & "%'"
Adodc2.Recordset.Filter = s
End Sub
运行的时候,出现:实时错误-2147217825(80040e5f):过滤器不能被打开?
但是,我利用sql server自带的数据看来做这个实验的时候,是能成功的。
请问是什么问题,如何解决?
补充:
我在同一个窗体中,加上一个adodc2,链接到Northwind,用datagrid2显示,在text2中过滤,能够成功。
Private Sub Text2_Change()
Dim s As String
s = "customerid like " & "'" & Trim(Text2.Text) & "%'"
Adodc2.Recordset.Filter = s
End Sub
可见,很可能是数据库设置的问题,但是到底是什么原因?请高手帮忙。
补充:
忽然想起来,可能是“计量编号”字段是数值型,所以不能过滤。把“计量编号”去掉,能过滤成功。
那么,如果要对数值型进行过滤,应该如何处理?继续请教。
你在s = "customerid like " & "'" & Trim(Text2.Text) & "%'"下加一行msgbox s看看s的值什么?
选择Text2_Change这个事件就有问题吧?
filter好像只能支持超级简单的表达式,加上 or 可能就不中了
可以的西西…filter的条件字符串,是由一个或多个用 AND 或 OR 操作符连接的子句组成的字符串。
哦 我是菜鸟
以6楼为准。
不过的话,filter的帮助里自己都说自己效率低,通常不如直接写个带where子句的查询来得快。
我是觉得楼主这样写在Change事件中,每次触发这个事件的时候,字符串都不可能构造完整…
<
<
<
又试了一下,即使只用一个OR,也是如上错误:
rstTmp.Filter = "(strBId Like '%, 14') OR (strBId='14') "
我用的是ADO.
ADO手册上是可以的…或许你那样分组不正确
try:
rstTmp.Filter = "(strBId Like '%, 14' OR strBId='14') "
我测试过了可以的,记录集参数为:
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open Trim(txtSql), cn, adOpenKeyset, adLockOptimistic
rs.Filter = "itemID='1001' or itemID='2001'"
Filter我不常用,没有更深入的了解,具体内容还是查ADO手册….
ADO手册上有一段:
AND 和 OR 在级别上没有先后之分。可使用括号将子句分组。但不能象以下示例那样先将由 OR 联接的子句分组,然后将该组用 and 联接到其他子句。
(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'
与之相反,可以构造如下形式的筛选:
(LastName = 'Smith' AND FirstName = 'John') OR (LastName = 'Jones' AND FirstName = 'John')
在 LIKE 子句中,可在样式的开头和结尾使用通配符(如 LastName Like '*mit*'),或者只在结尾使用通配符(如,LastName Like 'Smit*') 。
谢谢先 还没试
把括号去掉,改成这样还是不行:
rstThI.Filter = "strBId Like '*, 14' OR strBId='14'"
或者这样也不行:
rstThI.Filter = "(strBId Like '*, 14' OR strBId='14')"
我猜测,在Filter里,OR能连接的可能只是简单的等号表达式,而像Like这样的filter就够呛了。
try:
rstThI.Filter = "(strBId Like '*, 14*' OR strBId='14')"
or
rstThI.Filter = "(strBId Like '%, 14%' OR strBId='14')"
or
rstThI.Filter = "(strBId Like ', 14%' OR strBId='14')"
ADO手册:在 LIKE 子句中,可在样式的开头和结尾使用通配符(如 LastName Like '*mit*'),或者只在结尾使用通配符(如,LastName Like 'Smit*') 。
只在开头用通配符不支持,已经测试过了,的确如此…
已经解决了。
就是用了独孤剑的那个方式把数值型字段转换为字符处理,用str()转换,如
将 123.45 的浮点表达式转换为字符长度为 6 和小数位数为 2 的字符。
SELECT STR(123.45, 6, 2)
我在决定睡觉前忽然想起来,当时就实验成功,不过太晚了,没有更新。谢谢各位朋友的指点。