Подтвердить что ты не робот

Delphi Firedac - проблема с регистром

Я пытаюсь перенести свое приложение из ADO в FireDAC. Я использую Microsoft SQL Server. Мой сервер базы данных был установлен с помощью сортировки SENSITIVE CASE, и база данных была создана с помощью сортировки INSENSITIVE CASE. Я сделал эту конфигурацию, потому что у моих custumers такая конфигурация. Но когда я пытался мигрировать в FireDAC, драйвер FireDAC (MSSQL) просматривает сортировку базы данных и меняет свойство "имя базы данных" на верхний регистр. После этого многие вещи не работали, потому что FireDAC не нашел "имя базы данных" в sysdatabase. Можно ли отключить эту функцию, которая изменит свойство "имя базы данных" ?

4b9b3361

Ответ 1

Я предполагаю, что вы ищете параметр MetaCaseInsCat. Попытайтесь отключить автоматическое определение чувствительности к регистру каталогов и настройте его на нечувствительность к регистру:

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

Ответ 2

Я нахожу, что FireDAC использует преобразование в верхнем регистре ansi для доступа к базе данных, что, в свою очередь, вызывает проблемы с MSSQL. В моем случае это было турецкое. Я нашел, что исправление будет легким. В OnBeforeConnect TFDConnection я использовал:

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

Где TRUpperCase - это функция, которая правильно преобразует турецкие символы в верхний регистр (например, я в İ вместо я в I).

Ответ 3

Это не прямой ответ на OP, но он может помочь будущему программисту, подобному мне, который сталкивается с проблемой чувствительности к регистру в FireDAC

Я использую FireDAC с MSSQL. Чтобы использовать "LIKE" в TFDQuery Filter в режиме, отличном от случая: TFDQuery.FilterOptions

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

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