|
|
|
TWideStringField.Size - некорректный размер в D2010
|
|||
|---|---|---|---|
|
#18+
если использовать кодировку UTF8 и dbExpress, то Size дает ровно в 4 раза больше, чем есть на самом деле, хотя в справке сказано Size is the maximum number of characters in the string. т.е. именно символов, а не байтов если ж взять кодировку win1251, то размер правильный вопрос - это глюк драйвера или ошибка в документации? склоняюсь к первому, т.к. поля CHAR(1) вдруг на клиенте вырастают до 4 символов и дополняются пробелами у кого есть возможность, пожалуйста, проверьте в других версиях Delphi новее 2010 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2017, 14:34:28 |
|
||
|
TWideStringField.Size - некорректный размер в D2010
|
|||
|---|---|---|---|
|
#18+
сорри, БД - FB 2.5 и драйвер, соответственно, dbxfb.dll ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2017, 14:36:38 |
|
||
|
TWideStringField.Size - некорректный размер в D2010
|
|||
|---|---|---|---|
|
#18+
Правильный Вася, XE3 // DataSize is byte count function TWideStringField.GetDataSize: Integer; begin Result := (Size + 1) * 2; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2017, 16:05:59 |
|
||
|
TWideStringField.Size - некорректный размер в D2010
|
|||
|---|---|---|---|
|
#18+
DesWindПравильный Вася, XE3 // DataSize is byte count function TWideStringField.GetDataSize: Integer; begin Result := (Size + 1) * 2; end; наверное правильнее переписать так: Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2017, 16:08:20 |
|
||
|
TWideStringField.Size - некорректный размер в D2010
|
|||
|---|---|---|---|
|
#18+
Правильный Васяесли использовать кодировку UTF8 и dbExpress, то Size дает ровно в 4 раза больше, чем есть на самом деле, хотя в справке сказано За dbExpress не скажу, но System.Length, например, возвращает именно длину в байтах для UTF8 и прочих MBCS и в символах - для Unicode. Возможно это сделано для удобства выделения памяти и/или скорости (чтобы узнать реальную длину строки UTF8 надо полностью проанализировать её содержимое). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2017, 17:09:00 |
|
||
|
TWideStringField.Size - некорректный размер в D2010
|
|||
|---|---|---|---|
|
#18+
DesWind, свойства DataSize и Size - суть разные вещи: DataSize Indicates the amount of memory needed to store a field component's value. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2017, 17:29:48 |
|
||
|
TWideStringField.Size - некорректный размер в D2010
|
|||
|---|---|---|---|
|
#18+
большая просьба хочу поставить эксперимент с разными версиями драйвера DBXFB.DLL но у меня есть только от D2010 пришлите на мыло в анкете от других версий, новее, чем D2010 может, там более приемлемое поведение заранее спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 15:03:31 |
|
||
|
TWideStringField.Size - некорректный размер в D2010
|
|||
|---|---|---|---|
|
#18+
судя по вопросам, которые я накопал в интернете по этому поводу, болячка старая и запущенная, появилась вместе с юникодом в BDS-2006 за столько лет вполне могла стать фичей, хоть и недокументированной это проявляется не только в dbExpress, но и в ADO не имеет значения и кодировка в БД, важно, что указано в настройках коннекта к БД из всего этого можно сделать вывод, что драйвер тут вряд ли имеет значение, скорее, где-то во внутренностях компонентов доступа к данным недоработка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 16:03:45 |
|
||
|
TWideStringField.Size - некорректный размер в D2010
|
|||
|---|---|---|---|
|
#18+
Правильный Васяпоявилась вместе с юникодом в BDS-2006 На Юникод Delphi перешла в 2009 Delphi 2005-2006-2007 - в плане юникодности ничем не отличаются от Delphi 4-5-7 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 18:34:57 |
|
||
|
TWideStringField.Size - некорректный размер в D2010
|
|||
|---|---|---|---|
|
#18+
Правильный Васяс разными версиями драйвера DBXFB.DLL а попробуй сторонние драйвера DBX Firebird есть как минимум китайский и от UniDAC ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 18:37:35 |
|
||
|
TWideStringField.Size - некорректный размер в D2010
|
|||
|---|---|---|---|
|
#18+
попробовал китайский dbx4fb.dll хоть он и постоянно обновляется, но у меня работать не захотел: - на простом SELECT из простой таблицы валится с AV в самом драйвере "read of address 0000000" - на SELECT CAST( ... AS ... ) - Dynamic SQL error -104 Malformed string, хотя запрос рабочий попробовал драйвер dbexpida40.dll от DevArt этот дает правильный размер, но тут другая засада - ему совершенно фиолетово, что указать в параметрах подключения Charset=UTF8 и UseUnicode=True. Charset вообще можно ставить любой, хоть пустой, хоть "Дядя Петя", разницу в результатах работы я не обнаружил а вот у IBX такое же поведение, как в сабже, т.е. некорректное итог неутешительный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 14:06:39 |
|
||
|
TWideStringField.Size - некорректный размер в D2010
|
|||
|---|---|---|---|
|
#18+
докладываю результаты экспериментов я оказался прав - все дело в интерпретации драйвером теперь подробно -------------------------------------- исследуя исходники IBX, наткнулся на Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. как видно, в код жестко зашиты идентификаторы чарсетов, причем для UTF8=59 это очень нехорошо, но для IBX, предназначенных для работы с InterBase, это простительно однако простой анализ таблицы RDB$CHARACTER_SETS в БД на FireBird показывает, что там для UTF8 идентификатор=4, а код 59 соответствует чарсету WIN1256 для эксперимента подсоединяемся к БД с этим чарсетом (хоть через IBX, хоть через dbExpress) и - вуаля! - размер поля на клиенте становится корректным из всего этого можно сделать несколько выводов: 1. в момент разветвления IB6 и FB1 идентификаторы чарсетов совпадали, но дальше каждый разработчик добавлял новые чарсеты со своими ID по своему усмотрению и в свой момент 2. драйвер dbxfb.dll явно делался по исходникам для dbxint.dll, возможно, условной компиляцией отдельных кусочков (в бинарнике четко прослеживаются имена модулей с "IB", а также присутствует SQL-тип данных BOOLEAN, которого в 2010 г в FB еще не было) 3. программисты драйвера наверняка тоже зашили в код ID чарсетов вместо того, чтобы считать и интерпретировать корректно данные из RDB$CHARACTER_SETS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2017, 15:18:13 |
|
||
|
TWideStringField.Size - некорректный размер в D2010
|
|||
|---|---|---|---|
|
#18+
большая просьба! у кого есть официальная учетка Embarcadero, зарегистрируйте баг-репорт по этому поводу очень уж неприятно вылавливать таких блох на ровном месте, да еще и чувствовать, что к FB относятся как к бедному родственнику PS замечу, что с драйвером от Delphi 10.1 такая же фигня (другие на проверял, но вряд ли дело сдвинулось), т.е. тянется уже много лет, а исправить код драйвера, имхо, работы им на пару часов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2017, 15:29:07 |
|
||
|
TWideStringField.Size - некорректный размер в D2010
|
|||
|---|---|---|---|
|
#18+
никто не будет править IBX, когда есть FireDAC ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2017, 16:03:58 |
|
||
|
TWideStringField.Size - некорректный размер в D2010
|
|||
|---|---|---|---|
|
#18+
Правильный Васячувствовать, что к FB относятся как к бедному родственникуНикто никогда не обещал поддержку FB IBX'ом. http://www.ibase.ru/ibx/ Тамк красным по белому выделен ворнинг И выдержка из FAQ http://www.ibase.ru/unicode_faq/ ПОДДЕРЖКА UTF8 В INTERBASE И FIREBIRD ОДИНАКОВАЯ? К сожалению, нет. Причем, неодинаковых аспектов много. В rdb$character_sets кодировка UTF8 имеет в Firebird идентификатор 4 (это был свободный номер рядом с давно имеющейся в IB и FB кодировкой UNICODE_FSS с ID = 3), а в InterBase – 59. Код 59 в Firebird имеет кодировка WIN1256. То есть, разработчики InterBase не ставили перед собой вопрос обеспечения совместимости с Firebird в этом плане. Начиная с Firebird 1.5 при получении строковых данных CHAR и VARCHAR с сервера, если это не кодировки NONE или OCTETS, и если кодировка коннекта не NONE, то в sqlsubtype передается: в старшем байте код collate, а в младшем – код character set. В InterBase также передается код collate в sqlsubtype, однако, с какой именно версии, неизвестно. Возможно, с 2009, т. к. IBX в Delphi 2010 содержит изменения на эту тему (см. в конце FAQ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2017, 16:26:10 |
|
||
|
TWideStringField.Size - некорректный размер в D2010
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Никто никогда не обещал поддержку FB IBX'ом krapotkinникто не будет править IBX, когда есть FireDAC почему вы уцепились за IBX ??? почитайте сабж, там dbExpress IBX употреблен только в цепочке изучения проблемы а по поводу FAQ - увы, не читал, бывает сам нашел, в чем проблема, хоть и убил кучу времени но dbExpress для FB не работает, как обещано, вот и прошу баг-репорт сделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2017, 16:33:17 |
|
||
|
TWideStringField.Size - некорректный размер в D2010
|
|||
|---|---|---|---|
|
#18+
Правильный Вася большая просьба! у кого есть официальная учетка Embarcadero, зарегистрируйте баг-репорт по этому поводу В чем проблема зарегистрироваться самому ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2017, 17:09:29 |
|
||
|
TWideStringField.Size - некорректный размер в D2010
|
|||
|---|---|---|---|
|
#18+
Правильный Васяно dbExpress для FB не работает, как обещаноЗавязываться на dbExpress при наличии лучших аналогов, в т.ч. FireDAC - это просто глупо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2017, 17:34:02 |
|
||
|
TWideStringField.Size - некорректный размер в D2010
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамЗавязываться на dbExpress при наличии лучших аналогов, в т.ч. FireDAC - это просто глупо. глупо не читать топик (в моей версии нет таких компонентов) глупо давать советы не по сути вопроса (я ж не предлагаю купить танк, если вдруг Ландровер застрял в поле) а еще глупо при каждом появлении нового инструмента все переделывать под него, заменяя рабочий инструмент с известными шероховатостями на новый с неизвестными занозами, - и все это в угоду распальцовкам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2017, 17:57:44 |
|
||
|
TWideStringField.Size - некорректный размер в D2010
|
|||
|---|---|---|---|
|
#18+
Правильный Вася> глупо не читать топик (в моей версии нет таких компонентов) Я читал. Да, покупать придётся отдельно, но если приложение коммерческое, а не "для себя" - то всё равно дешевле выйдет. Тем более, что есть и "более бесплатные" аналоги. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2017, 18:34:04 |
|
||
|
TWideStringField.Size - некорректный размер в D2010
|
|||
|---|---|---|---|
|
#18+
Правильный Васяглупо не читать топик глупо не думать. эмро вносит исправления только в действующие версии. и то там такие критичные живут, что ... так что тикет по каким-то олдскульным компонентам из версии 2.0 абсолютно бесполезен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2017, 09:18:37 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39499172&tid=2041888]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
169ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
| others: | 225ms |
| total: | 518ms |

| 0 / 0 |
