【问题标题】:I can't delete all the data within 2 tables of a database which is in a relationship using Delphi7我无法删除使用 Delphi7 建立关系的数据库的 2 个表中的所有数据
【发布时间】:2013-09-08 19:21:48
【问题描述】:

我收到以下错误:

项目 PAT_p.exe 引发异常类 EOleException,并显示消息“无法删除或更改记录,因为表 'tblAntwoorde' 包含相关记录”。进程停止。使用 Step 或 Run 继续。

以下代码第一次执行时出现此错误:

procedure TfrmKomp.btnTerug1Click(Sender: TObject);
begin
  frmData.qryVGKompetisieDB.Active := false;
  frmData.qryVGKompetisieDB.SQL.Text := 'Delete * from tblDeelnemers'; // delete from table1
  frmData.qryVGKompetisieDB.ExecSQL;
  frmData.qryVGKompetisieDB.SQL.Text := 'Delete * from tblAntwoorde'; // delete from table2
  frmData.qryVGKompetisieDB.ExecSQL;
  frmData.qryVGKompetisieDB.SQL.Text := 'SELECT * from tblDeelnemers'; // for displaying on dbgrid that records is removed  
  frmData.qryVGKompetisieDB.Active := true;
end;

我的数据库中的表以一对多的关系链接,其中 ID 是 tblDeelname 中的 PK,Nommer 是自动编号,而 tblAntwoorde 中的 PK。不幸的是,这是针对学校的实际评估任务,并且必须存在关系。

我想删除表格中的所有数据,但表格必须与其所有列一起保留在那里。这不一定是sql语句,我可以在delphi7中使用的任何类型的代码都可以。

【问题讨论】:

  • 您是否尝试过以其他顺序删除记录?或者您可以在指定外键时使用ON DELETE CASCADE 选项自动删除。
  • 正如@Inspired 所说,您可以在您的桌子上指定cascade delete 规则。然后,您将只从主表中删除记录,这样做,相关表中的所有记录也将被删除。
  • 我没有将此标记为答案,因为我有一段时间没有使用 Delphi,但是您不应该在每次删除操作时关闭并打开您的 tquery 吗?
  • @Robert:不,你没有。设置 Text 会替换已经存在的内容。使用AddAppend 时必须使用Clear,但使用Text 时则不需要。

标签: sql delphi ms-access delphi-7


【解决方案1】:

在Cascate delete sugestion之后我什么时候研究它并找到了一个更简单的方法here

基本上必须发生的事情是必须先删除辅助表中的数据,然后才能删除主表中的数据。

procedure TfrmKomp.btnTerug1Click(Sender: TObject);
begin
  frmData.qryVGKompetisieDB.Active := false;
  frmData.qryVGKompetisieDB.SQL.Text := 'Delete * from tblAntwoorde'; // delete from SecondaryTable
  frmData.qryVGKompetisieDB.ExecSQL;
  frmData.qryVGKompetisieDB.SQL.Text := 'Delete * from tblDeelnemers'; // delete from PrimaryTable
  frmData.qryVGKompetisieDB.ExecSQL;
  frmData.qryVGKompetisieDB.SQL.Text := 'SELECT * from tblDeelnemers'; // for displaying on dbgrid that records is removed  
  frmData.qryVGKompetisieDB.Active := true;
end;

感谢您的 cmets 家伙的所有帮助。对此,我真的非常感激。 ☺

【讨论】:

  • 您没有找到更简单的方法。通过删除级联,您无需担心删除相关的表记录。您将删除主表中的记录,数据库引擎会自动为您删除相关记录。即使您忘记删除相关的表记录,级联规则也会使您的数据保持一致。他们在数据库引擎方面这样做,因此它们也比执行两个单独的查询更有效率。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
  • 1970-01-01
  • 2018-01-15
  • 2020-04-18
  • 1970-01-01
  • 2017-08-04
  • 2013-01-26
相关资源
最近更新 更多