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

php中文网
发布: 2016-06-07 15:32:30
原创
1419人浏览过

以 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         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

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号