顯示具有 問題修正 標籤的文章。 顯示所有文章
顯示具有 問題修正 標籤的文章。 顯示所有文章

星期三, 5月 19, 2010

檢查MDAC2.8是否有安裝

dpr下寫

if not CheckMDACVersionOK( _MDAC_V26 ) then
begin
OneBtnMsgBox(LoginLangInfo.g_saMsg[160], MB_ICONINFORMATION);// 資料庫存取發生錯誤!//請先安裝 MDAC 2.8 或以上版本。
exit;
end;


呼叫到的funcion

uses registry;

const
_MDAC_V26 = '2.6'; //MDAC 2.6 SQL Server 所需

//----------------------------------------------------------------------------//
// CheckMDACVersionOK 檢查MDAC版本是否夠新 //
// 支援postgreSql後改為外部傳參數決定版本 by FBI 2005-1108 //
// 參數: //
// (1) sVer : 檢查版號 //
//----------------------------------------------------------------------------//
function CheckMDACVersionOK(sVer : String):boolean;
var
Reg :TRegistry;
sVersion:string;

begin
Result:=false;
Reg:=TRegistry.Create;
try
Reg.RootKey:=HKEY_LOCAL_MACHINE;
if not Reg.OpenKeyReadOnly('\SOFTWARE\Microsoft\DataAccess') then exit;
sVersion:=Reg.ReadString('FullInstallVer');
if sVersion='' then exit; //讀不到 Key,代表沒安裝MDAC
finally
Reg.Free;
end;
//檢查版本: MS 官方文件限制在 MDAC 2.6 以上。
try
//sVersion:=Copy(sVersion,1,3);
if sVersion < sVer then exit;
except
exit;
end;
Result:=true;
end;

星期四, 3月 05, 2009

避免Delphi的TDateTimePicker的onChange事件會執行二次


procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
if (DateTimePicker1.DroppedDown) then
exit;
DateTimePicker1CloseUp(sender);
end;

procedure TForm1.DateTimePicker1CloseUp(Sender: TObject);
begin
//你不想執行二次的程式碼
end;

星期五, 5月 02, 2008

StrToDate可能會發生not a valid date

這是因為控制台->地區選項->日期分隔字元或型式有改變。
這是你須用程式去設定其地區選項設定

//設定日期格式為 yyyy/MM/dd
SetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SSHORTDATE, 'yyyy/MM/dd') ;

//設定日曆格式為1 型式
SetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_ICALENDARTYPE, '1') ;

星期三, 4月 23, 2008

UpperCase轉中文字時會出現錯誤的問題

可用UpperCaseEx來取代UpperCase函數

function UpperCaseEx(const S: string): string;
var
Ch: Char;
L: Integer;
Source, Dest: PChar;
nH: Integer;
begin
L := Length(S);
SetLength(Result, L);
Source := Pointer(S);
Dest := Pointer(Result);
nH := 0;
while L <> 0 do
begin
Ch := Source^;
if nH = 0 then
if Ord(ch) >= 128 then
nH := 2;
if nH > 0 then
Dec(nH)
else
if (Ch >= 'a') and (Ch <= 'z') then Dec(Ch, 32);
Dest^ := Ch;
Inc(Source);
Inc(Dest);
Dec(L);
end;
end;