【问题标题】:Firebird BLR 623 invalid request - LRTRIM is not defined - module name or entrypoint could not be foundFirebird BLR 623 无效请求 - 未定义 LRTRIM - 找不到模块名称或入口点
【发布时间】:2015-10-12 12:09:08
【问题描述】:

我在 Firebird 2.5 数据库中工作:

当我运行一些使用 LRTRIM 函数的存储过程或视图(数据库对象)时,有时(并非总是)会出现以下错误:

令牌无效。 偏移量 623 处的无效请求 BLR 函数 LRTRIM 未定义 找不到模块名称或入口点 解析过程 XXXXXXX (stored_procedure name) 时出错;

(我在 IB Expert 和 SSRS 中都得到了这个)

这表示我可以访问其他不使用 LRTRIM 功能的数据库对象!

我在使用 LTRIM 时遇到了类似的问题,现在我正在使用 LRTRIM。几天前,我将 firebird.msg 从 Firebird 文件夹复制到 Windows 文件夹,这是我收到的新错误消息。

我的临时解决方法:

有时我重新启动机器,并且能够运行这些相同的存储过程和视图,这些存储过程和视图有时会引发此错误。在其他时候,我重新启动机器几次,并且能够访问这些视图和存储过程。

在其他时候,我多次重启机器,仍然无法运行数据库对象。我感到沮丧并放弃了这一天。当我第二天早上重新打开机器时,我可以再次运行这些对象。

这可能是什么原因?什么是永久的解决方案?

**现在我有了这个: 在 32 位文件夹中: C:\Program Files (x86)\Firebird\Firebird_2_5\udf ,我找到这 8 个文件: fbudf.dll,fbudf.sql,fbudf.txt, ib_udf.dll,ib_udf.sql,ib_udf2.sql,udf.dll,UDFPrici‌​ng.dll;

但在 64 位文件夹中: C:\Program Files\Firebird\Firebird_2_5\UDF ,我找到这 6 个文件: fbudf.dll,fbudf.sql,fbudf.txt,ib_udf.dll,ib_udf.sql,ib_udf2 .sql(我没有找到 32 位文件夹中存在的最后 2 个 .dll 文件 - udf.dll 和 UDFPricing.dll)**

【问题讨论】:

  • LRTRIM 看起来像一个错字(LTRIM),你确定 1)它是 LRTRIM 并且 2)你实际上有一个 LRTRIM 的 UDF 定义,并且3) 您的 UDF 库(或库)实际上有一个入口点,用于为 LRTRIM UDF 定义的任何内容?
  • 这个问题被问了好几次,在 cmets 中都有答案。 stackoverflow.com/questions/32840414/… 请了解 Firebird 客户端和服务器之间的区别(例如从这里:firebirdsql.org/manual/ufb-cs.html 或这里:firebirdsql.org/manual/ufb-cs-clientlib.html
  • @ValMarinov 这个问题是由同一个用户提出的,唯一的区别似乎是关于 LTRIM,而这个关于 LRTRIM。
  • @Mark 我认为这是个问题。
  • 正如我还评论了您在 Firebird 跟踪器上发布的错误报告,您真的应该在 firebird-support 邮件列表上发布。您的服务器设置存在非常持久的问题,或者其他问题需要比 StackOverflow 等问答网站更多的故障排除。请查看 firebirdsql.org/en/mailing-lists 了解如何订阅 firebird-support。

标签: request firebird


【解决方案1】:

在您当前的设置中,您似乎有两个 Firebird 服务器

  1. C:\Program Files (x86)\Firebird\Firebird_2_5 中的 32 位,
  2. C:\Program Files\Firebird\Firebird_2_5 中的 64 位

您的 UDF 声明指向模块 UDF,这不是标准的 UDF,因此这很可能是您的客户提供的,用于与他们的数据库一起使用。在 32 位服务器安装中,您只有这些 UDF 的库,这意味着您只能使用 32 位服务器。在某些未知的情况下,您在 32 位和 64 位服务器之间切换,这意味着随后会与 64 位服务器建立连接,该服务器没有所需的 UDF,从而导致错误。您应该卸载 64 位服务器,这样就不会发生这种情况。

您评论说由于 SRSS,您需要两者,但事实并非如此。您只需要一个 Firebird 服务器(32 位 64 位;在本例中是 32 位,因为 UDF)和客户端库(32 位 64 位)您的应用程序。

那么你需要做什么:

  1. 卸载 64 位 Firebird 服务器,
  2. 启动 64 位 Firebird 安装程序并仅安装客户端组件。

最后仔细检查连接字符串或连接属性,以确保您始终连接到同一个服务器(主机和端口),并且您不会意外使用嵌入式连接。

【讨论】:

  • 有点道理马克;我真的没有得到服务器+客户端的术语;今天,我的同事也提出了一些类似的建议。我会回复的,非常感谢。同时,我已经向 Firebird 支持小组发送了另一封电子邮件,提供了 UDF 的定义。我想你可能也看到了。
  • @user3812887 服务器是打开数据库文件并向客户端提供对数据库的访问,客户端动态链接到应用程序并代表服务器与服务器进行通信(通常通过有线协议)应用程序。
  • 或者,我不能在 64 位服务器 UDF 文件夹中添加 udf.dll 吗?这与您提供的解决方案相同吗?只是想知道这是否也是可能的
  • @user3812887 不,您不能将 32 位 DLL 与 64 位应用程序一起使用。如果您想这样做,您需要询问您的客户是否也有用于这些 UDF 的 64 位 DLL。
  • 您可以提供任何链接来单独安装 Firebird 2.5 64 位客户端吗?我只是不想从未知网站下载。
【解决方案2】:

对我来说,解决方案是:

  1. 进入默认的Firebird目录安装(一般在C:\Program Files\Firebird\Firebird_3_0);
  2. 在记事本中打开文件firebird.conf;
  3. 搜索参数UdfAccess;
  4. 在参数名称 (#UdfAccess) 前使用字符 #(井号标签)注释该行;
  5. 在 Windows 搜索框中输入 services.msc;
  6. 找到 Firebird 服务;
  7. 使用鼠标右键单击 Firebird 服务;
  8. 选择停止;
  9. 使用鼠标右键单击 Firebird 服务;
  10. 选择开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多