0

我在 Delphi XE2 上使用带有 AnyDac 的内存 SQLite 数据库。我注意到即使我在重新启动程序后忘记先连接数据库,我的查询也会返回结果,这可能是由 AnyDac 的自动连接功能引起的。问题是我猜这也一定意味着即使在程序本身终止后内存数据库仍保留在内存中,这是一种内存泄漏。

我查看了 AnyDac 文档并在线搜索,但我找不到任何方法来正确使用 AnyDac断开与数据库的连接。我注意到,当我调用 TADConnection 的“关闭”方法时,sqlite 文件似乎保持打开状态。我想我的内存数据库也会发生同样的情况。

谁能告诉我如何以正确和安全的方式完全关闭、断开和删除内存中的 SQLite 数据库?

4

1 回答 1

0

ADConnection.Close完全删除内存中的 SQLite DB。使用 next ADConnection.Open,显式或隐式地创建新的空内存数据库。

这可以通过简单的测试很容易地确认:

  ADConnection1.Open;
  ADConnection1.ExecSQL('create table TEST (A, B)');
  ADConnection1.ExecSQL('insert into TEST values (1, 2)');
  // show value of TEST.A
  ShowMessage(VarToStr(ADConnection1.ExecSQLScalar('select A from TEST')));
  ADConnection1.Close;
  ADConnection1.Open;
  // next statement generates exception - [FireDAC][Phys][SQLite] ERROR: no such table: TEST
  ShowMessage(VarToStr(ADConnection1.ExecSQLScalar('select A from TEST')));
于 2013-07-16T10:18:09.613 回答