|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Проблемы с записью данных в базу
База MSSQL Server 2000 или 2005
запросы пишу на ADO нужно записать данные типа в поле с типом данных varbinary Код:
TPkt = array[0..100] of Byte; делаю запрос Код:
with ADOSend do try if not Active then close; Open; Insert; FieldByName('ComputerName').AsString := MyGetComputerName; FieldByName('Packet').SetData(@pkt); //вот в этой строке проблема Post; except end; выдает ошибку Access violation подскажите где я тупанул - или подскажите как этот массив байтовый туда запихать. |
#2
|
||||
|
||||
Проблема видимо в том, что поле переменной длины. Попробуй записать данные через поток, как для BLOB поля.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
|||
|
|||
если возникли трудности с 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; у меня другая проблема, мне нужно не записать, а прочитать данные запрос у меня возвращает 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, из-за специфики библиотеки, которой пользуюсь, есть варианты как это обойти? |