Delphi无法找到数据库驱动:连接dBase遇TDBXError异常求助
Delphi连接dBase数据库驱动识别异常问题解决
问题描述
在Delphi中连接dBase数据库时触发TDBXError异常,提示信息为:Unknown driver: Microsoft dBase Driver (*.dbf)。使用的测试代码如下:
uses Data.DB, Data.SqlExpr, Vcl.Dialogs; var SQLConnection1: TSQLConnection; SQLQuery1: TSQLQuery; begin SQLConnection1 := TSQLConnection.Create(nil); SQLQuery1 := TSQLQuery.Create(nil); try SQLConnection1.ConnectionName := 'dBase'; // 自定义的DSN名称 SQLConnection1.DriverName := 'Microsoft dBase Driver (.*dbf)'; // 尝试过多个驱动名称 SQLConnection1.LibraryName := 'C:\Windows\SysWOW64\odbcjt32.dll'; SQLConnection1.Params.Add('Database=C:\DB'); // 此处曾填写用户名和密码 SQLConnection1.Open; SQLQuery1.SQLConnection := SQLConnection1; SQLQuery1.SQL.Text := 'SELECT 2-2'; // 测试语句 SQLQuery1.Open; while not SQLQuery1.Eof do begin SQLQuery1.Next; end; finally SQLQuery1.Free; SQLConnection1.Close; SQLConnection1.Free; end; readln; end.
已完成的排查操作:
- 确认项目为32位应用程序
- 验证
C:\DB目录下存在dBase相关数据文件 - 尝试配置系统DSN并设置
SQLConnection1.ConnectionName,问题未解决
解决方法
1. 修正驱动名称拼写错误
代码中DriverName的参数为Microsoft dBase Driver (.*dbf),存在明显拼写错误,正确的驱动名称应为Microsoft dBase Driver (*.dbf)(将.*dbf改为*.dbf),拼写错误会直接导致驱动无法被识别。
2. 避免DSN与直接驱动配置冲突
如果已经通过ConnectionName指定了系统DSN,无需再手动设置DriverName和LibraryName——DSN配置中已包含这些信息,同时设置会引发配置冲突。简化后的代码如下:
SQLConnection1.ConnectionName := 'dBase'; // 确保该DSN在32位ODBC管理器中配置 // 移除DriverName和LibraryName的赋值代码 SQLConnection1.Params.Add('Database=C:\DB'); // 若DSN未配置用户名密码,再添加对应参数 SQLConnection1.Open;
3. 确认32位ODBC驱动的正确配置
由于使用的是32位Delphi程序,必须在32位ODBC数据源管理器中配置DSN:
- 运行
C:\Windows\SysWOW64\odbcad32.exe(注意不是系统默认的64位管理器) - 检查系统DSN中的
dBase条目,确认驱动选择为Microsoft dBase Driver (*.dbf),且数据库路径指向C:\DB - 直接在ODBC管理器中测试DSN连接,排除驱动本身的故障
4. 改用Delphi自带的Borland dBase驱动(备选方案)
如果微软ODBC驱动仍存在兼容性问题,可尝试使用Delphi自带的Borland驱动,无需额外安装ODBC组件:
SQLConnection1.DriverName := 'DBase'; SQLConnection1.LibraryName := 'dbexpdb.dll'; // Delphi自带的驱动库 SQLConnection1.Params.Add('DriverID=53'); SQLConnection1.Params.Add('Database=C:\DB'); SQLConnection1.Open;
内容的提问来源于stack exchange,提问作者Дима
相关产品推荐
相关产品推荐

