一 应用情况:
   一个MsflexGrid,其表格结构大体如下:
   |--------------------------------|
   | 行号 |  列一  |  列二 |  列三  | 
   |------|--------|-------|--------|
   |  1   | 树林木 | 列二  |  列三  | 
   |------|--------|-------|--------|
   |  2   | 树森木 | 列二  |  列三  | 
   |------|--------|-------|--------|
   |  3   | 森树木 | 列二  |  列三  | 
   |------|--------|-------|--------|
   |  4   | 林木   | 列二  |  列三  | 
   |------|--------|-------|--------|
   |  5   | 树林森 | 列二  |  列三  | 
   |------|--------|-------|--------|
   |  6   | 木林   | 列二  |  列三  | 
   |______|________|_______|________|
二 要实现的效果
   对某一列或几列进行模糊搜索,搜索可以使用通配符.比如定义*表示0或多个字符,%表示一个字符(类
   似SQL中的Like操作符,呵).
   对上表,如果搜索条件为"列一 Like '*林木'",则我们可以搜出下表记录:
   |--------------------------------|
   | 行号 |  列一  |  列二 |  列三  | 
   |------|--------|-------|--------|
   |  1   | 树林木 | 列二  |  列三  | 
   |------|--------|-------|--------|
   |  4   | 林木   | 列二  |  列三  | 
   |------|--------|-------|--------|
   |  6   | 木林   | 列二  |  列三  | 
   |_____|________|_______|_________|
   再比如搜索条件为 "列一 Like '*木'",可以搜出以下记录
   |--------------------------------|
   | 行号 |  列一  |  列二 |  列三  | 
   |------|--------|-------|--------|
   |  1   | 树林木 | 列二  |  列三  | 
   |------|--------|-------|--------|
   |  2   | 树森木 | 列二  |  列三  | 
   |------|--------|-------|--------|
   |  3   | 森树木 | 列二  |  列三  | 
   |------|--------|-------|--------|
   |  4   | 林木   | 列二  |  列三  |  
   |______|________|_______|________|
   在条件的设置方面,可以是一个条件,也可以是多个条件,条件间可以是 AND 的关系,也可以是 OR 的
   关系.这样的算法如何实现?有谁有现成的算法么??
   谢谢了。呵

解决方案 »

  1.   

    这个确实不好做
    不如先导出成EXCEL或MDB什么,待查过后再显示,导出操作可在后台操作,该不会那么慢吧
      

  2.   

    建立一个临时数据库,对数据库进行查询后再导入表格中。
    另外试试VSFLEXGRID8.0控件,都说很强,但不知能不能实现你的要求
      

  3.   

    1将MsflexGrid 先复制到一个临时表中
    2设置SQL表达式,将查询结果返回到新的MsflexGrid中
    3删除临时表
      

  4.   

    老大,我也想,但是应用情况不是这样的。
    这些数据不是存在数据库中的,而是用户实际编辑的数据.
    语法分析倒不需要,只是能实现以上效果就可以了。举例用的是一个语句,只是为了举例方便.呵
    =========================================当然可使用记录集
    因为记录集可以直接创建在内存中
    Dim Rs As New ADODB.Recordset
    Dim II As LongRs.CursorLocation = adUseClient
    Rs.Fields.Append "Col1", adVarChar, 20
    Rs.Fields.Append "Col2", adVarChar, 20
    Rs.Fields.Append "Col3", adVarChar, 20
    Rs.Fields.Append "Col4", adVarChar, 20
    Rs.Open "me"
    '把表格中的数据搬到数据集,再借助 .Find 即可查找,速度超快For II = 1 To 1000
    '插入1000行
        Rs.AddNew
        Rs(0).Value = "a" & II & 1
        Rs(1).Value = "b" & II & 2
        Rs(2).Value = "c" & II & 3
        Rs(3).Value = "d" & II & 4
        Rs.Update
    NextRs.MoveFirstRs.Find "Col1='a11'"
    If Rs.EOF = False Then
        MsgBox Rs(0)
    End IfRs.Close
      

  5.   

    而且可以建立索引查找
    具体请看这
    http://blog.csdn.net/zlt982001/archive/2005/07/04/413534.aspx
      

  6.   

    谢谢乐天.
    这两天我登不上CSDN,今天一看,你回复这么多.
    真是感谢。呵
    Find 方法我用过,呵,一是不能实现模糊搜索,二是只能实现记录定位的功能。呵
    当然了,非常感谢你.你的最后一个贴,让我受益匪钱.呵再次感谢。