powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / как писать widestring в firebird в D5?
25 сообщений из 66, страница 1 из 3
как писать widestring в firebird в D5?
    #38845124
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет, с наступающим!

firebird 2, Delphi 5

создал в табличке поле: aaaa varchar(250) CHARACTER SET UNICODE_FSS

и через stream+параметр записываю в него widestring.

потом хочу его прочитать:

bsz := IBQueryW.FieldByName('aaaa').DataSize;
setlength(bu,bsz);
IBQueryW.FieldByName('aaaa').GetData(bu);
ws := buff2ws(@bu);

а DataSize мне всегда возвращает 251. :) хотя в буфере вижу свой widestring. что я не так делаю?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845129
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну ладно, допустим, до нуля прочитаю, остальное проигнорирую.

а вот попытался искать по нему:

IBQ.SQL.Add('select * from zzzz where aaaa = :xxx');
IBQ.Params.Clear;
IBQ.Params.CreateParam(ftWideString,'xxx',ptInput);
IBQ.Params[0].Value := mywidestring;
IBQ.Prepare;
IBQ.Open;

получаю: exception class EIBClientError with message 'unsupported feature'

как победить?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845158
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UNICODE_FSS - это не widestring.
Отсюда гениальная идея: нужно сконвертировать widestring в UNICODE_FSS и затем уже скармливать полученную строку TIBQuery самым обычным способом.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845162
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpertUNICODE_FSS - это не widestring.
Отсюда гениальная идея: нужно сконвертировать widestring в UNICODE_FSS и затем уже скармливать полученную строку TIBQuery самым обычным способом.

А где списать?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845165
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хоть бы намек какой, во что конвертить?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845218
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratinoхоть бы намек какой, во что конвертить?

В UNICODE_FSS, который есть не что иное, как ущербная версия UTF8.
А поскольку в FB 2 есть нормальный UTF8, то про UNICODE_FSS нужно забыть и использовать UTF8.
И, соответственно, конвертировать widestring в UTF8.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845232
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratinoсоздал в табличке поле: aaaa varchar(250) CHARACTER SET UNICODE_FSS

да что ж такое... ну какой еще unicode_fss!

http://www.ibase.ru/unicode_faq.htm

и с Delphi 5 вам практически не светит. если только вы не ошиблись, и у вас XE5.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845233
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

извиняюсь, ошибся, одну букву не дописал
http://www.ibase.ru/unicode_faq.html
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845237
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvи с Delphi 5 вам практически не светит.

Всё там светит и теоретически, и практически.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845261
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertВсё там светит и теоретически, и практически.
только это будет весьма геморройно. прозрачно с юникодом работает Delphi 2009 и выше.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845392
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, теперь стало понятнее... но не совсем. :) И вот, что именно не понятно:

Есть тип WideString, существует TFieldType равный ftWideString. Логично предположить, что ftWideString как раз для WideString. А в базе при этом что, UTF8?... не стыкуется как-то... :) или для ftWideString надо в таблице создавать поле какого-то другого типа?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845430
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratinoсуществует TFieldType равный ftWideString. Логично предположить, что
ftWideString как раз для WideString
Вот только это предположение разбивается о реальность того, что ftWideString не
используется ни одним набором компонент доступа к данным и у TField нет свойства,
позволяющего скормить ему собственно WideString.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845433
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratino,

в базе UTF8, если в коннекте UTF8, то IBX и другие компоненты доступа должны сами преобразовывать UTF8 в строку нужного типа.

Вот я смотрю в IBX от Delphi 2007, которая не юникодная. И вижу, что там в
IBCustomDataSet.pas в DefaulFieldClasses элементам ftWideString, ftFixedWideChar, ftWideMemo и проч сопоставлен nil. Таким образом, с сервера такой тип столбца не получить.
Если выставить его прямо в IBX, на клиенте, то получится пшик. Потому что такой тип никак не обрабатывается.

В юникодных Дельфи, в IBX, для ftWideString есть соответствие, это TIBStringField (который унаследован от TWideStringField), который используется для любых строк.

В общем, вы же указанный мной FAQ не прочитали, а там написано, что компоненты доступа к БД должны поддерживать юникод. И дальше все, чем вы работаете с этими данными, тоже должно поддерживать юникод (как минимум грид, поля ввода, и прочее).
В до-юникодных Дельфи есть компоненты, поддерживающие юникод, но они все сторонние (типа TMS, и т.п.).
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845479
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratinoСпасибо, теперь стало понятнее... но не совсем. :) И вот, что именно не понятно:

