2010-07-30 82 views
1

在Delphi 2006中,我使用了一个基于tbudf.pas和我自己添加的一些函数的用户定义函数库。由于我在工资计划上工作,此功能对于一些常见的工资核算概念非常有用,否则这些概念可能需要一些复杂的SQL。我保留了我的Delphi 2006安装,昨天我发现在Delphi 2010中编译我的udf库需要做一些工作。更新Firebird UDF库到Delphi 2010

虽然我的确了解了我的dll和Firebird服务器之间的数据传递是如何工作的,但我通常只是使用tbudf中存在的函数来设置我自己的函数。不幸的是,没有使用unicode字符编码的功能。也许这并不是什么大事,因为我已经将所有带有数据库的Delphi 2010 I/O都设置为使用AnsiStrings,所以也许我可以改变任何Delphi 2010的函数来使用类似于PAnsiChar的东西。但我会在这里开辟一条新的道路。

是否有任何已经更新到Delphi 2010的开放udf库?如果您有关于需要注意什么的提示,也许我可以使用它们来更新我自己的图书馆并将其发布给需要它的其他人。

+0

它看起来像我可能有一个误解开始了。看起来,PChar(指向一个空终止字符串的指针)的unicode替换应该可能是PAnsiString而不是PAnsiChar。 – jrodenhi 2010-07-30 19:28:40

+0

不可以。帮助信息表明PAnsiChar定义了一个空字符串,就像Delphi 2010之前的PChar一样。 – jrodenhi 2010-07-30 19:40:58

回答

3

我用unicode中的firebird数据库移动了整个项目。

关于udfs,如果您想保持数据库的编码原样,可以使用AnsiString/PAnsiChar而不是string/PChar。

但是,如果您想使用UTF8编码您的数据库并在Delphi中利用Unicode,则应该使用UTF8String类型。

请注意,数据库连接的编码与数据库本身的编码不同。您还应该注意UTF8中字符串的长度。

为了将数据库转换为UTF-8,这个工具将是对你有用: http://code.google.com/p/fbclone/

+0

感谢Henri。在阅读您的回复后,我回过头去查看了dll代码以进行更改。它现在似乎按预期工作。目前,将数据库转换为使用unicode字符编码将不会产生任何好处,并且可能会在已部署的数据库中造成破坏性,我将继续使用数据库中的8位字符。 – jrodenhi 2010-07-31 20:42:12