2015年1月31日 星期六

數字轉為ABC之函數,最高2碼英文字母

程式目的:

數字轉ABC英文字母,1-->A,26-->Z,27-->AA,以利程式操作Excel時之欄位對應與迴圈撰寫

程式碼:

function NInttoABC(vInt:Integer):string;//傳入整數值
var i,j:Integer;
    vString:String;
begin
  if vInt>26 then i:=vInt div 26//超過第Z欄之處理
  else i:=0;
  j:=vInt mod 26;
  if j=0 then j:=26;
  if i>0 then vString:=Chr(64+i)//第一碼英文轉換處理
  else vString:='';
  vString:=vString+Chr(64+j);//第二碼英文轉換處理
  Result:=vString;
end;

Delphi必備好用函數--執行SQL語法

程式目的:

使用時僅需一行程式碼即可執行SQL語法。

程式碼:

function NSQLExec(vcn,vSQL:string):integer;//vcn指定連結不同資料庫,vSQL:SQL語法
var vQuery:TADOQuery;//動態產生之TADOQuery
begin
  vQuery:=TADOQuery.Create(mainform);//動態產生TADOQuery
  vQuery.EnableBCD:=False;
  if vcn='cnSYS' then vQuery.Connection:=mainform.cnSYS//依傳入之參數選擇連結設定於mainform之資料庫
  else if vcn='cnGroup' then vQuery.Connection:=mainform.cnGroup
  else if vcn='cnHR' then vQuery.Connection:=mainform.cnHr;
  vQuery.Close;
  vQuery.SQL.Text:=vSQL;//傳入SQL語法
  result:=vQuery.ExecSQL;//傳回影響筆數
  FreeAndNil(vQuery);//關閉動態產生TADOQuery
end;

Delphi必備好用函數--數字查詢

程式目的:

使用時僅需一行程式碼即可進行查詢,若為null-->傳回0以利後續處理。

程式碼:

function NZeroQuery(vcn,vSQL:string):variant;//vcn指定連結不同資料庫,vSQL:SQL語法
var vQuery:TADOQuery;//動態產生之TADOQuery
begin
  vQuery:=TADOQuery.Create(mainform);//動態產生TADOQuery
  vQuery.EnableBCD:=False;
  if vcn='cnSYS' then vQuery.Connection:=mainform.cnSYS//依傳入之參數選擇連結設定於mainform之資料庫
  else if vcn='cnGroup' then vQuery.Connection:=mainform.cnGroup
  else if vcn='cnHR' then vQuery.Connection:=mainform.cnHr;
  vQuery.Close;
  vQuery.SQL.Text:=vSQL;//傳入SQL語法
  vQuery.Open;
  vQuery.First;
  if (vQuery.Eof)or(vQuery.Fields[0].Value=null) then
    result:=0//若為null-->轉為0
  else
    result:=vQuery.Fields[0].Value;
  vQuery.Close;
  FreeAndNil(vQuery);//關閉動態產生TADOQuery
end;

Delphi必備好用函數--字串查詢

程式目的:

使用時僅需一行程式碼即可進行查詢,若為null-->傳回空字串以利後續處理。

程式碼:

function NStringQuery(vcn,vSQL:string):string;//vcn指定連結不同資料庫,vSQL:SQL語法
var vQuery:TADOQuery;//動態產生之TADOQuery
begin
  vQuery:=TADOQuery.Create(mainform);//動態產生TADOQuery
  vQuery.EnableBCD:=False;
  if vcn='cnSYS' then vQuery.Connection:=mainform.cnSYS//依傳入之參數選擇連結設定於mainform之資料庫
  else if vcn='cnGroup' then vQuery.Connection:=mainform.cnGroup
  else if vcn='cnHR' then vQuery.Connection:=mainform.cnHr;
  vQuery.Close;
  vQuery.SQL.Text:=vSQL;//傳入SQL語法
  vQuery.Open;
  vQuery.First;
  if (vQuery.Eof)or(vQuery.Fields[0].Value=null) then
    result:=''//若為null-->轉為空字串
  else
    result:=vQuery.Fields[0].AsString;
  vQuery.Close;
  FreeAndNil(vQuery);//關閉動態產生TADOQuery
end;

2015年1月30日 星期五

Delphi產出樞紐分析報表實例解說

程式目的:

    自訂sql語法查詢出結果後,將資料結果匯出至預先製作之excel範本檔(第二頁),讓使用者於excel第一頁操作樞紐分析圖表。

前置作業:

    以Excel製作範本檔,資料存放於第二頁,可預先定義欄位名稱,並輸入一筆資料以利製作樞紐分析圖表時預覽。
    樞紐分析表分析的資料來員請選擇「Microsoft Office Excel清單或資料庫」,建立資料表的來源範圍直接由第二頁欄名選取。


    檔案儲存時請選擇「範本 (*.xlt)」,並將該檔案儲存於執行檔目錄中之「Report」資料夾。



程式碼:

uses Comobj;//uses中加入Comobj

procedure TfmPL.btPrintClick(Sender: TObject);
var MyExcel,MyExcelWorkBook,MySheet:variant;//MyExcel應用程式,MyExcelWorkBook活頁簿,MySheet工作表
    sExcelTempFilePath:String;//執行檔位置
begin
  qrTemp.Close;
  qrTemp.SQL.Text:='Select * from PL where 1=1 ';//組出sql語法
  qrTemp.Open;
  sExcelTempFilePath:=ExtractFilePath(Application.EXEName);//取得執行檔位置
  MyExcel:=CreateOleOBject('Excel.Application');//開啟Excel
  MyExcelWorkBook:=MyExcel.WorkBooks.open(sExcelTempFilePath+'Report\fmPL.xlt');//開啟執行檔目錄中之Report資料夾,開啟fmPL.xlt範本檔
  MySheet:=MyExcel.WorkBooks[1].WorkSheets[2];//將工作表變數定義為第二個工作表
  MyExcel.WorkBooks[1].WorkSheets[2].Cells[2,1].CopyFromRecordset(qrTemp.RecordSet.Get_DataSource);//若RecordSet不須經過處理,直接以CopyFromRecordset將資料待入速度最快
  MyExcel.Visible:=True;
end;