powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Посоветуйте инструмент для диагностики проблемы
38 сообщений из 38, показаны все 2 страниц
Посоветуйте инструмент для диагностики проблемы
    #39091558
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую уважаемых коллег.

Понадобилось мне тут переделать одно из своих Delphi-приложений, которое цепляется к БД FB2.5 и тащит из неё данные. Использую FIBы. Приложение должно отправить на сервер SQL-запрос и получить данные. На моей машине я развернул бэкап боевой базы, к которому и цепляюсь. Вот текст запроса:
Код: sql
1.
SELECT U_ID FROM UNITS WHERE U_NAME=:U;


Юзаю Delphi 2010 с FIB+ 7.5. Совершенно точно знаю, что строка, соответствующая условию, в базе есть. Тем не менее, компонент pFIBQuery возвращает пустой набор данных. База в кодировке UTF8, к самой базе цепляюсь с кодировкой WIN1251. При подстановке в запрос названия единицы вместо параметра также возвращается пустой НД. FlameRobin выполняет этот запрос правильно. Нужен совет: как при TCP-коннекте на одной и той же машине правильно отследить, что именно и в какой кодировке отправляется на сервер? Какой инструмент лучше для этого использовать?
Заранее благодарен.
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091562
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любезный,

в трейсе должно быть видно
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091563
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нет ли какой-то доки по использованию трейса?
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091567
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любезный,

только такая http://www.firebirdsql.org/file/documentation/release_notes/html/rlsnotes254.html#rnfb25-trace
про использование штатного инструмента

в IBE есть пункт Services->Trace And Audit.
В HQbird Performance Monitor есть собственный плагин трассировки который пишет лог в БД
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091645
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Денис, спасибо за информацию. Раньше я просто никогда не делал трейсы - не было необходимости. Теперь буду изучать эту тему.
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091707
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любезный,

попробуй вебинар посмотреть. Попробуй - в том смысле, что может потребоваться кодек.
http://www.ibase.ru/download/tr_web20100323.rar
и вроде смотреть его лучше через ie.
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091728
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что же мешает сделать
Код: sql
1.
Cast(:U AS VARCHAR(766) CHARACTER SET UTF8)

?
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091797
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИ что же мешает сделать
Зачем? Должно работать и так. Что удивило - то же самое приложение до переделки работало правильно с тем же кодом, и переделка этот кусок не затронула.
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091799
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может потому не затронуло, что первые 127 символов utf8 совпадают с ASCII и проблемы начались как только в искомой строке стали встречаться национальные символы?
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091801
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторМожет потому не затронуло, что первые 127 символов utf8 совпадают с ASCII и проблемы начались как только в искомой строке стали встречаться национальные символы?
Я об этом думал, но не подтвердилось.
Завтра займусь трассировкой. На крайняк переведу приложение на связку Lazarus+IBX от Rik - там будет UTF8 без BOM, и гемора с перекодировкой нет вообще. А у ФИБов с Delphi здесь, похоже, иногда бывают проблемы из-за разницы между UTF16 и UTF8.
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091804
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя, конечно, и так должно работать, если в БД по умолчанию или непосредственно для поля задан набор символов utf8. В этом случае сервер сам всё конвертнёт. Поле описано с типом домена? Домен не менялся через таблицы метаданных?
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091806
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любезныйк самой базе цепляюсь с кодировкой WIN1251
ЛюбезныйНа крайняк переведу приложение на связку Lazarus+IBX от Rik - там будет
UTF8 без BOM, и гемора с перекодировкой нет вообще.
Ась?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091808
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovАсь?..
Добрый вечер!
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091812
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBConstructorДобрый вечер!
Даже трудно понять что тупее: аффтар, который объявляет серверу "щас буду совать данные в
WIN1251, а потом суёт их в UTF-8" или твои советы ему.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091815
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторАсь?..
Да, здесь есть хрень. Когда я писал первую программу с ФИБами на D2010, я долго плевался с выбором кодировки соединения, получая раз за разом Malformed string. Эксперименты показали, что при соединении с кодировкой WIN1251 проблем нет, и данные из компонентов через параметры вносились корректно и без сообщений об ошибках. Потом я много раз пытался реализовать преобразование текста в UTF8 и его передачу в ФИБы с подключением к базе с соответствующей кодировкой, но в конце концов плюнул - уж очень мудрёное у этих ФИБов нутро. А Лазарь с IBX от Rik меня в этом плане очень порадовал - там все визуальные компоненты LCL принимают текст в UTF8 напрямую, и всё это даже работает в Линуксе.
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091817
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

ага.

