Страница 1 из 1

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

Добавлено: 13 Февраль 2017, 20:12
alex881
Перекачиваю таблицу из бтрива в ms sql, в sql в поле типа blob необходимо записать значение текстового поля из талицы бтрива...Насколько понял из хелпа, без проблем идет передача полей blob в друг друга и закачка файлов.А вот как быть с обычным STRINGом? Мучаю код конветора на 7-й версии Клариона,если что.

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

Добавлено: 13 Февраль 2017, 21:50
RaFaeL

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

            FIL:Blob{prop:size} = 0
            l# = len(LOC:Str)
            if l#
              FIL:Blob[0 : (l#-1)] = LOC:Str
            end

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

Добавлено: 13 Февраль 2017, 22:20
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.

Вона как, если размер блоба растёт, то надо... век живи, век учись...

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

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

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

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

Добавлено: 14 Февраль 2017, 7:58
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)).

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

Добавлено: 14 Февраль 2017, 9:54
Yufil
Возможно, надо добавить реквизит Binary в описание поля... Было такое (правда, очень давно)

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

Добавлено: 14 Февраль 2017, 9:58
Yufil
И я бы всё-таки проставил длину перед записью в Blob, драйвер MS SQL сильно на меня обижался.

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

Добавлено: 14 Февраль 2017, 10:06
alex881
Вот! СПАСИБО ОГРОМНОЕ!!! реквизит Binary пофиксил проблему!