DBGridEh導出功能詳解(SaveDBGridEhToExportFile說明)
---
經常有使用者要求資料導出,對此,我們一直用最原始的辦法,打開查詢,讀取每個字段的資料,逐條的的寫入檔案。如下:
procedure TForm10.prExpData(pMode:Byte);
Var
pFPath:String;
pFName:String; //Exp Name of prefix
pFObject:string;
pMyFile:TextFile;
pStr:string;
i:integer;
begin
pFObject:='c:\Exp_Sample.csv';
AssignFile(pMyFile,pFObject);
ReWrite(pMyFile);
with DM.QR_ENJBTR_250 do begin
CLOSE;
open;
//寫入标題
for i:=0 to DM.QR_ENJBTR_250.FieldCount-1 do begin
pStr:=pStr+DM.QR_ENJBTR_250.FieldDefs.Items[i].Name+',';
end;
WriteLn(pMyFile,pStr);
//寫入内容
while not EOF do begin
pStr:='';
For i:=0 to FieldCount-1 do begin
pstr:=pStr+Fields.Fields[i].AsString+',';
end;
//copy(pStr,1,Length(pStr)-1);
WriteLn(pMyFile,pStr);
Next;
end;
end; //With end;
xMsg:='--->成功導出PurPart明細表:'+pFObject; cpWriteLog(x_pLogFile,xMsg,1); // V2033 Add
CloseFile(pMyFile);
end;
後來發現,其實DBGridEh控件提供了一個過程:SaveDBGridEhToExportFile,提供了很好的導出功能,可以友善的将查詢出的資料導出為txt,csv,html等格式的檔案。
說明如下:
procedure SaveDBGridEhToExportFile( ExportClass: TDBGridEhExportClass; DBGridEh: TCustomDBGridEh; const FileName: String; IsSaveAll: Boolean);
其中:
ExportClass--導出檔案類型,可以為以下值:TDBGridEhExportAsText, TDBGridEhExportAsCsv, TDBGridEhExportAsHTML, TDBGridEhExportAsRTF, TDBGridEhExportAsVCLDBIF,TDBGridEhExportAsXLS.
DBGridEh--DBGridEh控件
FileName--要導出的檔案路徑名稱
IsSaveAll--是否導出全部資料:Y-導出全部資料;N:導出選擇部分資料。
注意:
使用時必須添加新的引用單元:DBGridEhImpExp(以下兩個引用單元也必須存在:DBGridEh, EhLibBDE)。
示例:
SaveDBGridEhToExportFile(pExpClass,dbgMain,pExpFile,True); //導出全部資料。
SaveDBGridEhToExportFile(pExpClass,TDBGridEh(ActiveControl),pExpFile,False); //導出選擇資料
//全部導出過程
procedure TForm1.btnAllExportClick(Sender: TObject);
var
pExpClass:TDBGridEhExportClass; //導出檔案類型
pExt:string ; //導出檔案擴充名
pExpFile:string; //導出檔案路徑及檔案名稱
pExpFileExt:string; //SaveDialog1傳回的檔案名的擴充名
begin
//清空SaveDialog1預設檔案名
SaveDialog1.FileName := '';
if SaveDialog1.Execute then begin //如果SaveDialog1正确執行
case SaveDialog1.FilterIndex of //根據FilterIndex設定導出檔案類型和擴充名
1: begin pExpClass := TDBGridEhExportAsText; pExt := 'txt'; end;
2: begin pExpClass := TDBGridEhExportAsCSV; pExt := 'csv'; end;
3: begin pExpClass := TDBGridEhExportAsHTML; pExt := 'htm'; end;
4: begin pExpClass := TDBGridEhExportAsRTF; pExt := 'rtf'; end;
5: begin pExpClass := TDBGridEhExportAsXLS; pExt := 'xls'; end;
else
pExpClass := nil; pExt := '';
end;
if pExpClass <> nil then begin //如果導出檔案類型已經被正确設定
pExpFile:= trim(SaveDialog1.FileName);
pExpFileExt:= Copy(pExpFile,Length(pExpFile)-2,3);
//判斷傳回的檔案名稱是否已經包含正确的擴充名,如果沒有則添加正确的擴充名
if UpperCase(pExpFileExt) <> UpperCase(pExt) then
pExpFile := pExpFile + '.' + pExt;
SaveDBGridEhToExportFile(pExpClass,DBGridEh1,pExpFile,True); //按現有設定導出全部資料。
//X_pMsg:='The data have saved as '+pExpFile;
//stbForm.Panels[0].Text:=X_pMsg;
MessageDlg('The data have saved as '+pExpFile,mtInformation,[mbOk],0);
end;
end;
end;
//部分導出過程
procedure TForm1.btnAllExportClick(Sender: TObject);
var
pExpClass:TDBGridEhExportClass; //導出檔案類型
pExt:string ; //導出檔案擴充名
pExpFile:string; //導出檔案路徑及檔案名稱
pExpFileExt:string; //SaveDialog1傳回的檔案名的擴充名
begin
//清空SaveDialog1預設檔案名
SaveDialog1.FileName := '';
if SaveDialog1.Execute then begin //如果SaveDialog1正确執行
case SaveDialog1.FilterIndex of //根據FilterIndex設定導出檔案類型和擴充名
1: begin pExpClass := TDBGridEhExportAsText; pExt := 'txt'; end;
2: begin pExpClass := TDBGridEhExportAsCSV; pExt := 'csv'; end;
3: begin pExpClass := TDBGridEhExportAsHTML; pExt := 'htm'; end;
4: begin pExpClass := TDBGridEhExportAsRTF; pExt := 'rtf'; end;
5: begin pExpClass := TDBGridEhExportAsXLS; pExt := 'xls'; end;
else
pExpClass := nil; pExt := '';
end;
if pExpClass <> nil then begin //如果導出檔案類型已經被正确設定
pExpFile:= trim(SaveDialog1.FileName);
pExpFileExt:= Copy(pExpFile,Length(pExpFile)-2,3);
//判斷傳回的檔案名稱是否已經包含正确的擴充名,如果沒有則添加正确的擴充名
if UpperCase(pExpFileExt) <> UpperCase(pExt) then
pExpFile := pExpFile + '.' + pExt;
SaveDBGridEhToExportFile(pExpClass,DBGridEh1,pExpFile,False); //按現有設定導出全部資料。
//X_pMsg:='The data have saved as '+pExpFile;
//stbForm.Panels[0].Text:=X_pMsg;
MessageDlg('The data have saved as '+pExpFile,mtInformation,[mbOk],0);
end;
end;
end;