Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Кодировка приватного определения подключения Firedac  (Прочитано 11494 раз)
0 Пользователей и 1 Гость смотрят эту тему.
NeferSky
Постоялец

ua
Offline Offline
Бессмертный


« : 24-06-2019 15:54 » new

Добрый день всем...
Не могу понять, почему фаердак игнорирует указанную кодировку при определении подключения. Явно указываю UTF8, но в результате, после создания def-a там оказывается WIN1251. Кто-нибудь может указать, куда копать?
Также уточню: проявляется это если приложение запускается просто дабл-кликом. Но это же приложение и этот же код, запущенный службой с использованием srvany отрабатывает исправно и выставляет верную кодировку, 'UTF8'. Какие тут могут быть особенности запуска от пользователя?

Код:
constructor TMyClass.Create(aDBOptions: TDBOptions);
var
  oParams: TStringList;
  ch: String;

begin
  inherited Create;

  fConnectionManager := TFDManager.Create(nil);

  // http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Defining_Connection_(FireDAC)
  oParams := TStringList.Create;
  try
    oParams.Clear;
    oParams.Values['CharacterSet'] := C_DB_CharSet;  // C_DB_CharSet = 'UTF8'
    oParams.Values['User_Name'] := C_DB_UserName;
    oParams.Values['Password'] := C_DB_Password;
    oParams.Values['Server'] := C_DB_Server;
    oParams.Values['Protocol'] := 'TCPIP';
    oParams.Values['Port'] := IntToStr(C_DB_Port);
    oParams.Values['SQLDialect'] := IntToStr(C_DB_SQLDialect);  // 3
    oParams.Values['OSAuthent'] := 'No';
    oParams.Values['Database'] := fDBOptions.SystemFileName;
    oParams.Values['Alias'] := 'System';
    ch := oParams.Values['CharacterSet'];  // ch = 'UTF8'
    fConnectionManager.AddConnectionDef(DCQ_SYSTEM_DB, 'FB', oParams, True);
    ch := oParams.Values['CharacterSet'];  // ch = 'UTF8'
    fConnectionManager.GetConnectionDefParams(DCQ_SYSTEM_DB, oParams);
    ch := oParams.Values['CharacterSet'];  // ch = 'WIN1251'
   
  finally
    FreeAndNil(oParams);
  end;
end;
Записан

Не тронь налаженный механизм, и он тебя не подведет.
Делать надо хорошо, а плохо - само получится.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 25-06-2019 04:47 » 

NeferSky, как предположение: "запущен даблкликом" и "запущен службой" - попробуй глянуть, какие параметры были переданы экзешнику в обоих случаях. Это можно сделать дебажным выводом, либо ещё проще - в диспетчере задач, вкладка "процессы", колонка "командная строка"
Записан

NeferSky
Постоялец

ua
Offline Offline
Бессмертный


« Ответ #2 : 25-06-2019 13:24 » 

Выяснил, в чем дело.
Алексей++, параметры никакие не передаются, но все равно, спасибо за идею.

А дело оказалось в том, что на машине, где идет разработка приложения, раньше было объявлено "постоянное" подключение к базе данных - это в файле C:\Users\Public\Documents\Embarcadero\Studio\FireDAC\FDConnectionDefs.ini. И в нем была указана кодировка WIN1251.
В приложении же используется "приватное" подключение, создаваемое приложением при запуске, с кодировкой UTF8. Но, поскольку уже существовало "постоянное" подключение, оно имело больший приоритет, что ли, и перебивало мои настройки. Это в случае ручного запуска программы. А в случае запуска службой, оно то ли не искало тот файл, ибо запускалось с повышенными правами, то ли не находило из-за каких-то ограничений прав.
Найти это удалось сравнив с другой машиной, где в файле не оказалось такой записи о подключении. Удалил из него записи о нашем подключении - и все чудесно заработало.
Записан

Не тронь налаженный механизм, и он тебя не подведет.
Делать надо хорошо, а плохо - само получится.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines