TBlobField.LoadFromStream => Insufficient disk space

andreymx

Делаю локальную "парадокс"овскую (BDE) копию Oracle-данных (DOA).BLOB-поля копирую вот таким образом:
TBlobField(TableExport.Fields[i]).LoadFromStream(OracleQuery1.LOBField(i))
Иногда возникает такая ошибка:
Project ExportTo_c_QQ.exe raised exception class EDBEngineError with message 'Insufficient disk space.File: c:\Temp\INMEM000.REM'. Process stopped. Use Step or Run to continue.
Хотя на диске свободны 12ГБ, а блобов таких размеров в БД точно нету - там максимально до 500 КБ.
14 ответов

andreymx

12ГБ кратны 4 Gb.К сожалению, в Borland Database Engine содержится ошибка при определении свободного пространства для диска, на котором находится либо база данных, либо временные файлы.Суть ошибки: если размер свободного пространства на диске кратен 4 Gb, то программа, использующая BDE, в некоторых случаях (когда остаток от деления свободного пространства диска на 4Gb получается небольшой) начинает выдавать ошибку «Insufficient disk space». При появлении данной ошибки нужно программно или вручную создать на данном диске фиктивный файл небольшого размера (соответствующий остатку от деления), чтобы убрать проблему кратности 4Gb.


andreymx

1. Спасибо2. Ужоз. :)3. Помню, запускал Винду№2 из-под Винды№98. Всё работало, когда места свободного было до 500М. Если больше - тоже чего-то валилось.


andreymx

Вот что бывает, когда в проектах отключают Range checking & Overflow checking!


andreymx

Просто надо было long long int использовать. Какое красивое название ...


andreymx

Опять напоролись на эту дрянь со старой задачей.На диске было >85ГБ свободного места!:)


andreymx

Судя по:http://qc.embarcadero.com/wc/qcmain.aspx?d=7089именно там родилась идея перекрывать GetDiskFreeSpace ядра системы, что мне совершенно не нравится... и все "текущие" реализации "патча":http://cc.embarcadero.com/Item/21475Следуют этому подходу, лишь чуть меняя метод перекрытия.Спрашивается, что мешает перекрыть или пропатчить реализацию SvDrvGetSize у самого Idapi32.dll и не трогать систему вообще?


andreymx

Опять напоролись на эту дрянь со старой задачей.На диске было >85ГБ свободного места!
Ошибка "кратность 4 Gb" также проявляется и для диска из DBTables.Session.PrivateDir.


andreymx

Ошибка "кратность 4 Gb" также проявляется и для диска из DBTables.Session.PrivateDir.
да понятна... только ж она зараза $%^&$&@#-ая даже не говорит на каком диске!Вот что ненавижу - эти ошибки с обрезанной информацией.'Insufficient disk space'Им что, влом написать диск/папку?


andreymx

Если в сообщении «Insufficient disk space» нет 'Drive: ', то это как раз случай PrivateDir.Диск известен, он берется из DBTables.Session.PrivateDir.Определившись с проблемным диском, создайте на нем файл-болванку размером 10 Мб.Файл-болванка должна иметь определнное имя.На диске не должно быть больше одной болванки.


andreymx

да понятна... только ж она зараза $%^&$&@#-ая даже не говорит на каком диске!Вот что ненавижу - эти ошибки с обрезанной информацией.'Insufficient disk space'Им что, влом написать диск/папку?
Ты что? А это что?
Project ExportTo_c_QQ.exe raised exception class EDBEngineError with message 'Insufficient disk space.File: c:\Temp\INMEM000.REM'. Process stopped. Use Step or Run to continue.


andreymx

Anatoly PodgoretskyЭто другой случай, возможна ругань и без указания диска.


andreymx

Вот когда будет ругать в другом случае, тогда и говорить будем, а сейчас этот случай.Ну конечно против подробной информации у меня ничего против нет, есть наоборот.--http://www.podgoretsky.com


andreymx

Только что выполнил обычный запрос, получил EDBEngineError(E).Message='Insufficient disk space.'без ссылок на диск.


andreymx

Ты что? А это что?
Файл c:\Temp\INMEM000.REM был год назад. А щаз вот не схотел говорить где что. Сидел полчаса на разных дисках файлы создавал.А клиент по полудохлой радиосети черз 30 км от меня.Я кликну на его тачке мышкой и полминуты жду ответной реакции.