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

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

3 ответа

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

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

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

Я использую FireDAC с MSSQL. Чтобы использовать 'LIKE' в фильтре TFDQuery без учета регистра: TFDQuery.FilterOptions

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

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

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

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

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

Другие вопросы по тегам