Прошу помощи, нужно перебросить текстовое поле в поле BLOB+

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
alex881
Посетитель
Сообщения: 42
Зарегистрирован: 08 Апрель 2015, 19:31
Откуда: Оренбург

Прошу помощи, нужно перебросить текстовое поле в поле BLOB+

Сообщение alex881 »

Перекачиваю таблицу из бтрива в ms sql, в sql в поле типа blob необходимо записать значение текстового поля из талицы бтрива...Насколько понял из хелпа, без проблем идет передача полей blob в друг друга и закачка файлов.А вот как быть с обычным STRINGом? Мучаю код конветора на 7-й версии Клариона,если что.
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1411
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 12 раз
Поблагодарили: 2 раза
Контактная информация:

Прошу помощи, нужно перебросить текстовое поле в поле BLOB+

Сообщение RaFaeL »

Код: Выделить всё

            FIL:Blob{prop:size} = 0
            l# = len(LOC:Str)
            if l#
              FIL:Blob[0 : (l#-1)] = LOC:Str
            end
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Прошу помощи, нужно перебросить текстовое поле в поле BLOB+

Сообщение Yufil »

Хмм. А я всегда считал, что в Blob{Prop:Size} надо записать длину строки
RaFaeL писал(а):

Код: Выделить всё

            l# = len(LOC:Str)
            if l#
              FIL:Blob{Prop:Size} = l#            
              FIL:Blob[0 : (l#-1)] = LOC:Str
            end
В мануале есть фраза: Before assigning additional data that will increase the amount of data in the BLOB (using the string slicing technique), you must reset its size using PROP:Size.

Вона как, если размер блоба растёт, то надо... век живи, век учись...
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1411
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 12 раз
Поблагодарили: 2 раза
Контактная информация:

Прошу помощи, нужно перебросить текстовое поле в поле BLOB+

Сообщение RaFaeL »

Поле BLOB нельзя обрабатывать «целиком»; нужно использовать либо синтаксис «части строки» для доступа к данным, либо свойство PROP:ImageBLOB. Отдельные байты данных в BLOB нумеруются начиная с нуля (0), а не с единицы (1).

Для текущей прочитанной в память записи длину поля BLOB можно получить с помощью функции SIZE. Кроме того, можно получить (и установить) размер BLOB-поля с помощью свойства PROP:BlobSize. Вы можете установить размер BLOB перед присвоением данных в новое поле BLOB, но в этом нет необходимости, так как размер автоматически устанавливается операцией «части строки». Вы можете также использовать PROP:ImageBLOB для хранения и извлечения графической информации без начальной установки PROP:Size. Хорошей идеей является установка PROP:Size в нулевое значение перед присваиванием данных в BLOB, содержащего предыдущие данные, чтобы очистить от «отходов» оставшихся от предыдущих данных.
alex881
Посетитель
Сообщения: 42
Зарегистрирован: 08 Апрель 2015, 19:31
Откуда: Оренбург

Прошу помощи, нужно перебросить текстовое поле в поле BLOB+

Сообщение alex881 »

Спасибо, я делал все наоборот ;-) FIL:Blob = LOC:Str[0 : (l#-1)]
Теперь возникли следующие грабли - когда в присваиваемом тексте попадаются символы кириллицы - append не проходит,
наверное надо строку в юникод перегонять? Или в в чем то другом может быть проблема?

У меня присвоение вот так выглядит
LENV# = LEN(CLIP(LEFT(XTN:Value)))
ObjExtInfo_SQL.Value{PROP:Size} = 0
IF LENV# THEN OBJ:Value[0 : (LENV#-1)] = CLIP(LEFT(XTN:Value)).
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Прошу помощи, нужно перебросить текстовое поле в поле BLOB+

Сообщение Yufil »

Возможно, надо добавить реквизит Binary в описание поля... Было такое (правда, очень давно)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Прошу помощи, нужно перебросить текстовое поле в поле BLOB+

Сообщение Yufil »

И я бы всё-таки проставил длину перед записью в Blob, драйвер MS SQL сильно на меня обижался.
alex881
Посетитель
Сообщения: 42
Зарегистрирован: 08 Апрель 2015, 19:31
Откуда: Оренбург

Прошу помощи, нужно перебросить текстовое поле в поле BLOB+

Сообщение alex881 »

Вот! СПАСИБО ОГРОМНОЕ!!! реквизит Binary пофиксил проблему!
Ответить