SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Firebird, HQbird, InterBase » FB 4 Сервисы и кириллица (Внезапно! Странное поведение сервисов и баз, расположенных в папках содержащих кириллицу.)
icon11.gif  FB 4 Сервисы и кириллица [сообщение #2389] Fri, 26 May 2023 12:18 Переход к предыдущему сообщению
protector в настоящее время не в онлайне  protector
Сообщений: 4
Зарегистрирован: May 2023
Junior Member

Решил я тут воспользоваться новомодным OO Api и получить с его помощью статистику базы данных.
Не буду приводить весь код но во общем делаю так:
Подключаемся к сервисам.
    spb1:= Futl.getXpbBuilder(Fstatus, IXpbBuilder.SPB_ATTACH, nil, 0);
    spb1.insertString(Fstatus, isc_spb_user_name,PAnsiChar(AUserName));
    spb1.insertString(Fstatus, isc_spb_password, PAnsiChar(APassword));
    Fsvc := Fprov.attachServiceManager(Fstatus,
                                       'service_mgr',
                                       spb1.getBufferLength(Fstatus),
                                       spb1.getBuffer(Fstatus));
Запускаем сервис.
    spb2:= Futl.getXpbBuilder(FStatus, IXpbBuilder.SPB_START, nil, 0);
    spb2.insertTag(FStatus,isc_action_svc_db_stats);
    spb2.insertInt(FStatus, isc_spb_options, isc_spb_sts_hdr_pages);
    spb2.insertString(FStatus, isc_spb_dbname, PAnsiChar('C:\Temp\База тут\DB.FDB'));

    Fsvc.start(Fstatus,spb2.getBufferLength(Fstatus),	spb2.getBuffer(Fstatus));
И вот тут засада. Как видите путь к базе содержит кириллицу. В итоге получаю ошибку:
Can't open database file C:\TEMP\База тст\DB.FDB

Странно. Ну давайте тогда попробуем другой сервис, вдруг сработает. Ну, скажем свип.
    spb2:= Futl.getXpbBuilder(FStatus, IXpbBuilder.SPB_START, nil, 0);
    spb2.insertTag(FStatus,isc_action_svc_repair);
    spb2.insertInt(FStatus, isc_spb_options, isc_spb_rpr_sweep_db);
    spb2.insertString(FStatus, isc_spb_dbname, PAnsiChar('C:\Temp\База тут\DB.FDB'));

    Fsvc.start(Fstatus,spb2.getBufferLength(Fstatus),	spb2.getBuffer(Fstatus));
И всё работает без ошибок! Ладно, а теперь давайте сделаем так. При подключении укажем тэг.
  spb1.insertTag(Fstatus,isc_spb_utf8_filename);
Тогда в первом примере ошибки нет. Зато теперь есть во втором, со свипом!
Invalid connection string
-Cannot transliterate character between character sets

И вот вопрос: что за фигня? Почему такое разное поведение сервисов?
И да, чтобы всё работало во втором случае нужно выполнить преобразование строки в UTF8.
Но так ведь явно не должно быть. Бегло погуглив никакого объяснения этому не нашел, может плохо искал, не знаю.
Осторожно предположу, что это, таки, баг.
 
Сообщение не прочитано icon11.gif
Сообщение не прочитано
Сообщение не прочитано
Сообщение не прочитано
Предыдущая тема: Изменить тип поля
Следующая тема: ALTER SESSION RESET
Переход к форуму:
  


Текущее время: Fri Nov 15 13:23:28 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00668 секунд