描述:
    1、我开发的一个查询系统中,用到DBGridEh1控件在显示查询数据,
    2、使用TADOQuery,DataSource查询出数据源,
    如下语句进行实现:
if (RunSql(DM->ADOQuerySQL,Txtsql))  //RunSql执行数据库查询的一个方法,Txtsql是SQL语句
{
    if (DM->ADOQuerySQL->RecordCount <= 0)
    {
        Application->MessageBoxA("未查询到任何记录!","提示",MB_OK|MB_ICONINFORMATION);                                
        return;
    }
    DataSource1->DataSet = DM->ADOQuerySQL;
    FrmInAndOutRecord->DBGridEh1->DataSource = NULL;
    FrmInAndOutRecord->DBGridEh1->DataSource = DataSource1;
}
问题:
    1、将DBGridEh1内数据导出至Excel,DBGridEh1内的数据量比较大,一般会有几万条,目前所做的导出方法是将DBGridEh1每行数据逐行导出,效率相当低,请问各位同仁,有谁有更好更快的方法来解决效率问题?

解决方案 »

  1.   

    可以利用Excel的CopyFromRecordset Recordset 快速导出数据还有利用ClipBoard也可以快速导出数据最近看了一个利用文件流的也可以不过还是剪贴板最快
      

  2.   

    DBGridEh1 本身有导出Excel的功能
      

  3.   

    因为最近没有做delphi 
    ClipBoard具体流程:
       将数据转到StringGrid中,
       将StringGrid的部分copyto ClipBoard 中
       然后 Pasteto Excel的指定Range
    文件流以流的形式写入数据集的自己可以先查查相关代码看看
      

  4.   

    //DBGridEh1 导出Excel
    #include <DBGridEhImpExp.hpp>
    ...
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    SaveDBGridEhToExportFile(__classid(TDBGridEhExportAsXLS),DBGridEh1,"e:\\temp\\t.xls",true);
    }
      

  5.   

    文件流的方式:写为 html 文件(写时当作二进制文件写,需要使用 html 文件模板)
    使用 Excel 打开 html 文件另存为 Excel 文件即可
      

  6.   

    看我的blog...应该比剪贴板快吧.
      

  7.   

    cxDBGrid的导出效率也还可以,45k条数据14个字段导出时间差不多在1分钟之内