DataModule1.backupdata.sql.clear;
  DataModule1.backupdata.SQL.Text:='backup database yferp to disk='''+DirectoryListBox1.GetItemPath(DirectoryListBox1.ItemIndex)+'\'+datetostr(date)+'.bak'+'''';
  DataModule1.backupdata.ExecSQL;
  application.MessageBox(pchar(数据已备份到'+DirectoryListBox1.GetItemPath(DirectoryListBox1.ItemIndex)+'\'+datetostr(date)+'.bak'),'备份成功',mb_iconinformation);
  DataModule1.backupdata.close;
----------------------------------------------
以上代码为备份数据库,但是每打开程序只能备份一次,第二次备份就提示读内存地址错误,重新打开程序再备份却可以,也是只能备份一次,请问应该如何正确释放内存!!

解决方案 »

  1.   

    SORRY
    还有一句写掉了
    DataModule1.backupdata.sql.clear;
      DataModule1.backupdata.SQL.Text:='backup database yferp to disk='''+DirectoryListBox1.GetItemPath(DirectoryListBox1.ItemIndex)+'\'+datetostr(date)+'.bak'+'''';
      DataModule1.backupdata.ExecSQL;
      application.MessageBox(pchar(数据已备份到'+DirectoryListBox1.GetItemPath(DirectoryListBox1.ItemIndex)+'\'+datetostr(date)+'.bak'),'备份成功',mb_iconinformation);
      DataModule1.backupdata.close;
      DataModule1.backupdata.free;---->去掉这句就中以了...但是我想问一下,在CLOSE之后是不是没有必要用FREE??应该在哪 些时候用FREE呢?
    谢谢楼上三位!!!
      

  2.   

    就是这句错了!
      去掉即可。
    如果非要的话,在最前面加上
      backupdata := tadoquery.create即可。总的来说:去掉最好,!!!:)
      

  3.   

    自己动态创建的adoquery要手动free掉
    存在form上的一般不需要