Delphi Firedac - 区分大小写问题

12

我正在尝试将我的应用程序从ADO迁移到FireDAC。我正在使用Microsoft SQL Server。我的数据库服务器安装了SENSITIVE CASE排序规则,而数据库是使用INSENSITIVE CASE排序规则创建的。我这样配置是因为我的客户有这个配置。但是当我尝试迁移到FireDAC时,FireDAC驱动程序(MSSQL)查看了数据库排序规则,并将"database name"属性更改为大写。之后,许多事情都无法正常工作,因为FireDAC在sysdatabase中找不到"database name"。我能否关闭此更改"database name"属性的功能?


你尝试设置FDConnection属性'MetaCaseIns'为真吗? - Copilot
是的,但是没有起作用。当我将属性“MetaCaseIns”设置为true时,Firedac组件会将数据库名称更改为大写。我需要数据库名称保持原样。 - MarceloSouza
我立即将此主题的链接发送给FireDAC的作者,希望他能有所回应。 - Sanders the Softwarer
通常,如果您在使用FireDAC时遇到问题,可以尝试在http://www.sql.ru/forum/1008012/firedac上提问,英语会被理解。 - Sanders the Softwarer
3个回答

2
我猜你正在寻找MetaCaseInsCat连接参数。尝试禁用目录名称大小写敏感性自动检测并将其设置为不区分大小写:
...
FDConnection1.Params.Add('MetaCaseInsCat=True');
FDConnection1.Connected := True;

@Dreamer64,你能否详细说明一下,最好在另一个问题中提供 MCVE(最小可重现示例)? - Victoria

0

我发现FireDAC使用ansi大写转换来访问数据库,这反过来会导致与MSSQL的问题。在我的情况下是土耳其语。我发现修复很容易。在TFDConnection的OnBeforeConnect中,我使用了以下代码:

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

其中TRUpperCase是一个函数,它可以正确地将土耳其字符转换为大写字母(例如从i到İ,而不是从i到I)。


0

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

我正在使用 FireDAC 和 MSSQL。为了在 TFDQuery 过滤器中以非区分大小写的方式使用 'LIKE':TFDQuery.FilterOptions

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

   inherited SetFilterText(TOldDatabaseSystemToMSSQL.Filter(Value));
end;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接