我们的客户最近报告了这个错误,我们也不知道如何解决这个问题。我们使用Delphi XE6开发我们的应用程序,它连接到Firebird(v2.5)数据库作为后端。我们还使用IBObjects在Delphi中使用Firebird数据库。 我们设法通过在运行查询之前停止Firebird窗口服务来复制开发机器上的错误,但我们还没有找到一种方法来检测代码中丢失的连接(例如,通过举办活动),因此我们不会# 39;不知道何时发生这种情况,所以我们无法重新连接到代码中的数据库。
顺便说一句,如果有帮助,这是完整的错误消息:
ISC错误代码:335544721 ISC错误消息: 无法完成主机的网络请求" BON-VFS-01"。 将数据写入连接时出错。
任何帮助都非常感激。
答案 0 :(得分:1)
来自IBOBjects FAQ
有没有办法检测丢失的连接并尝试重新连接 自动,无需用户操作?
挂钩OnError事件并查找表示a的ERRCODE 失去了连接。然后,您可以采取您认为必要的任何行动 处理这个问题。如果连接丢失,你需要做一个 断开然后重新连接。
来自IBObjects的一个基本成员:
然而,也许你缺少的“东西”是,如果 连接被外部原因破坏,客户端应用程序具有 没办法知道它还没有连接。它的第一个知识 这个事实将在下次尝试访问服务器时出现。该 API将报告“连接丢失到数据库”并返回GDSCODE 335544741,由常量标识 isc_lost_db_connection。
发生此异常时,TIB_Connection仍然存在 认为它是连接的 - Connected属性将是真实的。如果你 尝试通过调用Connect重新连接,您将获得IBO异常。 有必要调用Disconnect。这不仅仅是重置一个 属性。 Disconnect方法执行所有必要的清理 使已损坏的交易无效并取消任何现在无效的交易 发布,数据集和缓存。一旦Disconnect完成了它 然后,您可以在重试循环中放置一个Connect调用 试图再次前进。
我不知道一个有效的例子,但是最简单的处理方式 这是您可以编写RestoreConnection处理程序过程 参数ERRCODE时,从您的IB_Session.OnError处理程序调用 返回isc_lost_db_connection。
让RestoreConnection程序执行您需要执行的操作, 试图调用Connect并处理发生的异常 请求失败,直到没有异常发生。测试Connected属性 每次迭代后。当Connected终于为True时,你就在 商业。您可以退出重试代码并通知用户 连接已经恢复 - 可能是声音和/或 状态栏中的消息,以避免必须显示一个对话框 她必须回应。 (如果你喜欢声音和状态栏的想法 提示,您可以设计“连接丢失”警告声音和状态栏 消息代码在处理程序过程的开头运行为 井...)
如果经常发生这些断开连接,您可能会喜欢 考虑制作一个可以显示的独特自定义光标 您的过程正在运行,并将重试代码括在一个 非屈服的BeginBusy ...启用了UseCursor的EndBusy块和 BusyCursor设置为使用此特殊光标图像。
如果重新建立连接可能需要很长时间,或者 暂时不可能,你需要提供这种能力 供用户介入并选择不继续尝试。您可以使用 这个会话计时器,将你的“忙”块封闭在里面 另一个迭代块提示用户“取消”或“保持 尝试“,以合理的间隔。
答案 1 :(得分:0)
检查查询长度
最大查询长度为8191个字符UTF-8
它解决了我的问题
答案 2 :(得分:0)
将您的电脑连接到互联网,问题将得到解决,但是我不知道它是如何工作的