AnyDac - 如何断开与内存中的sqlite db的连接?

时间:2013-07-15 21:55:37

标签: delphi delphi-xe2 anydac firedac

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

我查看了AnyDac文档并在线搜索,但我找不到任何方式可以正确地使用AnyDac从数据库断开连接。我注意到当我调用TADConnection的“close”方法时,sqlite文件似乎保持打开状态。我猜我的内存数据库也是如此。

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

1 个答案:

答案 0 :(得分:0)

ADConnection.Close完全删除内存中的SQLite DB。使用下一个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')));