数据库有三个表,表A,表B,表c.
当窗口打开按要求自动选择。
窗体内有DBGrid,要进行数据的筛选、查找、导出.
如何编写一个简单的变量进行操作?

解决方案 »

  1.   

    下载第三方控件吧,有筛选功能的cxGrid
      

  2.   

    ADOQUERY1.CLOSE;
    ADOQUERY1.SQL.CLEAR;
    ADOQUERY1.SQL.ADD('SELECT * FROM TABLE')
    ADOQUERY1.OPEN;
    ADOQUERY1关连DATASOURCE关连DBGRID
      

  3.   

    过滤,查找,导出没有什么简单的方法.
    如果你不想自已写的话,可以借且DevExpress控件.
      

  4.   

    把SQL语句作为变量传到窗口中,让窗口执行
      

  5.   

    数据库有三个表,表A,表B,表c. 
    当窗口打开按要求自动选择。 
    窗体内有DBGrid,要进行数据的筛选、查找、导出. 
    如何编写一个简单的变量进行操作?//你说的这些功能都很简单。
    //具体做法:
    1、加入一个过程,在窗口打开时候按要求自动选择表,具体代码如下:
    procedure SetTable(aTable:string); 
    begin
      with QryTmp do
      begin
        close;
        Sql.clear;
        Sql.add('select * from '+ aTable ); 
        Open;
      end;
    end;
    2、筛选,如果数据都已经查询出来后,直接用Filter属性即可,代码如下:
    procedure FilterData(aField,aValue:string);
    begin
      with QryTmp do
      begin
        Filtered := False;
        Filter := ''''+aField+''' = '''+aValue+'''';
        Filtered := True;
      end;
    end;
    3、查找,不知道你的意思是不是从数据库中查找,还是从数据集里过滤呢
       如果是从数据库里查找的话,代码如下:
    procedure SetTable(aTable,aField,aValue:string); 
    begin
      with QryTmp do
      begin
        close;
        Sql.clear;
        Sql.add('select * from '+ aTable + ' where '+ '+aField+' like '%''+aValue+''%'); 
        Open;
      end;
    end;
    4、导出,不知道导出什么格式呢?.Xls?Txt?,
       说明:下面导出是代标题的,RptTitle就是导出时的标题。Grid参数是TDBGrid
       那就以ExCEl为例吧,代码如下:
    {****************************************************************
    Name :       DBGridToExcel
    Description: 导出DBGRIDEH数据(格式;Excel)
    INPUT:
       RptTitle :导出报表标题名称
       Grid     :要导出数据的Grid
    OUTPUT:
        -1      :出错
        >0      :记录条数
    DATE:       :08.20
    ==================================================================}
    function DBGridToExcel(RptTitle:String;Grid: TDBGridEh): Integer;
      var
      i,j,k:integer;
      ColTitle,FieldData,Msg :string;
      StrList :Tstringlist;
      SaveDlg: TSaveDialog;
    begin
        SaveDlg := TSaveDialog.Create(nil);
        StrList:=TStringList.Create;
      try
        //初始化
        Result :=-1;
        if Grid.DataSource = nil then Exit;
        if Grid.DataSource.DataSet = nil then Exit;
        if not Grid.DataSource.DataSet.Active then Exit;
        if Grid.DataSource.DataSet.IsEmpty then Exit;
        SaveDlg.Filter := 'Excel文档|*.xls';
        if not SaveDlg.Execute then Exit;
        FieldData := '';
        ColTitle  := '';
        //加入报表名称
        StrList.add(RptTitle);
        //加入字段名(列标题首先须改为汉字),才能输出汉字标题
        for k :=0 to (Grid.FieldCount-1) do
        begin
          if not Grid.Columns[k].Visible then
            continue
          else
            ColTitle :=ColTitle+(Grid.Columns[k].Title.Caption)+#9;
        end;
        StrList.add(ColTitle);
        //加入数据
        with Grid.DataSource.DataSet do
        begin
            DisableControls;
            First;
            for j:=0 to (RecordCount-1) do
            begin
              FieldData:='';
              for i:=0 to (Grid.FieldCount-1) do
              begin
                if not Grid.Columns[i].Visible then
                  continue
                else
                  FieldData:=FieldData+(Grid.DataSource.DataSet.FieldByName(Grid.Columns[i].FieldName).AsString)+#9;
              end;
              StrList.add(FieldData);
              Next;
            end;
            First;
            EnableControls;
        end;
        //文件覆盖提示
        if FileExists(SaveDlg.FileName+'.xls') then
        begin
          Msg := '已存在文件(' + SaveDlg.FileName + '),是否覆盖?';
          if ShowAsk(PChar(Msg)) then
          begin
            //删除文件
            DeleteFile(SaveDlg.FileName)
          end
          else
            exit;
        end;
        //保存文件
        StrList.savetofile(SaveDlg.FileName+'.xls');
        Result := Grid.DataSource.DataSet.RecordCount; //返回记录数
      finally
        SaveDlg.Free;
        StrList.Free;
      end;
    end;不知道是不是你要求的那样,有问题留言切磋了!