【问题标题】:Zeoslib: How to tell when query execution is complete?Zeoslib:如何判断查询执行何时完成?
【发布时间】:2011-09-04 11:58:25
【问题描述】:

我在 Delphi 中使用 ZeosLib 通过 TZQuery 对象调用 MySQL 存储过程。在 MySQL 完成存储过程的执行后,我需要立即启动我的下一个代码块。

我在 MySQL 存储过程的末尾添加了 SELECT 1; 语句。找出结果已返回的最佳方法是什么?

【问题讨论】:

    标签: mysql sql delphi mysql-connector zeos


    【解决方案1】:

    Zeos lib 不能很好地处理返回结果集的存储过程。
    它主动禁用返回的结果集。
    有一个解决方法,您可以通过更改 ZEOS 源代码来激活结果集。

    但是,当您这样做时,您会收到很多错误,例如 MySQL has gone away
    在不可预测的时间,这可能是他们首先禁用此选项的原因。

    最后,我采用的解决方法是将我需要的任何结果集放入(临时)表中,并在存储过程完成后查询。这解决了错误,对我来说效果很好。

    【讨论】:

    • 这听起来很奇怪......我预计这有两个主要原因:1)在 MySQL 5.0 SP 的时候本身并不稳定。 2)带有BLOB的结果集可能会导致“消失”。无论如何,我们(da-soft)已经很久没有看到这样的报告了。
    • @da-soft,我破解了源代码以强制 ZEOS lib 允许存储过程返回结果集。这并不意味着我做对了,或者没有其他代码依赖于不返回结果集的存储过程。我记得的问题是存储过程已经返回一个结果集,指示存储过程的成功或失败。任何其他结果集都是附加的,这让 ZEOS 感到困惑,因为它是建立在返回的结果集只会引用成功或失败的假设之上的
    • @da-soft 完成状态是什么意思?你是怎么检查的?
    • @Johan 当你说“在存储过程完成后查询”......你怎么知道它什么时候完成?
    • 有一个事件在存储过程完成后触发。不确定是哪一个。 AfterApplyUpdates 我认为。
    猜你喜欢
    • 1970-01-01
    • 2012-03-20
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多