ЛюбезныйЮзаю Delphi 2010 с FIB+ 7.5. ... База в кодировке UTF8, к самой базе цепляюсь с кодировкой WIN1251
вот и спрашивается, действительно, какого фига указан чарсет коннекта win1251, если из юникодной дельфи и фибплюса он должен быть указан utf8?
http://www.ibase.ru/unicode_faq.html
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091824
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovДаже трудно понять что тупее: аффтар, который объявляет серверу "щас буду совать данные в
WIN1251, а потом суёт их в UTF-8" или твои советы ему.
Попробуй... Вдруг тебе будет откровение, что мои советы тупее. Острых он, по всей видимости, пока ни от кого не дождался.
Лично я считаю, что для многих простеньких приложений абсолютно нормально пихать данные в кодировке, отличной от utf8, всецело полагаясь на механизм приведения символов строки Firebird'а к символьному набору поля.
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091826
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBConstructorЛично я считаю, что для многих простеньких приложений абсолютно
нормально пихать данные в кодировке, отличной от utf8, всецело полагаясь на механизм
приведения символов строки Firebird'а к символьному набору поля.
Ага, осталось только в компоненты доступа встроить телепатию, чтобы они догадались в какую
именно кодировку они должны преобразовать поступающий им на вход юникод, да...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091828
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь действительно есть косяк с моей стороны. Разница в кодировках, на первый взгляд, кажется тупостью, но я в свое время реально *** с этими ФИБами, цепляясь через UTF8, передавая строки и получая Malformed string. Но я уверен, что при использовании средств мониторинга задача с поиском бага и возможной правкой ФИБов на предмет корректной передачи строк в UTF8 может существенно облегчиться.
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091830
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Телепатия не нужна. В FIBPlus кодировка соединения задается через параметр соединения "lc_ctype"
У Любезного, соответственно, lc_ctype=WIN1251
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091835
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТелепатия не нужна. В FIBPlus кодировка соединения задается через параметр соединения "lc_ctype"
У Любезного, соответственно, lc_ctype=WIN1251
Но в D2010 компоненты VCL все юникоднутые и работают с UTF16. И не все компоненты доступа правильно обрабатывают эту кодировку и готовят строки к передаче на сервер.
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091838
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любезный,

поиском по этому разделу "malformed string fibplus" находится только 2 топика. В разделе Delphi - 1 топик.
Прихожу к выводу, что это глюк в конкретной версии FIBPlus.
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091840
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВ FIBPlus кодировка соединения задается через параметр соединения "lc_ctype"
Не только. Там есть два способа задания кодировки соединения - через DBParams (TStrings) и через набор свойств TpFIBDatabase.ConnectParams. Как работает эта связка при задании параметров в Runtime - одному Бузаджи известно, хотя можно и сорцы поисследовать. Возможно, в этой связке могут быть какие-то косяки.
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091842
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И не только поэтому лично я предпочитаю чистый API...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091843
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПрихожу к выводу, что это глюк в конкретной версии FIBPlus.
Я тоже это предполагаю. Завтра буду ковырять. Но хотелось бы предварительно подтвердить или опровергнуть это с помощью мониторинга. Очень надеюсь, что своими правками не сломаю эти ФИБы.
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091844
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любезный,

еще вспомнил. что будет, если взять текст запроса из sqlmonitor фибплюса (или как он там называется), и кинуть его в IBExpert?
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091845
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvвот и спрашивается, действительно, какого фига указан чарсет коннекта win1251, если из юникодной дельфи и фибплюса он должен быть указан utf8?
http://www.ibase.ru/unicode_faq.html
Из этого же faq чуть ниже:
Я могу работать с базой в UTF8 через WIN1251?

Разумеется, для этого достаточно указать чарсет соединения WIN1251. Данные будут идти на сервер в 1251, и автоматически перекодироваться в UTF8 при сохранении (при чтении - перекодироваться обратно в win1251). Это самый легкий вариант начала работы с юникодом. Также это подходящий вариант, если используете Delphi версии 2007 и ниже, и вы не хотите использовать никакие компоненты unicode (например tms), но планы перехода на unicode есть.

Кстати, это не специальная особенность WIN1251 и UTF8. Вы можете использовать любую национальную кодировку точно таким же образом.
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091848
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИз этого же faq чуть ниже:
Ты, похоже, так и не вник в суть проблемы. Если сервер отдает данные в WIN1251, а компоненты доступа не преобразуют их в UTF16, отображение их на экране корректным не будет. ФИБы однозначно выполняют какое-то скрытое преобразование. Иначе ничем не объяснить то, что вычитывая данные стандартным механизмом через FieldByName, я получаю значения, которые без проблем выводятся в TLabel, TEdit и другие официальные лицаVCL-компоненты без каких-либо дополнительных преобразований с моей стороны.
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091850
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюбезныйЕсли сервер отдает данные в WIN1251, а компоненты доступа не преобразуют их
в UTF16, отображение их на экране корректным не будет.
Может быть, а может и не быть. Это зависит от текущей ANSI кодовой страницы. Тому чуваку в
эмбаркадере, который додумался обеспечить прозрачное, автоматическое и неотключаемое
перекодирование между AnsiString и WideString стоило бы выдать запрет на профессию
архитектора.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091852
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторМожет быть, а может и не быть. Это зависит от текущей ANSI кодовой страницы.
С этой частью я как-то не экспериментировал - времени не было.
авторТому чуваку в эмбаркадере, который додумался обеспечить прозрачное, автоматическое и неотключаемое перекодирование между AnsiString и WideString стоило бы выдать запрет на профессию архитектора.
+1. Если бы его можно было отключить хотя бы флагом компилятора или настройкой в IDE, проблем было бы гораздо меньше.
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091853
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюбезныйНе только. Там есть два способа задания кодировки соединения - через DBParams (TStrings) и через набор свойств TpFIBDatabase.ConnectParams. Как работает эта связка при задании параметров в Runtime - одному Бузаджи известно, хотя можно и сорцы поисследовать. Возможно, в этой связке могут быть какие-то косяки.
Это абсолютно тоже самое. DevRace сделали поля в UserName, Password и CharSet в ConnectParams для удобства, чтобы разработчикам не приходилось помнить точное название этих параметров для DBParams. После задания полей в ConnectParams в DBParams помещаются правильные названия параметров со значениями.

