![]() |
|
|
![]()
|
|
| alisa7 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 24.2.2010 Репутация: нет Всего: нет |
Доброе время суток!
Работаю в Delphi 2009, сервер БД - Firebird 2.1. C сервера передаю сообщения, используя post_event. Для получения на клиенте использую IBEvents. Сообщения получаются только те, имя которых состоит из 1 символа. Причем если сообщение начинается с этого символа, то оно тоже выдается. В Delphi 7 таких проблем не было. Может кто-то сталкивался, помогите плз! |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
Не знаю, не работал с сообщениями. Но ты в курсе, что D2009 - это уже юникод? Может в этом дело? Да и компоненты IBX в D2009 глючат.
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: нет Всего: 459 |
Если есть такая строка из латинских символов "vasea", то в юникоде она представляет собой "v"#0"a"#0"s"#0"e"#0"a"#0 . Т.о. строка из одного юникодного символа совпадает с анси строкой, если символов больше одного, то уже совпадения нет. Однако все зависит от методики сравнения. Если содержимое строки соответствует типу строки, то делфи может осуществляет правильное преобразование сам. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 23 Всего: 54 |
Alexeis, и возможно ли научить FB посылать сообщения в utf?
зы с ужасом жду дня когда прейдется переходить на уникодную делфи -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
сразу советую использовать фибы, а то заманаешься переконвертировать из юникода в юникод
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: нет Всего: 459 |
Да какая разница в чем оно приходит? Посмотрите внимательно что приходит и сконвертируйте в то чего нужно для сравнения -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 23 Всего: 54 |
проблему на стороне делфи можно решить.. это понятно.. можно ли решить все проблемы на стороне сервера. -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| alisa7 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 24.2.2010 Репутация: нет Всего: нет |
Да, то что D2009 - это юникод, я знаю и что IBX компоненты глючат - тоже догадалась. Поставила вчера FIBPlus, работает хорошо все, только вот не знаю будут ли проблемы с тем что это демо версия.... Добавлено через 3 минуты и 32 секунды
Если честно, то так и не поняла какую же методику сравнения выбрать, чтобы преобразовать правильно! Понимаю только что там ansistring, а там unicodestring, но вот как с ними работать - не разобралась... |
||||
|
|||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: нет Всего: 459 |
Проблема не контейнере для строки, а в том что IBX не всегда следит, что реально записано в контейнере. Содержимое строки может не соответствовать типу строки. Посмотрел FIBPlus там вопросы кодировок отслеживаются (не знаю насколько правильно, но по крайней мере авторы за этим следят) -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: нет Всего: 459 |
А все, нашел решение. Проблема была в том, что в старый обработчик принимал параметр EventName : AnsiString , а в версии 2009/2010 он уже объявлен как EventName : UnicodeString
Интересно, что делфи не выдал ошибку несовместимости параметров функций обработчиков. Короче решается все так, удаляются все обработчики OnEventAlert, и вместо них генерятся новый (двойной клик в object inspector) старый код переносим в новые обработчики, в результате теперь в параметр EventName уже UnicodeString и содержимое соответствует контейнеру. После этого сравнение уже работает верно. Можно сравнивать хоть с AnsiString хоть с WideString -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| alisa7 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 24.2.2010 Репутация: нет Всего: нет |
Не поняла зачем их удалять и генерить заново - если они первоначально написаны в 2009. Все равно сравнивает неправильно. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: нет Всего: 459 |
Параметр обработчика EventName : AnsiString или EventName : UnicodeString ? Вариант с EventName : String таже подойдет. Не подходит только "EventName : AnsiString", поскольку юникодные компоненты туда запихнут юникод вне зависимости от того какого типа строка. У меня была такая же проблема, но при переносе из 2007->2010. Но в 2007 в обработчике параметр был определен как AnsiString и соответственно код неправильно трактовал содержимое строки. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| alisa7 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 24.2.2010 Репутация: нет Всего: нет |
У меня EventName : String, но тем не менее не подошло!
Даже не знаю где искать уже... |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: нет Всего: 459 |
Покажите фрагмент обработчика OnEventAlert с комментариями. Думаю, что проблема в мелочи. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 23 Всего: 54 |
по моему ошибка сравнения в IBX и они вообще не вызывают OnEventAlert поэтому не важно какой код в обработчике
-------------------- Кольцов Виктор Владимирович |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |