ADOQUERY1.CLOSE; ADOQUERY1.SQL.CLEAR; ADOQUERY1.SQL.ADD('SELECT * FROM TABLE') ADOQUERY1.OPEN; ADOQUERY1关连DATASOURCE关连DBGRID
过滤,查找,导出没有什么简单的方法. 如果你不想自已写的话,可以借且DevExpress控件.
把SQL语句作为变量传到窗口中,让窗口执行
数据库有三个表,表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;不知道是不是你要求的那样,有问题留言切磋了!
ADOQUERY1.SQL.CLEAR;
ADOQUERY1.SQL.ADD('SELECT * FROM TABLE')
ADOQUERY1.OPEN;
ADOQUERY1关连DATASOURCE关连DBGRID
如果你不想自已写的话,可以借且DevExpress控件.
当窗口打开按要求自动选择。
窗体内有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;不知道是不是你要求的那样,有问题留言切磋了!