【发布时间】:2016-03-15 14:51:11
【问题描述】:
我在 SQLite 中使用 Delphi (Firedac) 遇到了一个无法解决的 ATTACH 和 DETACH 问题。
我连接了一个数据库文件并附加了第二个:
FDConnection1.ExecSQL('ATTACH DATABASE "' + Import_DB_filename + '" AS IMPORTDB;');
其中,“Import_DB_filename”变量包含数据库文件的完整路径和文件名。
这工作正常,我可以通过 FireDac 查询访问连接内的两个数据库,并且可以毫无问题地进行编码。 但是,分离时出现问题:
FDConnection1.ExecSQL('DETACH DATABASE IMPORTDB;');
在调试模式下,总是报错:
调试器异常通知
E Project My_Program.EXE 引发异常类 $C0000005 并带有消息“在 0x00405d7b 处的访问冲突:读取地址 0x00000000”。
显然内存分配出了问题,因为调试器在GETMEM.INC 中的(汇编)函数SysFreeMem(P:Pointer): Integer; 中停止。
无论我尝试什么,错误都会持续存在并与内存泄漏相关联,最终导致编译器崩溃(Delphi Seattle Enterprise)。
即使在不传递任何代码的情况下附加和随后分离数据库也会导致相同的错误。
(FDconnection: 锁定模式 = lmNormal; JournalMode = jmOff 或 jmWALL 或 jmdelete)
我确实希望你能帮助我解决这个长期存在的问题。
【问题讨论】:
-
可以肯定:所以你已经有一个合适的Firedac connection set up,现在你想使用SQLite ATTACH向当前连接添加另一个数据库文件?请edit您的问题包括Delphi版本。
-
为什么需要对两个数据库文件使用相同的 FDConnection?为什么不为他们每个人建立一个单独的连接。
-
说实话,我不确定我是否已经尝试过了。我会查一下。感谢您的建议。
-
我想使用单个 FDConnection,因为我使用“insert...select”语句将数据从第二个数据库复制到现有数据库中。
-
好吧,无论如何,如果您在代码中生成 Sql 语句,您都可以这样做。
标签: sqlite delphi delphi-10-seattle