Delphi东京版FireDAC连接MSSQL2000提示对象名 'SYS.DATABASES' 无效

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi东京版FireDAC连接MSSQL2000提示对象名 'SYS.DATABASES' 无效相关的知识,希望对你有一定的参考价值。

在Delphi 10.2.1 东京 版中,FireDAC默认不兼容MSSQL2000,会提示“[FireDAC][Phys][ODBC][Microsoft][ODBC SQL Server Driver][SQL Server]对象名 ‘SYS.DATABASES‘ 无效。”的错误,对此需要修改FireDAC.Phys.MSSQL.pas单元进行修复:

首先从delphi目录下把FireDAC.Phys.MSSQL.pas文件复制出来,然后打开它,注释掉 {$I FireDAC.inc},然后查找到“procedure TFDPhysMSSQLConnection.InternalSetMeta;”,再找到“sCompatLvl := ‘(SELECT COMPATIBILITY_LEVEL FROM SYS.DATABASES WHERE LOWER(NAME) = ‘ +AnsiLowerCase(sCurCatalog) + ‘)‘;”,将其修改为:

1
2
3
4
5
if oConnMeta.ServerVersion >= svMSSQL2008 then
   sCompatLvl := ‘(SELECT compatibility_level FROM sys.databases WHERE name = ‘
   + AnsiLowerCase(sCurCatalog) + ‘)‘
else // MSSQL2005、MSSQL2000没有sys.databases表
   sCompatLvl := IntToStr(oConnMeta.ServerVersion div 10000000);

经过以上步骤,就完成FireDAC兼容MSSQL2000的修改了。

这是网上抄的,但还有一些细节工作要做的。

1.将你的Delphi安装目录下的 FireDAC.Phys.MSSQL.dcu文件删除,记录一下FireDAC.Phys.MSSQL.dcu的路径。

2.这时候再编译会提示找不到FireDAC.Phys.MSSQL.pas文件,将这个文件复制到你的程序的目录入,编译生成FireDAC.Phys.MSSQL.dcu

3.将生成的FireDAC.Phys.MSSQL.dcu文件复制到原先的目录里。这样以后就不需要每一个工程都放一份FireDAC.Phys.MSSQL.pas文件

以上是关于Delphi东京版FireDAC连接MSSQL2000提示对象名 'SYS.DATABASES' 无效的主要内容,如果未能解决你的问题,请参考以下文章

Delphi Firedac TFDtable 开放问题

Delphi - FireDAC的连接配置

Delphi:FireDac 连接阻止应用程序

delphi7能用firedac吗

firedac使用UNIXODBC连接SQLSERVER

Delphi:从 IBO 迁移到 FireDac