我正在使用内存中的SQLite数据库和AnyDac在德尔菲XE2上.我注意到,即使在重新启动程序后忘记首先连接数据库时,我的查询仍然返回结果,这可能是由于AnyDac的自动连接功能造成的。事情是这样的,我想这也意味着内存中的数据库即使在程序本身结束后也会留在内存中,这是一种内存泄漏。
我查看了AnyDac文档并在网上搜索,但是我找不到任何方法来正确地使用AnyDac将从数据库中断开。我注意到,当我调用TADConnection的"close“方法时,sqlite似乎保持打开状态。我想我的内存数据库也是如此。
有人能告诉我如何以正确和安全的方式完全关闭、断开和删除内存中的SQLite数据库吗?
发布于 2013-07-16 10:18:09
ADConnection.Close完全删除内存中的SQLite DB.使用下一个ADConnection.Open,显式或隐式地创建新的空内存DB .
通过简单的测试可以很容易地证实这一点:
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')));https://stackoverflow.com/questions/17664633
复制相似问题