使用BDE Paradox 7在Delphi 7中运行查询时“内存不足”

时间:2012-07-11 02:52:05

标签: delphi bde

当我运行连接到paradox数据库(* .db)的程序时,它会显示类似project myprogram.exe raised exception class EDBEngineError with message Insufficient memory for this operation的错误消息。

我使用DataSource1,Table1和Query1控件并显示Query1到DBGrid1的结果,记录不大于100条记录,该字段大约是6个字段,数据库中只有1个表。但是Query1 RequestLive属性设置为True。

我在网上搜索解决方案,它显示我需要设置BDE管理员INIT标签以增加ShareMemory等。对于我来说,设置BDE控件的初始化或者出现错误是正常的吗?

感谢。

3 个答案:

答案 0 :(得分:3)

是的,您应该增加此SHAREDMEMSIZE参数,使其按照here所述的方式运行。如果这是一个新项目,我不建议使用paradox数据库。有很多免费的数据库,如Firebird,Microsoft SQL Server Express,Mysql ......

答案 1 :(得分:2)

这个单元是着名的4Gb BDE Bug的补丁。它的目的是修复“磁盘空间不足” - 当磁盘可用空间接近4Gb的倍数时,在使用BDE时可能发生的错误。有关详细信息,请参阅Quality Central上的BDE报告#7089。 在计算可用磁盘空间时,BDE中出错的原因显然是idapi32.dll中的一个错误。 Idapi32.dll正在使用由kernel32.dll导出的名为GetDiskFreeSpaceA的api函数。 解决方法是在当前进程的kernel32.dll中“修补”GetDiskFreeSpaceA,每次调用此函数都会被重定向到新的例程(NewGetDiskFreeSpaceA)。

包含补丁的源代码。如果您使用其他编程语言(即不是Delphi),还会包含预编译的DLL(FIX4GBug.dll)。 (如果你可以编译包含的单元,那么你不需要分发DLL) ---永远修复它

答案 2 :(得分:1)

这可能是磁盘空间问题(即使您有大量可用磁盘空间)。据我所知,BDE / Paradox使用较旧的Windows(32位?)界面检查可用磁盘空间。当可用空间查询返回类似xxxxxxxx 00000yyy的值时,该值将被视为“yyy”并被视为太小。临界点似乎是自由空间接近2Gb的倍数。尝试删除或创建一个大文件。