2009年11月30日 星期一

繁轉簡Function

繁體轉簡體Function
//做法一:此做法會將BIG5轉為GBK並對應到簡體字
function Big5_To_GB(BIG5Str: String): AnsiString;
var
Len: Integer;
pBIG5Char: PChar;
pGBCHSChar: PChar;
pGBCHTChar: PChar;
pUniCodeChar: PWideChar;
begin
//String -> PChar
pBIG5Char := PChar(BIG5Str);
Len := MultiByteToWideChar(950,0,pBIG5Char,-1,nil,0);
GetMem(pUniCodeChar,Len*2);
ZeroMemory(pUniCodeChar,Len*2);
//Big5 -> UniCode
MultiByteToWideChar(950,0,pBIG5Char,-1,pUniCodeChar,Len);
Len := WideCharToMultiByte(936,0,pUniCodeChar,-1,nil,0,nil,nil);
GetMem(pGBCHTChar,Len*2);
GetMem(pGBCHSChar,Len*2);
ZeroMemory(pGBCHTChar,Len*2);
ZeroMemory(pGBCHSChar,Len*2);
//UniCode->GB CHT
WideCharToMultiByte(936,0,pUniCodeChar,-1,pGBCHTChar,Len,nil,nil);
//GB CHT -> GB CHS
LCMapString($804,LCMAP_SIMPLIFIED_CHINESE,pGBCHTChar,-1,pGBCHSChar,Len);
Result := String(pGBCHSChar);
FreeMem(pGBCHTChar);
FreeMem(pGBCHSChar);
FreeMem(pUniCodeChar);
end;

//作法二:此做法會將BIG5轉為GBK但會對應到GBK的繁體字
function Big52Gb(Str: string): string;
begin
Str:=UnicodeDecode(UnicodeEncode(Str,950),936);
SetLength(Result,Length(Str));
LCMapString(GetUserDefaultLCID,LCMAP_SIMPLIFIED_CHINESE,
PChar(Str),Length(Str),
PChar(Result),Length(Result));
end;

function Gb2Big5(Str: string): string;
begin
SetLength(Result,Length(Str));
LCMapString(GetUserDefaultLCID,LCMAP_TRADITIONAL_CHINESE,
PChar(Str),Length(Str),
PChar(Result),Length(Result));
Result:=UnicodeDecode(UnicodeEncode(Result,936),950);
end;

function UnicodeDecode(Str: WideString; CodePage: integer): string;
var
Len:integer;
begin
Len:=Length(Str)*2+1; //one for #0
SetLength(Result,Len);
Len:=WideCharToMultiByte(CodePage,0,PWideChar(Str),-1,PChar(Result),Len,nil,nil);
SetLength(Result,Len-1);
end;

function UnicodeEncode(Str: string; CodePage: integer): WideString;
var
Len:integer;
begin
Len:=Length(Str)+1;
SetLength(Result,Len);
Len:=MultiByteToWideChar(CodePage,0,PChar(Str),-1,PWideChar(Result),Len);
SetLength(Result,Len-1); //end is #0
end;



2009年11月19日 星期四

資料庫瘦及SQL執行WINDOW指令

以下為資料庫瘦身範例指令 BACKUP LOG QRSDB WITH NO_LOG
DBCC SHRINKFILE('QRSDB_DATA', 1)
DBCC SHRINKFILE('QRSDB_Log', 1)


以下為由SQL Query Analyzer執行WINDOW指令範例
declare @cmd varchar(255)
set @cmd = 'net use \\AP-SERVER samtek /user:administrator'
exec master..xp_cmdshell @cmd
set @cmd = 'DEL /Q \\AP-SERVER\DB_BAK\*.*'
exec master..xp_cmdshell @cmd
set @cmd = 'XCopy /S /K /Y /F D:\DB_BAK\*.* \\AP-SERVER\\DB_Bak\'
exec master..xp_cmdshell @cmd

note:1.執行檔須放在SQL SERVER主機下
2.可將SQL SCRIPT放入SQL排程內定期執行

2009年11月17日 星期二

按鍵精靈簡易做法

以下為簡易按鍵精靈之做法
var h, npad:HWND;
begin
//以工作管理員所顯示之工作名稱取得程式焦點
Npad := FindWindow(nil, pansichar('ITEMNEW - 記事本') );
if npad <> 0 then begin
h:=ChildWindowFromPoint(npad,Point(10,10));
if h <> 0 then begin
BringWindowToTop(Npad); //使其成為focus之window
//將按鍵訊息送給程式
//SendMessage(h, WM_SETTEXT,9,18);
//PostMessage(H, WM_KEYDOWN, VK_RETURN, 0);
//PostMessage(H, WM_KEYDOWN, VK_end, 0);
//PostMessage(H, WM_KEYDOWN, VK_delete, 0);
//PostMessage(H, WM_KEYDOWN, VK_down, 0);
PostMessage(H, WM_KEYDOWN, VK_F3, 0);
end;
end;
end;

最後在將上方之執行程序放到Timmer元件直行即可自動執行

2009年11月16日 星期一

DELPHI EXE檔傳參數做法

以下簡單介紹EXE傳參數做法
參考資料
http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=30437
http://delphi.ktop.com.tw/board.php?cid=30&fid=69&tid=48406
http://delphi.ktop.com.tw/board.php?cid=30&fid=72&tid=89679
接參數
var
aParam1,aParam2,aParam3:string;

在FormCreate時接參數
ShowMessage(IntToStr(ParamCount)); //取得參數個數
aParam1:=ParamStr(1);//第一個參數
aParam2:=ParamStr(2);//第二個參數
aParam3:=ParamStr(3);//第三個參數

傳參數(可寫成BAT檔或直接在COMMAND視窗下執行)
;執行檔案名稱/第一個參數/第二個參數/第三個參數
PrjLF_TrnDATA SAL 20091001 20091031