Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.27;
Скачать: CL | DM;

Вниз

Ошибка в BLOB Paradox   Найти похожие ветки 

 
OlegKrt   (2003-01-06 08:22) [0]

Возникла проблема при чтении из BLOB поля. Там хранятся бинарные данные. При чтении данных через BlobStream машина виснет, на DbiGetBlob. причем если читать из потока по 1-му байту зависнуть может например на 90-м или 110-м байте.
Тип поля установлен как BLOB Binary длина 100.


 
Дмитрий К.К. ©   (2003-01-06 09:25) [1]

Ошибка в 17-й строке.


 
OlegKrt   (2003-01-06 09:55) [2]

17-строке чего?


 
Дмитрий К.К. ©   (2003-01-06 11:20) [3]

Код в студию! ;)


 
Геннадий ©   (2003-01-06 11:48) [4]

А может вот так попробуешь?

TBlobField(Table.FieldByName("Description")).BlobType:= ftMemo;
TBlobField(Table.FieldByName("Description")).Assign(DescMemo.Lines);

Только сам подбери тип и с чем связывать.




 
OlegKrt   (2003-01-06 11:56) [5]

var
Buf:array of byte;
...
SetLength(Buf,1000);
try
BS := T.CreateBlobStream(T.FieldByName("INFO"),bmRead) as TBlobStream;
try
FillChar(Buf[0],1000,0);
n := BS.Size;
BS.Read(Buf[0],n); >>>>>>>>>>здесь зависает
finally
BS.Free;
end;
finally
SetLength(Buf,0);
end;

размеры Blob-ов 72,108,144 и т.п.
если читать в цикле по 1-му байту зависать может при чтении какого либо серединного байта.

Что интересно, все было хорошо, но иногда появляются сбойные записи. Сперва вылечил прозто заменой BLOBA из архива. Но в чем причина может быть?


 
Геннадий ©   (2003-01-06 12:43) [6]

Маленькое замечание:

SetLength лучше писать после BS := T.CreateBlobStream(T.FieldByName("INFO"),bmRead) as TBlobStream; когда уже известен размер.

SetLength(Buf, BS.Size);



И ещё. А зачем ты пишешь Buf[0] ? Я думаю, нужно просто Buf.


 
Дмитрий К.К. ©   (2003-01-06 12:43) [7]

Странный способ чтения BLOB-поля. А что нужно получить в итоге?


 
OlegKrt   (2003-01-06 13:15) [8]

у меня массив моей структуры храниться в BLOB.
Все четается нормально и правильно.
Но в некоторых записях происходит зависание на каком нибудь байте.
т.е. можно провести аналогию как будто поврежден сектор на диске. Есть ли средства проверки данных в BLOB и их восстановления?


 
Дмитрий К.К. ©   (2003-01-06 14:45) [9]

Утилиту dtutil32.exe юзал? Работает с TUTIL32.DLL


 
Дмитрий К.К. ©   (2003-01-06 14:46) [10]

У меня BLOB тоже, бывало, слетал. BLOB has been modified и все такое прочее.


 
OlegKrt   (2003-01-08 09:33) [11]

To Дмитрий К.К.
dtutil32.exe исправил коечто т.е. теперь при чтении не зависает, хотя попортились некоторые данные.
А нет идей почему такое происходит?


 
Дмитрий К.К. ©   (2003-01-08 11:23) [12]

Доступ какой? Многопользовательский?


 
OlegKrt   (2003-01-08 14:37) [13]

Да многопользовательский.
Но с той базой, где произошли сбои работал только один пользователь, поэтому незнаю на что грешить


 
Дмитрий К.К. ©   (2003-01-08 15:46) [14]

Делай блокировку LockTable во время записи, после постинга - UnlockTable. Еще надо обрабатывать одно событие, во время которого второму пользователю будет выдаваться предупреждение о том, что запись блокирована.



Страницы: 1 вся ветка

Текущий архив: 2003.01.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
14-87091
dkDimon
2002-12-28 01:04
2003.01.27
WinSock


1-86850
blackman
2003-01-19 11:46
2003.01.27
Как узнать автора файла документа ?


3-86689
Worker
2003-01-08 11:36
2003.01.27
Слезно молю о помощи. Помогите с создать SQL.


1-86953
Mars
2003-01-17 09:13
2003.01.27
Редактирование TreeView


8-86973
ivankor
2002-10-11 15:02
2003.01.27
Как перевести данные TMemoryStream