以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  模糊查找报错  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=44344)

--  作者:zhanqh
--  发布时间:2013/12/28 15:50:00
--  模糊查找报错

以下代码当输入字符不匹配时出错

Dim txt As String = e.Form.Controls("TextBox1").Text
Dim tbl As Table = Tables("客户主窗口_Table1")
If txt = "" Then
    tbl.Filter = ""
Else
    txt = "\'%" & txt & "%\'"
    tbl.Filter = "客户编号 Like " & txt & " Or 客户名称 Like " & txt & " Or 联系人 Like " & txt & " Or 地址 Like " & txt
End If


图片点击可在新窗口打开查看此主题相关图片如下:未标题-1.jpg
图片点击可在新窗口打开查看


--  作者:Bin
--  发布时间:2013/12/28 15:51:00
--  
狐表的筛选,匹配符应该使用 * 号不是 %号 

txt = "\'*" & txt & "*\'"

这样应该没问题了,如何还有问题,请把文件例子发上来

--  作者:zhanqh
--  发布时间:2013/12/28 15:52:00
--  

改成*号也是一样的结果


--  作者:Bin
--  发布时间:2013/12/28 15:56:00
--  
%号也是可以的,我刚才误判了.

你检查一下你Currentchanged的代码.

是否使用了当前行, 你筛选完毕没有结果的话,当前行为空,你再引用当前行肯定会报错的.

需要添加空行判断

--  作者:狐狸爸爸
--  发布时间:2013/12/28 15:56:00
--  

和筛选无关,你修改这个表CurretChanged事件代码:

 

if  e.Table.Current IsNot Nothing Then
     \'原来的CurrentCanged事件代码
End if


--  作者:狐狸爸爸
--  发布时间:2013/12/28 15:58:00
--  
因为筛选后,如果没有符合条件的行,e.Table.Current 或者 Tables("表名").Current肯定要出错。
使用Current是必须判断的,切记。
--  作者:zhanqh
--  发布时间:2013/12/28 16:00:00
--  

Currentchanged有如下代码

Dim dr As DataRow = e.Table.Current.DataRow
Dim wz As Integer = Tables("客户").FindRow(dr)
If wz >=0 Then
      Tables("客户").Position = wz
End If


--  作者:Bin
--  发布时间:2013/12/28 16:01:00
--  
if  e.Table.Current IsNot Nothing Then
     Dim dr As DataRow = e.Table.Current.DataRow
Dim wz As Integer = Tables("客户").FindRow(dr)
If wz >=0 Then
      Tables("客户").Position = wz
End If
End if
--  作者:zhanqh
--  发布时间:2013/12/28 16:04:00
--  
谢谢,解决了,速度很快