【发布时间】:2011-11-10 14:07:55
【问题描述】:
当数据库放置在本地网络的远程机器上时,是否有人在使用 Delphi 7 应用程序和 Firebird 1.5.6 时遇到问题?
客户端和服务器计算机正在运行 Windows 7 操作系统。它定期发生。客户端应用程序失去与服务器的连接。
我在应用程序启动时打开到服务器的连接。我不知道这里发生了什么。我的客户使用该应用程序,打开 Delphi 表单,填写一些数据并离开 20 分钟。当他返回时决定完成填写表格,然后想要保存内容。在保存按钮上,应用程序冻结。
我认为连接已丢失。为什么,如何?
连接丢失时是否有可能获得异常或事件? 是否可以在保存过程之前确定连接是否处于活动状态?
让连接一直打开是错误的,还是在每次请求之前打开连接并在此之后关闭更好? 如果是,则连接阶段需要一些时间,不会太多,但足以感知它。
解决方案可能是设置操作系统网络超时。 但是在哪里以及如何?
编辑:另一种情况 除了描述的情况之外,当应用程序启动时有时会发生这种情况,有时需要 1 或 2 分钟才能打开与远程 Firebird 数据库的连接。我将它设计为在应用程序启动时打开连接。在那段时间之后,一切正常。我的意思是应用程序不会崩溃,但会再次发生冻结问题。 为什么有时连接需要这么长时间,我不知道?
【问题讨论】:
-
wifi 连接?执行测试网线
-
除非 Cosmin 是正确的(您在启动时立即创建并启动了一个事务?)您将不得不进入您的代码或向您的代码添加一些日志记录并找出它在哪里冻结,然后也许,你也许能找出原因。单击保存可能会导致成千上万的事情发生。调试意味着找出哪一行代码(不是按钮点击)被冻结了。
-
我有一个内部日志,但是当此时发生这种冻结时,日志记录失败。我试图登录一个文件,但什么也没有。问题发生在我对数据库做某事的时候。在每次数据库操作之前,我都会检查事务是否处于活动状态,如果没有,我会再次启动它。可能是唯一的方法是安装Delphi开发环境并进行调试,但这并不容易,因为它是我客户的计算机。
-
该问题仅出现在网络环境中。这个故事的有趣部分是我无法在我的开发环境中重现这个问题。我整晚都在工作,没有任何问题。
-
看起来很明显,但是您使用的是什么组件? IBX?另外,firebird.log 文件是什么样的?
标签: delphi network-programming firebird freeze