Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка в 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-й строке.


Наверх

Титульная страница Поиск, карта сайта Написать письмо