Delphi使用TSQLConnection连接MySQL报错:Unknown MYSQL server host 'ServerName'(11001)
解决Delphi dbXpress TSQLConnection代码连接MySQL失败的问题
从你遇到的错误Unknown MYSQL server host 'ServerName'(11001)来看,核心问题大概率是代码中没有正确设置MySQL服务器的实际地址,或者TSQLConnection的参数配置和你在对象检查器里测试的不一致。下面一步步帮你排查和修正:
1. 检查代码中是否误用了占位符
你提到图形化测试连接成功,说明对象检查器里的Params参数(比如Host、Database等)是正确的。但代码里可能直接把示例中的'ServerName'当成了实际服务器名,没有替换成你的MySQL服务器地址(比如localhost、127.0.0.1或者远程IP)。
比如错误的写法:
Conn.Params.Values['Host'] := 'ServerName'; // 这里用了占位符,没有替换成实际地址
正确的写法应该是:
Conn.Params.Values['Host'] := 'localhost'; // 或者你的实际服务器IP,比如'192.168.1.100'
2. 确保代码中完整配置了所有必要参数
图形化界面测试时,对象检查器会自动帮你填充所有必要参数,但代码里需要手动设置完整。以下是一个完整的代码示例,对照检查你的代码:
var Conn: TSQLConnection; begin Conn := TSQLConnection.Create(nil); try // 核心:指定dbXpress的MySQL驱动 Conn.DriverName := 'MySQL'; // 清空原有参数,重新配置 Conn.Params.Clear; Conn.Params.Add('Host=localhost'); // 替换成你的实际服务器地址 Conn.Params.Add('Database=你的数据库名'); Conn.Params.Add('User_Name=你的用户名'); Conn.Params.Add('Password=你的密码'); Conn.Params.Add('Port=3306'); // MySQL默认端口,修改过的话填实际端口 // 关闭登录提示,避免弹窗干扰代码逻辑 Conn.LoginPrompt := False; try Conn.Connected := True; ShowMessage('连接成功!'); except on E: Exception do ShowMessage('连接失败:' + E.Message); end; finally Conn.Free; end; end;
3. 验证驱动是否正确加载
确保你的Delphi项目已经正确引用了dbXpress的MySQL驱动:
- 打开项目的
Project -> Options -> Libraries,检查dbxmys.dll(32位)或dbxmys64.dll(64位)所在路径是否在库路径中。 - 运行时,这个DLL文件需要和你的EXE文件在同一目录,或者在系统PATH路径下。
4. 检查服务器地址的可访问性
如果你的MySQL服务器是远程的,额外确认:
- 服务器的3306端口对外开放。
- 你的客户端机器能ping通服务器IP。
- MySQL用户权限允许从客户端IP连接(比如执行
GRANT ALL ON 数据库名.* TO '用户名'@'客户端IP' IDENTIFIED BY '密码';授权)。
常见误区提醒
- 不要混淆参数名:dbXpress的MySQL驱动用
Host指定服务器地址,而非ServerName,有些其他组件可能用后者,但dbXpress里必须用Host。 - 确保
LoginPrompt设为False,否则可能弹出登录窗口干扰代码逻辑,或者因为参数不匹配导致连接失败。
内容的提问来源于stack exchange,提问作者A B




