Показать сообщение отдельно
  #3  
Старый 02.07.2010, 12:09
blackswan blackswan вне форума
Прохожий
 
Регистрация: 27.05.2010
Сообщения: 4
Репутация: 10
По умолчанию

если возникли трудности с TBlobField, то вот вариант корявый прямо через строку, медленный, но работает, данные могут сохранится не в том виде как хотелось, но если цель - только сохранить их , то вот
Код:
  StringBuilder: TStringBuilder;
  I : LongInt;
  arr : array of Byte;
sqlstring: string;

    StringBuilder.Append('DECLARE @Data varbinary(8000)').AppendLine;
    StringBuilder.Append('SET @Data = 0x');
    for I := 0 to Length(arr)-1 do
        StringBuilder.AppendFormat('%d',[arr[i]]);
      StringBuilder.AppendLine;
sqlstring := StringBuilder.ToString;
теперь с @Data можно работать и передавать куда угодно, можно и без @Data

у меня другая проблема, мне нужно не записать, а прочитать данные
запрос у меня возвращает TRecordset, в котором есть поле Res Varbinary(8000), подскажите, как получить блоб и загрузить его в MemoryStream. Нашел один кусочек примера,

Код:
BLOB:=TBlobStream.Create((query1.FieldByName('COLUMN1')) as TBlobField,bmRead);

изменил под себя, но на эту строку ругается

Код:
 Blob := TBlobStream.Create(( R.FieldByName('Res')) as TBlobField,bmRead);

E2015 Operator not applicable to this operand type
( R : TRecordset; Blob : TBlobStream
Видимо с TRecordset такое не работает, а только с TAdoQuery, но я не могу получить никакие объекты ADO , кроме TRecordset, из-за специфики библиотеки, которой пользуюсь, есть варианты как это обойти?
Ответить с цитированием