Delphi FiredaC语言 区分大小写的问题



我试图将我的应用程序从ADO迁移到FireDAC。我用的是微软的SQL Server。我的数据库服务器安装了排序规则敏感的CASE,数据库创建时使用排序规则不敏感的CASE。我做这个配置是因为我的客户有这个配置。但是当我试图迁移到FireDAC时,FireDAC驱动程序(MSSQL)查看数据库排序并将属性"数据库名称"更改为大写。在那之后,很多事情都不起作用,因为FireDAC没有在sysdatabase中找到"数据库名称"。我可以关闭这个功能,改变"数据库名称"属性?

我猜你正在寻找MetaCaseInsCat连接参数。尝试禁用目录名称大小写敏感自动检测,并将其设置为不区分大小写:

...
FDConnection1.Params.Add('MetaCaseInsCat=True');
FDConnection1.Connected := True;

我发现FireDAC正在使用ansi大写转换来访问数据库,这反过来又导致了MSSQL的问题。对我来说,是土耳其菜。我发现解决这个问题很容易。在TFDConnection的OnBeforeConnect中,我使用:

Params.Database := TRUpperCase(Params.Database);

其中TRUpperCase是将土耳其字符正确转换为大写的函数(如i转换为İ,而不是i转换为i)。

这不是对OP的直接回答,但它可能会帮助像我这样在FireDAC中有大小写敏感问题的未来程序员

我使用FireDAC与MSSQL。为了以不区分大小写的方式在TFDQuery过滤器中使用"LIKE":FilterOptions

procedure TFDQuery_MyVersion.SetFilterText(const Value: string);
begin
   FilterOptions := [TFilterOption.foCaseInsensitive];
   inherited SetFilterText(TOldDatabaseSystemToMSSQL.Filter(Value));
end;

最新更新