【问题标题】:"Insufficient Memory" when running query in Delphi 7 using BDE Paradox 7使用 BDE Paradox 7 在 Delphi 7 中运行查询时出现“内存不足”
【发布时间】:2012-07-11 02:52:04
【问题描述】:

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

谢谢。

【问题讨论】:

  • try onclose 可能类似于FreeAndNil(Query1);..free 然后表和查询组件与数据库断开连接
  • 首先,按照您找到的建议执行操作。如果这不起作用,请回来。 FWIW,“此操作的内存不足”通常是资源问题,而不是实际内存。
  • 几个月前我也遇到了同样的问题,亚当关于 SHAREDMEMSIZE 的帖子为我解决了问题。

标签: delphi bde


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-24
        相关资源
        最近更新 更多