Есть тип WideString, существует TFieldType равный ftWideString. Логично предположить, что ftWideString как раз для WideString. А в базе при этом что, UTF8?... не стыкуется как-то... :) или для ftWideString надо в таблице создавать поле какого-то другого типа?

Юникод в FB (UTF8) и юникод в винде (UTF16) - это две большие разницы. UTF8 прекрасно себе живет в ftString.
От сервера ты получаешь строки в UTF8, конвертируешь их в widestring, затем уже с широкими строками делаешь то, что тебе нужно.
И наоборот.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845488
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На компонентах, вроде, StringGrid, DBGrid и прочих, все прекрасно отрисовывается при помощи Windows.TextOutW. Редактировать можно в TRichEdit, если не полениться отпарсить rtf, чтобы получить обратно свой widestring. И в blob полях все нормально сохранется, и вынимается оттуда. Осталось научиться искать.

ftWideString для какого типа данных был сделан?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845500
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpert ,

переменной utf8 у меня нет, я могу просто конвертануть widestring в array of byte. после этого IQuery.Params.CreateParam с каким типом создавать, чтобы через LoadFromStream его залить?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845504
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratino,

интересно, зачем это все надо, если в D2009 и выше работа с юникодом не требует ни доп. компонент, ни одной дополнительной строки кода?
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845512
booratino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
зачем ездить на старом велосипеде, когда можно купить новый, с мотором? :) не знаю.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845552
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booratino IBExpert ,

переменной utf8 у меня нет, я могу просто конвертануть widestring в array of byte. после этого IQuery.Params.CreateParam с каким типом создавать, чтобы через LoadFromStream его залить?

Ты эта... ознакомиться бы с самими кодировками - как да что. Сразу полегчает.
Для utf8 не нужны переменные особых типов, utf8 прекрасно живет в ansistring. Посему AsString для работы с ней вполне достаточно.
Для конвертации UTF8 в widestring нужны соответствующие функции. Их есть, например, здесь:
http://www.yunqa.de/delphi/doku.php/products/tntunicodecontrols/index
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845556
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvbooratino,
интересно, зачем это все надо, если в D2009 и выше работа с юникодом не требует ни доп. компонент, ни одной дополнительной строки кода?

А чо стоит это щастье? Можно не отвечать :)
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845577
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertА чо стоит это щастье? Можно не отвечать
минимально оно стоит $569, это если обновиться до Delphi XE7 Prof, при этом получая все предыдущие версии (кроме 2006) до 7.
Просто если человек мастрячит новый проект на Д5, с юникодом, то это мазохизм, однозначно. Д5 сколько лет? Какие для нее есть компоненты с поддержкой юникода?
Ну да, древние TNT, еще что-то.

booratinoзачем ездить на старом велосипеде, когда можно купить новый, с мотором? :) не знаю.
я не уговариваю купить. я предлагаю оценить разницу в количестве усилий для реализации одной и той же задачи. На Дельфи 5 это N, а на Delphi 2009-XE7 - ноль.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845594
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Kdv!
You wrote on 29 декабря 2014 г. 14:02:22:

Kdv> я предлагаю оценить разницу в количестве усилий для реализации одной и
> той же задачи. На Дельфи 5 это N, а на Delphi 2009-XE7 - ноль.
теоретический маркетинг.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845610
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийтеоретический маркетинг.
ничего теоретического не вижу.
человеку надо юникод записать в базу, и считать его. Вот как он со строками обычными работал в Д5, так же прозрачно будет и в ХЕ7 работать, даже не думая, что это юникод.
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845621
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Kdv!
You wrote on 29 декабря 2014 г. 14:22:45:

Kdv> ничего теоретического не вижу.
> человеку надо юникод записать в базу, и считать его. Вот как он со
> строками обычными работал в Д5, так же прозрачно будет и в ХЕ7 работать,
> даже не думая, что это юникод. теоретически, ога.
если он пишет задачу с нуля.
и освоил нововведения всей линейки версий от D6 до ХЕ7.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как писать widestring в firebird в D5?
    #38845633
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Unified Interbase заявлена поддержка delphi 5, возможно через TNT

Правда, чутьё подсказывает, что в реaльности эту поддержку никто уже лет 5 не проверял.
Но это не фатально, я когда писал на пятёрке поддерживал совместимость JediVCL с D5 и это вполне реально было.
...
Рейтинг: 0 / 0
25 сообщений из 66, страница 1 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / как писать widestring в firebird в D5?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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