Эти два варианта эквивалентны:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  Pfibdatabase::TpFIBDatabase * _db = new Pfibdatabase::TpFIBDatabase(NULL);
  _db->LibraryName = "fbclient.dll";
  _db->DBParams->Clear();
/*
  _db->ConnectParams->CharSet = codepage;
  _db->ConnectParams->UserName = user;
  _db->ConnectParams->Password = password;
*/
  _db->DBParams->BeginUpdate();
  _db->DBParams->Add(AnsiString("user_name=") + user);
  _db->DBParams->Add(AnsiString("password=") + password);
  _db->DBParams->Add(AnsiString("lc_ctype=") + codepage);
  _db->DBParams->EndUpdate();
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091854
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПосле задания полей в ConnectParams в DBParams помещаются правильные названия параметров со значениями
Ты проверял на практике, исследовал сорцы?
Я завтра обязательно проверю это в Delphi. Есть вероятность, что в разных версиях ФИБов могут быть различия в коде.
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091861
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюбезныйТы проверял на практике, исследовал сорцы?
Я завтра обязательно проверю это в Delphi. Есть вероятность, что в разных версиях ФИБов могут быть различия в коде.
Моё утверждение справедливо, как минимум, для FIBPlus v6.9.5
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091862
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBConstructorМоё утверждение справедливо, как минимум, для FIBPlus v6.9.5

Остаётся только сожалеть, что к проблеме данного топика оно не имеет никакого отношения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091876
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, действительно, жаль...
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39091998
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, нужна подсказка по трейсу в винде. Запускаю сессию, но получаю ошибку. Как правильно писать путь к логу?
Код: sql
1.
2.
3.
4.
5.
6.
7.
C:\Program Files\Firebird\Firebird_2_5\bin>fbtracemgr -START -SE localhost:servi
ce_mgr -USER SYSDBA -PASS masterke -CONFIG D:\MyConfig.cfg
Trace session ID 2 started
Error creating trace session for database "D:\DB\ANKETA.FDB":
error while parsing trace configuration
        line 3, element "log_filename": pattern is invalid
         D:\anketa.log
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39092020
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любезный,

а) прочитать внимательно заголовок fbtrace.conf и примеры в том же fbtrace.conf, найти там что-нибудь про бэкслеши
б) прочитать документацию к Trace and Audit Services и понять, что в случае пользовательской трейс-сессии лог задавать вообще не нужно
...
Рейтинг: 0 / 0
Посоветуйте инструмент для диагностики проблемы
    #39092040
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автора) прочитать внимательно заголовок fbtrace.conf и примеры в том же fbtrace.conf, найти там что-нибудь про бэкслеши
Смотрю.
автор# For log file name Sed syntax for substitutions is supported.
# I.e. \0 - whole matched string, \1 ... \9 - parenthesis subexpressions.
# \\ is backslash.
# String values should be enclosed into (any kind of) quotes if contains
# spaces embedded, for example:
# log_filename 'C:\Documents and Settings\Firebird\My Documents\trace.log'
# include_filter "Database Stats"

Кажись, дошло, спасибо.
авторб) прочитать документацию к Trace and Audit Services и понять, что в случае пользовательской трейс-сессии лог задавать вообще не нужно
Не обязательно или не нужно?
Ну не знаю... Кодировку, ИМХО, проще выявлять не на лету в командной строке, а через исследование в хорошем текстовом редакторе с возможностью бинарного просмотра файла.

Проблему отловил без файла лога. Какой же я дурила... И зря гнал на ФИБы. Нельзя в Delphi называть переменные словами вроде UnitName. Благо, что есть трейс, который позволил выловить причину после первой же успешной сессии - в параметр передавалось значение "pFIBQuery".
...
Рейтинг: 0 / 0
38 сообщений из 38, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Посоветуйте инструмент для диагностики проблемы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]