Delphi数据库连接异常怎么排查修复?连接失败怎么办?报错怎么解决?

文章导读
首先检查数据库服务器是否在运行,ping一下服务器IP地址看能不能连通;然后验证连接字符串里的用户名密码是否正确,别输错了;再看看防火墙有没有挡住端口,比如SQL Server默认1433端口要放行;如果还是不行,重启一下Delphi程序和数据库服务试试,很多时候就是卡住了;最后用数据库管理工具单独连一下,看是不是Delphi端的ADO组件问题。
📋 目录
  1. A 论坛用户经验分享
  2. B 老程序员贴士
  3. C 实际案例修复
  4. D 常见报错解决方案
  5. E 一步步排查法
  6. F FAQ
A A

首先检查数据库服务器是否在运行,ping一下服务器IP地址看能不能连通;然后验证连接字符串里的用户名密码是否正确,别输错了;再看看防火墙有没有挡住端口,比如SQL Server默认1433端口要放行;如果还是不行,重启一下Delphi程序和数据库服务试试,很多时候就是卡住了;最后用数据库管理工具单独连一下,看是不是Delphi端的ADO组件问题。

论坛用户经验分享

我之前Delphi连SQL Server老是报'连接失败',折腾半天发现是连接字符串里Server=localhost改成Server=127.0.0.1就好了,还有时候ODBC驱动过期了,得去微软官网下载最新版重装。另一个问题是数据库名写错了,检查ConnectionString里的Initial Catalog是不是对的。报错'登录失败'一般就是账号权限不够,去SQL Server Management Studio给用户加db_owner权限就行。

老程序员贴士

Delphi数据库异常排查顺序:1.网络连通性,用telnet服务器端口测试;2.驱动问题,FireDAC用TFDConnection测试连接,ADO用TADOConnection的Connected属性;3.异常捕获,在try..except里print出Error.Message和Error.NativeError,SQL Server常见NativeError 18456是认证失败。修复:更新Windows和Delphi补丁,检查TNSNAMES.ORA文件如果用Oracle。

实际案例修复

项目里Delphi连MySQL报'无法连接到服务器',原因是MySQL服务没启动,任务管理器里启动mysqld.exe;连接字符串用TADOConnection时,Provider=SQLOLEDB,Data Source=服务器名;失败后别急着改代码,先用Navicat工具连数据库确认OK,再回Delphi调试。报错'超时'就把CommandTimeout设大点,比如5000毫秒。

Delphi数据库连接异常怎么排查修复?连接失败怎么办?报错怎么解决?

常见报错解决方案

Delphi FireDAC连数据库'Connection lost',检查KeepConnection=dmAlways;'Invalid connection string'直接复制粘贴检查空格;Oracle连不上,TNS Listener没启动,cmd里lsnrctl start。报错10061是服务器拒绝连接,远程桌面去服务器开远程访问权限。

一步步排查法

1.确认数据库类型,SQL/Access/Oracle不同连接方式;2.测试简单连接代码:ADOQuery1.ConnectionString := 'Provider=...'; ADOQuery1.Active := True; 3.日志记录错误,用ShowMessage(e.Message); 4.如果是远程,VPN连上再试;5.重装MDAC组件,很多老Delphi项目需要。

FAQ

Q: Delphi连数据库突然断开怎么办?
A: 加心跳检测,每隔一段时间执行简单SELECT,失败就重连;用TADOTimer定时检查Connected属性。

Delphi数据库连接异常怎么排查修复?连接失败怎么办?报错怎么解决?

Q: 报错'Provider cannot be found'怎么修?
A: 安装对应OLEDB提供程序,SQL Server去官网下SQL Native Client。

Q: 连接字符串怎么写最稳?
A: 用INI文件存,加密密码,示例:Server=192.168.1.100;Database=mydb;Uid=user;Pwd=pass;。

Q: 多线程下连接异常多?
A: 每个线程建独立连接池,别共享TADOConnection。