如何編寫InterBase UDF<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
(作者:Gregory Deatz - Hoagland, Longo, Moran, Dunst & Doukas)
warton 譯
譯者敘:
由於InterBase性能方面表現突出,並且它是開源和跨平臺的,有很多使用Delphi,C++Builder的程序員開始採用它做爲其後數據庫平臺。但是InterBase的中文資料簡直太少了。昨日,一網友在CSDN上提到InterBase的UDF(user defined functions 用戶自定義函數),我順手一查,網上竟然查不到這方面的中文資料。於是,我今天將一篇如何編寫和使用InterBase UDF的文章翻譯給大家,希望使用Interbase,C++Builder,Delphi的朋友能喜歡!
-----warton 2003.01.21
什麼是UDF?
UDF—-( user defined functions)用戶定義函數,是InterBase中採用任何一種語言編寫(一般用C/C++,也可以用其它語言如pascal)並編譯成共享庫的函數。在windows平臺下,共享庫一般指動態鏈接庫(DLL)。
爲什麼編寫UDF?
畢竟存儲過程自身可以實現相當多的功能。那爲什麼還要用UDF呢?
然而,事實是InterBase並沒有提供相當豐富的內置函數。一些普通的函數、字符串操作、日期操作等相關的函數據都沒有提供。
於是這樣的事發生了,像Delphi,C這樣的編程語言可以提供執行速度特別快的模塊算法、日期變量處理、浮點數格式化、及字符中操作程序。
編寫UDF是個狂簡單的任務,這可以說是從所周知了。然而,沒經驗的編寫者可能對編寫DLL/共享庫感覺太難和不安…
使用Delphi編寫Windows平臺的UDF
首先啓動一個Delphi工程
1.啓動車個delphi dll工程(一個特殊類型的工程,當你選擇“File”,“New”)
爲你的函數生成一個新的單元
2.選擇”File”,”New”…UNIT
3.聰明的你最好現在保存所有文件…把你的工程保存到一個你認爲合適的地方。
生成一個模塊程序
4.在新生成的單元文件:
5. 在接口段定義你的函數:
function Modulo(var i, j: Integer): Integer; cdecl; export;
6.實現這個函數:
function Modulo(var i, j: Integer): Integer;
begin
if (j = 0) then
result := -1 // just check the boundary condition, and
// return a reasonably uninteresting answer.
else
result := i mod j;
end;
7.在新生成的工程源代碼中,直接將下面的代碼寫到”begin end.”之上:
Modulo;
8.現在編譯工程,你將得到一個可工作的動態鏈接庫。
9.現在,我必須做的是將這個DLL複製到InterBase可以找到的UDF目錄下,它可能是:
c:/Program Files/Borland/InterBase/UDF
10.如何使用UDF….按如下的操作。使用ISQL連接到一個己存在的新的數據庫
11.寫上如下的代碼:
12提交你的改變。
13.現在測試它…
select f_Modulo(3, 2) from rdb$database
吆…這簡直太簡單了,不是嗎?
但是關於字符串和日期型怎麼處理呢?
(由於時間問題,今天就翻譯到這,我還要編程序,不好意思J:),明天見!!)