数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
[UDF系列]如何编写InterBase UDF 之一

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

如何编写InterBase UDF

(作者:Gregory Deatz - Hoagland, Longo, Moran, Dunst & Doukas)

warton

 

译者叙:

由于InterBase性能方面表现突出,并且它是开源和跨平台的,有很多使用Delphi,C++Builder的程序员开始采用它做为其后数据库平台。但是InterBase的中文资料简直太少了。昨日,一网友在CSDN上提到InterBaseUDF(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.”之上:

   exports

Modulo;

8.现在编译工程,你将得到一个可工作的动态链接库。

9.现在,我必须做的是将这个DLL复制到InterBase可以找到的UDF目录下,它可能是:

c:\Program Files\Borland\InterBase\UDF

10.如何使用UDF….按如下的操作。使用ISQL连接到一个己存在的新的数据库

11.写上如下的代码:

        declare external function f_Modulo
        integer, integer
        returns
        integer by value
        entry_point 'Modulo' module_name 'dll name minus ".dll"';

12提交你的改变。

13.现在测试它

select f_Modulo(3, 2) from rdb$database

 

   这简直太简单了,不是吗?

但是关于字符串和日期型怎么处理呢?

   

       (由于时间问题,今天就翻译到这,我还要编程序,不好意思J:),明天见!!)




相关文章

相关软件