当前位置:Gxlcms > mysql > Access数据表分页显示&导入数据库

Access数据表分页显示&导入数据库

时间:2021-07-01 10:21:17 帮助过:27人阅读

以 Delphi 开发基于 Oracle/SQL Server 的数据库应用程序,在显示表中数据时,若数据量过大,难免要应用 分页 技术――幸运的是,诸于此两者的大型 DBMS,对 分页 提供了良好的支持,但对 M$Access 来说却要麻烦些――前提自然是 Access 表中没有自增字段―

以 Delphi 开发基于 Oracle/SQL Server 的数据库应用程序,在显示表中数据时,若数据量过大,难免要应用 分页 技术――幸运的是,诸于此两者的大型 DBMS,对 分页 提供了良好的支持,但对 M$ Access 来说却要麻烦些――前提自然是 Access 表中没有自增字段――而这正是关键...

实现步骤:
一、变量定义
FTotalRecCountMDB: Integer; //Access 库中表的记录数
FFieldLstAndType: string; //字段及字段类型列表
FFieldLst: string; //字段列表

二、变量使用(示例)
FFieldLstAndType:= 'Name varchar(255); Age integer; Addr varchar(255)';
FFieldLst:= 'Name; Age; Addr';

三、准备
//创建同结构临时表――多出 ID 自增字段!
//aqy_Tmp 已连接至对应的 Access
with aqy_Tmp do //aqy_Tmp: TADOQuery
begin
Close;
SQL.Text:= 'Create Table _TabTmp(ID Counter PRIMARY KEY,' + FFieldLstAndType + ')';
ExecSQL;
Close;
end;

//将所选的表中的数据 Copy 到临时表
with aqy_Tmp do
begin
Close;

SQL.Text:=
'Insert Into _TabTmp(' + FFieldLst + ')' +
'Select ' + FFieldLst + ' From ' + edt_TabName.Text; //edt_TabName: TEdit;

ExecSQL;
Close;
end;

四、OK,分页显示&导入DB //每 万条 分一页,<= 万条无需分页――当然,此可更改为 千条、十万条 等。
var
i{, j}: integer;
BatchCount: Integer;
begin
with aqy_Tmp do
begin
if FTotalRecCountMDB <= 10000 then //若需导入的总量 <= 10,000 条,无需分页(批次)导入
begin
if Active then
Close;

SQL.Text:= 'select * from _TabTmp';
Open;

//then import datas into DB
{while not Eof do
...
Next;
}
end
else
begin
if FTotalRecCountMDB mod 10000 = 0 then
BatchCount:= FTotalRecCountMDB div 10000
else
BatchCount:= FTotalRecCountMDB div 10000 + 1;

for i:= 0 to BatchCount - 1 do
begin
if Active then
Close;

//分页
SQL.Text:=
'select * from _TabTmp where ID Between ' +
IntToStr((i * 10000) + 1) + ' and ' + IntToStr((i + 1) * 10000);

Open;

//other codes that import datas to DB
{while not Eof do
...
Next;
}
end; //end for loop
end; //batch end

//delete _TabTmp
if Active then
Close;
SQL.Text:= 'Drop Table _TabTmp';
ExecSQL;
Close;
end; //end with aqy_Tmp
end;

OK,Done!

实际应用中当然至少还应加进 异常处理,及 Application.ProcessMessages 以免在导数据入库过程中程序假死~

ADelphiCoder

人气教程排行