Firebird 4.0多应用连接冲突:Delphi应用无法与IBExpert同时连库
在Microsoft Windows 2011系统上安装了Firebird 4.0 SuperServer,使用Delphi开发win64数据库应用访问远程数据库文件。当IBExpert已连接该数据库时,自研应用无法连接,报错:
[FireDAC][Phys][FB]lock time-out on wait transaction
object D:\MYFILES\DATABASE\SZERYNG\IMOVEIS_FIREBIRD\BANCO DE DADOS\DBIMOVEIS.FDB is in use
可同时打开多个IBExpert实例连接同一数据库,但只要有其他应用连接,自研应用就无法连接。
连接参数对比
| IBExpert/FDConnection参数 | IBExpert数据库注册信息 | 自研应用的FDConnection参数 |
|---|---|---|
| Database/Database File | D:\MyFiles\Database\Szeryng\Imoveis_Firebird\Banco de Dados\DBIMOVEIS.FDB | D:\MyFiles\Database\Szeryng\Imoveis_Firebird\Banco de Dados\DBIMOVEIS.FDB |
| Server/Protocol/Protocol | Remote, TCP/IP | TCPIP |
| Server Name/Server | 127.0.0.1 | 127.0.0.1 |
| Port | 3040 | 3040 |
| User Name/User_Name | SYSDBA | SYSDBA |
| Charset/Character Set | ISO8859_1 | ISO8859_1 |
| Server Version | Firebird 4.0 | - |
| SQL Dialect | - | 3 |
| Client Library File/FDPhysFBDriveLink.VendorLib | c:\windows\syswow64\fbclient.dll | c:\windows\system32\fbclient.dll |
IBExpert完整注册信息
Database File: D:\MyFiles\Database\Szeryng\Imoveis_Firebird\Banco de Dados\DBIMOVEIS.FDB Server/Protocol: Remote, TCP/IP Server Name: 127.0.0.1 Port: 3040 User Name: SYSDBA Charset: ISO8859_1 Server Version: Firebird 4.0 Client Library File: c:\windows\syswow64\fbclient.dll
自研应用FDConnection完整参数
Database: D:\MyFiles\Database\Szeryng\Imoveis_Firebird\Banco de Dados\DBIMOVEIS.FDB; Protocol: TCPIP; Server: 127.0.0.1; Port: 3040; User_Name: SYSDBA; Character Set: ISO8859_1; SQL Dialect: 3; IBAdvanced: set_db_readonly=0; FDPhysFBDriveLink.VendorLib = c:\windows\system32\fbclient.dll;
确认自研应用未使用Firebird嵌入式客户端,寻求解决方法。
核心问题是自研应用的Database参数写法错误,导致FireDAC尝试直接本地打开数据库文件,而非通过Firebird SuperServer的TCP/IP连接。当IBExpert通过Server连接时,数据库文件已被SuperServer进程锁定,本地直接打开就会触发文件占用错误。
调整步骤:
修改自研应用的
Database参数格式,改为服务器地址+数据库路径的远程连接格式:Database: 127.0.0.1:D:\MyFiles\Database\Szeryng\Imoveis_Firebird\Banco de Dados\DBIMOVEIS.FDB;(已单独指定Port参数,无需在Database中重复端口)
确认远程连接配置:
- 确保
Protocol参数保持TCPIP,不要设置为Local或Embedded - 检查
IBAdvanced参数,确保没有添加强制本地连接的配置(如local=true)
- 确保
客户端库无需调整:
自研应用是win64程序,使用c:\windows\system32\fbclient.dll(64位库)正确;IBExpert是32位程序,使用syswow64下的32位库,两者不冲突。
调整后重新连接,即可和IBExpert同时访问同一数据库。
内容的提问来源于stack exchange,提问作者IMeMine

