使用过Access数据库的朋友可能使用过其"按选定内容筛选"的功能,即先用鼠标选定字段中的部分文字,然后选择菜单"记录->筛选->按选定内容筛选",Access将自动把数据库表中所有包含这部分文字的字段信息列出,请问这种功能如何实现???
  能给我个思路吗?

解决方案 »

  1.   

    DBGrid在Option里面可以设置选择多行;
    选中的每一行对应相应的TBookMark对象,你从这个方向去想想吧!
      

  2.   

    //==============================================================================
    //DBGrid.根据选择的字段过滤*****************************************************
    //==============================================================================
    procedure TexDockForm.DBGridSelectFilter(Sender: TObject);
    var FilterStr: string;
    begin
      with (((Sender as TMenuItem).Owner as TPopupMenu).PopupComponent as TDBGrid) do
      begin
        FilterStr := SelectedField.FieldName + ' = ''' + SelectedField.AsString + '''';
        if DataSource.DataSet.Filter=''
        then DataSource.DataSet.Filter := FilterStr
        else if Pos(FilterStr, DataSource.DataSet.Filter)<=0
             then DataSource.DataSet.Filter := DataSource.DataSet.Filter + ' and ' + FilterStr
             else FilterStr := '';
        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        DataSource.DataSet.Filtered := true;
        TRowCountThread.Create(((Sender as TMenuItem).Owner as TPopupMenu).PopupComponent as TDBGrid);
      end;
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      with (Sender as TMenuItem) do
      begin
        if Count=0 then
        begin
          Add(TMenuItem.Create(Owner as TPopupMenu));
          Items[Count-1].Caption := '撤销过滤';
          Items[Count-1].OnClick := DBGridCancelFilter;
        end;
        if Length(FilterStr)>0 then
        begin
          Add(TMenuItem.Create(Owner as TPopupMenu));
          Items[Count-1].Caption := FilterStr;
          Items[Count-1].OnClick := DBGridRecedeFilter;
        end;
      end;
    end;
      

  3.   

    可以用过滤吗,table.filter
    简单