一个文本框,用来输入查询内容
一个DATAGRID控件,用来 显示查询结果
首先,第一次输入查询内容,在DATAGRID上显示正常我接着又在文件框上输入查询内容,并且希望只能是显示在在DATAGRID的数据中寻找,这样的功能如何实现?这个功能像ACCESS的筛选
谢谢贴出第一次的查询代码mysql = "Select * from "
mysql = mysql + TABLENAME
mysql = mysql + " where 物料 like '%"
mysql = mysql + Text1.Text & "%'"
AdoRs.Open mysql, AdoCnn, adOpenDynamic, adLockPessimistic, adCmdText
Set DataGrid1.DataSource = AdoRs

解决方案 »

  1.   


    那就用记录集对象的 Filter 方法。
      

  2.   

    简单的思路是先定义一个全局变量记录你的SQL句子dim oldsql as stringif check1.checked=true and len(oldsql)>0 then
      mysql = "Select * from (" + old sql +") where ..."
    else 
      mysql = "Select * from ..."
    end if
    oldsql = mysql这么写思路简单但是很没效率,如果重复多次你的查询速度会慢到崩溃。
    不过如果是小程序小查询就无所谓了。另一种比较效率的做法是将此次查询结果作为临时数据插入临时表中,
    下次查询的时候直接从临时表里条件查询即可。
      

  3.   

    谢谢,不过我的数据库是一个大约3W条记录的ACCESS文件,这种情况下读写临时表快还是嵌套SQL语句快?
      

  4.   

    我搞掂了,后面用多了几个where   语句就可以了
    多谢各位    Set AdoRs = New ADODB.Recordset    
            mysql = "Select * from "
            mysql = mysql + TABLENAME
            tempsql = " 物料描述 like '%" + Text3.Text & "%'"
            mysql = mysql + " where " + tempsql
          
       
       
       If Len(sqltext3) > 0 Then        '如果不是第一次查询,加入上一次查询的
          mysql = mysql + sqltext3
        End If   
         AdoRs.Open mysql, AdoCnn, adOpenDynamic, adLockPessimistic, adCmdText       Set DataGrid1.DataSource = AdoRs       Set Text1.DataSource = AdoRs
           Set Text2.DataSource = AdoRs
          Set Text3.DataSource = AdoRs       Text1.DataField = "物料"       Text2.DataField = "旧物料号"
       
          Text3.DataField = "物料描述"
         
         Set AdoRs = Nothing    
         sqltext3 = sqltext3 + " and " + tempsql   '保存这一次查询的SQL语句
         
         DataGrid_Positon