2

当我运行连接到 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 控件的初始化是否正常或可能有问题?

谢谢。

4

3 回答 3

3

是的,您应该增加此SHAREDMEMSIZE参数以使其按此处所述工作。如果这是一个新项目,我不建议使用 paradox 数据库。有很多免费的数据库,比如 Firebird、Microsoft SQL Server Express、Mysql...

于 2012-07-11T15:21:42.157 回答
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)---永远修复它

于 2013-07-03T15:40:35.597 回答
1

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

于 2012-07-19T09:17:44.763 回答