Ни с того ни с сего при выполнении запросов с большим количеством строк стала выскакивать ошибка 9475 : $2503 : Insufficient disk space, указывая мне на локальный File: C:\WINNT\TEMP\INMEM000.REM, размер которого в момент ее появления нулевой. На диске C: свободно 16 гигов на сервере тоже постирал все старые таблички с BLOB-полями, локальные настройки BDE не менял. В чем причина?
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
08-02-2010 00:50 | Комментарий к предыдущим ответам
Спасибо!!! Кто бы мог подумать???!!! 56 гиг делится на 4!!!
//////////////////////////////////////////////////////////////////////////////////////
//
// ----- BDE 4GB PATCH -----
// Version 1.01
//
//
//
// FUNCTION
//
// This unit is a patch for the famous 4Gb BDE Bug. It is build to fix the
// 'Insufficient disk space'-error which can occur while using BDE when
// the disk free space is near to a multiple of 4Gb. For more information
// please see BDE report# 7089 on Quality Central.
//
// TECH DETAILS
//
// The reason for the error in BDE is aparently a bug in idapi32.dll while
// computing free disk space. Idapi32.dll is using the api function called
// GetDiskFreeSpaceA exported by kernel32.dll.
// The solution is to 'patch' GetDiskFreeSpaceA in kernel32.dll for the current
// process, every call to this function is redirected to a new routine
// (NewGetDiskFreeSpaceA).
//
// USAGE
//
// Just include this unit in your at the top of the uses clause in your project.
//
//
// 2004-02-26
// (c) Reinaldo Roberto Yaсez Arrey
// Buenos Aires, Argentina
// ryaayr@yahoo.com, ryaayr@arnet.com.ar
// Any feedback is welcome!
//
// Disclaimer:
// The code and text in this unit are not associated with Borland. This unit is
// provided "as is"! The author takes no responsibility for use, or misuse, of
// this unit. Usage of this code is at your own risk.
// License:
// You are free to use this unit in any way, but beware that BDE is an
// official Borland product, and therefore bound by the terms and conditions of
// the Borland product license.
//
//////////////////////////////////////////////////////////////////////////////////////
// Thanks to:
// Leonardo Mato & Manuel E. Parma
// for their encouragement to produce good code.
//////////////////////////////////////////////////////////////////////////////////////
//
// History: 2004-03-05 Version 1.01 (Fixes a problem on finalization if using packages)
// 2004-02-26 Version 1.00 (Created)
//
//////////////////////////////////////////////////////////////////////////////////////
unit FixBDE4GbBug;
interface
procedure PatchBDE;
implementation
uses Windows;
type
TRYPatch = record
OrgAddr: Pointer;
OrgBytes: array[0..4] of Byte;
end;
// Este metodo nunca lo vi escrito correctamente para contemplar los casos de
// usar packages o no.
// Si se utilizan packages HAY que preguntar por el $25FF y patchear el puntero a
// puntero a puntero
// Sino, no se patchea absolutamente nada !!!!
// Ry@2003.10.31
function RedirectByRY(OldPtr, NewPtr: Pointer): TRYPatch;
type
PPtr=^pointer;
PPPtr=^PPtr;
TByteArray=array[0..maxint-1] of byte;
PByteArray=^TByteArray;
var
OldProtect,
Protect : DWORD;
p: PByteArray;
begin
if PWord(OldPtr)^ = $25FF then
begin {Es un JMP DWORD PTR [XXXXXXX](=> Esta utilizando Packages)}
p := OldPtr;
OldPtr := (PPPtr(@p[2])^)^;
end;
VirtualProtect(OldPtr, 5, PAGE_READWRITE, @OldProtect);
result.OrgAddr := OldPtr;
result.OrgBytes[0] := PByte(OldPtr)^;
result.OrgBytes[1] := PByte(Integer(OldPtr) + 1)^;
result.OrgBytes[2] := PByte(Integer(OldPtr) + 2)^;
result.OrgBytes[3] := PByte(Integer(OldPtr) + 3)^;
result.OrgBytes[4] := PByte(Integer(OldPtr) + 4)^;
Patch for BDE 'Insufficient disk space' problem. (4Gb multiples Terms: No Special Terms Name: Reinaldo Yanez email: ryaayr@yahoo.com URL: None Summary: Patch for BDE 'Insufficient disk space'-error which can occur while using BDE when the disk free space is near to a multiple of 4Gb. Description: This unit is a patch for the famous 4Gb BDE Bug. It is build to fix the 'Insufficient disk space'-error which can occur while using BDE when the disk free space is near to a multiple of 4Gb. For more information please see BDE report# 7089 on Quality Central.
The reason for the error in BDE is aparently a bug in idapi32.dll while computing free disk space. Idapi32.dll is using the api function called GetDiskFreeSpaceA exported by kernel32.dll.
The solution is to 'patch' GetDiskFreeSpaceA in kernel32.dll for the current process, every call to this function is redirected to a new routine (NewGetDiskFreeSpaceA).
The source code of the patch is included. If you use another programming language (i.e. not Delphi), a precompiled DLL (FIX4GBug.dll) is also included. (If you can compile the included unit, then you do not need to distribute the DLL)
Product: Delphi (4-7) Fixes Contest: None Uploaded: 25-Feb-04 10:03:08 AM last updated 22-Mar-04 6:44:49 PM
По всей видимости, BDE отдает размер свободного места на диске в переменной типа INTEGER (32-разрядное) и, при превышении 4Г старшие разряды просто обрезаются и получается только остаток до ближайшего числа, кратного 4Г.
Не знаю чей это глюк, виндов или BDE, но присутствует такой эффект, когда свободное место на рабочем диске приближается к цифрам, кратным 4Гб. Т.е. около 4Г, 8Г, 16Г и т.д. Попробуй запихнуть на этот диск немножко "мусора" ;), так, чтобы там стало места, ну, скажем, 15Г. Я не удивлюсь, что все заработает. Как с этим бороться не шаманскими методами, увы, не представляю.
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.