SET @YY='2012'
SET @MM='03'
SET @MM=@MM - 5
IF @MM <= 0
BEGIN
SET @YY=@YY - 1
SET @MM=@MM + 12
END
雖然好像有更好的作法,但找到之前還是將就點吧
2012/07/23
Open dbExpress 安裝
作者:吳祐賓
OpenDBX Sourceforge 下載連結
安裝說明:
一、首先是先安裝bpl到RAD Studio裡面
dbxoodbc\lib\{%DelphiVersion%}\dbxoodbc*.bpl
以XE2來看的話,就會是在「dbxoodbc\lib\delphi-2012(16)XE2\win32」(32bit)目錄裡面
二、接下來再把dbxoodbc\lib\dbxoodbc_driver\(%Platform%)\release目錄裡的相關檔案複製到系統路徑
以Win32系統為例,就是把「dbxoodbc\lib\dbxoodbc_driver\win32\release」複製到Delphi安裝目錄裡的bin資料夾下,也就是「{%DELPHI}\Bin」
三、接下來是要註冊 dbxconnections.ini 及 dbxdrivers.ini
說真的,這兩個檔案不是放在特定資料夾中,常常會找不到它們
以我的XE2為例,它們是放置在「c:\users\public\documents\RAD Studio\dbExpress\9.0」目錄中,如果你的電腦沒有的話,可以在底下的機碼中尋找「[HKEY_CURRENT_USER\Software\Embarcadero\BDS\9.0\DBExpress」
台灣大多數的人都是用SQL Server,所以我們就以它的設定為範本:
===dbxconnections.ini=== ;-------------------------------------------------------------------------------------------------- [dbxoodbc_SS_DirectMode] DriverName=DbxSQLServer GetDriverFunc=getSQLDriverODBCW VendorLib=sqlsrv32.dll;sqlncli10.dll;sqlncli.dll;odbc32.dll Trusted_Connection=No User_Name=name Password=secret BlobSize=-1 RowsetSize=20 OpenOdbc TransIsolation=ReadCommited Trim Char=True Database=? ConnectionString=coCatPrefix=DATABASE;SERVER=? MetaDataPackageLoader=TDBXOpenODBCMetaDataCommandFactoryMSSQL DriverPackageLoader=TDBXDynalinkDriverLoaderOpenOdbc ;-------------------------------------------------------------------------------------------------- ===dbxdrivers.ini=== [Installed Drivers] DbxSQLServer=1 ;-------------------------------------------------------------------------------------------------- [DbxSQLServer] LibraryName=dbxoodbc.dll ProductName=DbxOpenODBC DriverUnit=Dbx34Drv MetaDataPackageLoader=TDBXOpenODBCMetaDataCommandFactoryMSSQL DriverPackageLoader=TDBXDynalinkDriverLoaderOpenOdbc DbxSQLServer TransIsolation=ReadCommited GetDriverFunc=getSQLDriverODBCW VendorLib=sqlsrv32.dll;sqlncli10.dll;sqlncli.dll;odbc32.dll DATABASE=(Database Name) Trusted_Connection=YES User_Name= Password= ConnectionString=coCatPrefix=DATABASE;Server=(Server Name) [DbxSQLServer TransIsolation] DirtyRead=0 ReadCommited=1 RepeatableRead=2 ;--------------------------------------------------------------------------------------------------
四、接下來我們要在bpr裡面,增加一個uses模組項目:
uses DbxXXDrv, ...
五、開啟XE2並建立一個新專案,再drop一個TSQLConnection到裡面,設定
ConnectionName = dbxoodbc_SS_DirectMode
LoginPrompt = False
接下來要注意的是 Params 裡面的項目
============
DriverName=DbxSQLServer
GetDriverFunc=getSQLDriverODBCW
VendorLib=sqlsrv32.dll;sqlncli10.dll;sqlncli.dll;odbc32.dll
Trusted_Connection=No
User_Name=name
Password=secret
BlobSize=-1
RowsetSize=20
OpenOdbc TransIsolation=ReadCommited
Trim Char=True
Database=?
ConnectionString=coCatPrefix=DATABASE;SERVER=?
MetaDataPackageLoader=TDBXOpenODBCMetaDataCommandFactoryMSSQL
DriverPackageLoader=TDBXDynalinkDriverLoaderOpenOdbc
=============
2012/06/13
[轉]Delphi实现Js中的Eval函数
原文網址:Delphi实现Js中的Eval函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 | procedure Eval(Formula: string; { 要計算的表達式 } var Value: Real; { 返回數值 } var ErrPos: Integer); { 錯誤信息 }const Digit: set of Char = ['0'..'9'];var Posn: Integer; { 算式當前位置 } CurrChar: Char; { 算式當前字符 } procedure ParseNext; begin repeat Posn := Posn + 1; if Posn <= Length(Formula) then CurrChar := Formula[Posn] else CurrChar := ^M; until CurrChar <> ' '; end { ParseNext }; function add_subt: Real; var E: Real; Opr: Char; function mult_DIV: Real; var S: Real; Opr: Char; function Power: Real; var T: Real; function SignedOp: Real; function UnsignedOp: Real; type StdFunc = (fabs, fsqrt, fsqr, fsin, fcos, farctan, fln, flog, fexp, ffact); StdFuncList = array[StdFunc] of string[6]; const StdFuncName: StdFuncList = ('ABS', 'SQRT', 'SQR', 'SIN', 'COS', 'ARCTAN', 'LN', 'LOG', 'EXP', 'FACT'); var E, L, Start: Integer; Funnet: Boolean; F: Real; Sf: StdFunc; function Fact(I: Integer): Real; begin if I > 0 then begin Fact := I * Fact(I - 1); end else Fact := 1; end { Fact }; begin if CurrChar in Digit then begin Start := Posn; repeat ParseNext until not (CurrChar in Digit); if CurrChar = '.' then repeat ParseNext until not (CurrChar in Digit); if CurrChar = 'E' then begin ParseNext; repeat ParseNext until not (CurrChar in Digit); end; Val(Copy(Formula, Start, Posn - Start), F, ErrPos); end else if CurrChar = '(' then begin ParseNext; F := add_subt; if CurrChar = ')' then ParseNext else ErrPos := Posn; end else begin Funnet := False; for sf := fabs to ffact do if not Funnet then begin l := Length(StdFuncName[sf]); if Copy(Formula, Posn, l) = StdFuncName[sf] then begin Posn := Posn + l - 1; ParseNext; f := UnsignedOp; case sf of fabs: f := abs(f); fsqrt: f := SqrT(f); fsqr: f := Sqr(f); fsin: f := Sin(f); fcos: f := Cos(f); farctan: f := ArcTan(f); fln: f := LN(f); flog: f := LN(f) / LN(10); fexp: f := EXP(f); ffact: f := fact(Trunc(f)); end; Funnet := True; end; end; if not Funnet then begin ErrPos := Posn; f := 0; end; end; UnsignedOp := F; end { UnsignedOp}; begin { SignedOp } if CurrChar = '-' then begin ParseNext; SignedOp := -UnsignedOp; end else SignedOp := UnsignedOp; end { SignedOp }; begin { Power } T := SignedOp; while CurrChar = '^' do begin ParseNext; if t <> 0 then t := EXP(LN(abs(t)) * SignedOp) else t := 0; end; Power := t; end { Power }; begin s := Power; while CurrChar in ['*', '/'] do begin Opr := CurrChar; ParseNext; case Opr of '*': s := s * Power; '/': s := s / Power; end; end; mult_DIV := s; end; begin E := mult_DIV; while CurrChar in ['+', '-'] do begin Opr := CurrChar; ParseNext; case Opr of '+': e := e + mult_DIV; '-': e := e - mult_DIV; end; end; add_subt := E; end;begin if Formula[1] = '.' then Formula := '0' + Formula; if Formula[1] = '+' then Delete(Formula, 1, 1); for Posn := 1 to Length(Formula) do Formula[Posn] := Upcase(Formula[Posn]); Posn := 0; ParseNext; Value := add_subt; if CurrChar = ^M then ErrPos := 0 else ErrPos := Posn;end; |
2012/06/10
2012/05/29
Variant function: VarIsEmpty VS VarIsNULL
unassined :
NULL :
資料來源:http://www.sql.ru/forum/actualthread.aspx?tid=329100
if Not VarIsEmpty( DeltaDs.Fields[i].NewValue ) then ...
NULL :
if Not VarIsNULL( DeltaDs.Fields[i].NewValue ) then ...
資料來源:http://www.sql.ru/forum/actualthread.aspx?tid=329100
2012/05/25
使用 OLE 開啟 Excel 的小陷井
從MSDN上看到Workbook.Open函式是這樣寫的:
一票網站在抄來抄去,除了第一個參數是Filename不變外,其它不是都沒給值,就是直接給EmptyParam
Workbook Open( [In] string Filename, [In, Optional] object UpdateLinks, [In, Optional] object ReadOnly, [In, Optional] object Format, [In, Optional] object Password, [In, Optional] object WriteResPassword, [In, Optional] object IgnoreReadOnlyRecommended, [In, Optional] object Origin, [In, Optional] object Delimiter, [In, Optional] object Editable, [In, Optional] object Notify, [In, Optional] object Converter, [In, Optional] object AddToMru, [In, Optional] object Local, [In, Optional] object CorruptLoad );
一票網站在抄來抄去,除了第一個參數是Filename不變外,其它不是都沒給值,就是直接給EmptyParam
2012/05/07
訂閱:
文章 (Atom)