![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка в BLOB Paradox [D6, Paradox]
OlegKrt © (2003-01-06 08:22:00)Возникла проблема при чтении из BLOB поля. Там хранятся бинарные данные. При чтении данных через BlobStream машина виснет, на DbiGetBlob. причем если читать из потока по 1-му байту зависнуть может например на 90-м или 110-м байте.
Тип поля установлен как BLOB Binary длина 100.
Дмитрий К.К. (2003-01-08 15:46:00) [1]Делай блокировку LockTable во время записи, после постинга - UnlockTable. Еще надо обрабатывать одно событие, во время которого второму пользователю будет выдаваться предупреждение о том, что запись блокирована.
OlegKrt (2003-01-08 14:37:00) [2]Да многопользовательский.
Но с той базой, где произошли сбои работал только один пользователь, поэтому незнаю на что грешить
Дмитрий К.К. (2003-01-08 11:23:00) [3]Доступ какой? Многопользовательский?
OlegKrt (2003-01-08 09:33:00) [4]To Дмитрий К.К.
dtutil32.exe исправил коечто т.е. теперь при чтении не зависает, хотя попортились некоторые данные.
А нет идей почему такое происходит?
Дмитрий К.К. (2003-01-06 14:46:00) [5]У меня BLOB тоже, бывало, слетал. BLOB has been modified и все такое прочее.
Дмитрий К.К. (2003-01-06 14:45:00) [6]Утилиту dtutil32.exe юзал? Работает с TUTIL32.DLL
OlegKrt (2003-01-06 13:15:00) [7]у меня массив моей структуры храниться в BLOB.
Все четается нормально и правильно.
Но в некоторых записях происходит зависание на каком нибудь байте.
т.е. можно провести аналогию как будто поврежден сектор на диске. Есть ли средства проверки данных в BLOB и их восстановления?
Геннадий (2003-01-06 12:43:00) [8]Маленькое замечание:
SetLength лучше писать после BS := T.CreateBlobStream(T.FieldByName("INFO"),bmRead) as TBlobStream; когда уже известен размер.
SetLength(Buf, BS.Size);
И ещё. А зачем ты пишешь Buf[0] ? Я думаю, нужно просто Buf.
Дмитрий К.К. (2003-01-06 12:43:00) [9]Странный способ чтения BLOB-поля. А что нужно получить в итоге?
OlegKrt (2003-01-06 11:56:00) [10]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 11:48:00) [11]А может вот так попробуешь?
TBlobField(Table.FieldByName("Description")).BlobType:= ftMemo;
TBlobField(Table.FieldByName("Description")).Assign(DescMemo.Lines);
Только сам подбери тип и с чем связывать.
Дмитрий К.К. (2003-01-06 11:20:00) [12]Код в студию! ;)
OlegKrt (2003-01-06 09:55:00) [13]17-строке чего?
Дмитрий К.К. (2003-01-06 09:25:00) [14]Ошибка в 17-й строке.