我想我错过了关于使用SQL语句和(Delphi的ADO)查询组件和/或在(Access 2003)数据库中的字段之间设置关系的基础知识。每当我想删除,更新等任何比SQL.Text =“SELECT something from aTable”更复杂的东西时,我会收到错误消息。如何删除,更新等由Delphi ADO查询生成的表格?
例如,我在表之间创建了一个简单的多对多关系,称为Outline和Reference。结或连接表被称为注:
Outline
OutlineID (PK)
etc.
Reference
RefID (PK)
etc.
Note
NoteID (PK)
OutlineID
RefID
NoteText
我强制在Access中的联接引用完整性,但级联删除或更新不勾选复选框。同时,在Delphi中我Query.SQL.Text是
SELECT Note.NoteID, Outline.OutlineID, Ref.RefID, Note.NoteText, Ref.Citation, Outline.OutlineText
FROM (Note LEFT JOIN Outline ON Outline.OutlineID=Note.OutlineID)
LEFT JOIN Ref on Ref.RefID=Note.RefID;
起初我离开了引用在SELECT语句键,产生“不足键列信息”的错误,当我试图从导致删除记录表。我认为我明白:你必须选择数据库将需要执行的任何操作所需的所有字段。它不能删除,更新等加入的字段,如果它不知道什么加入了什么。 (这是对吗?)
那么,我该如何从这个查询中删除记录?换句话说,我想(1)显示一个显示NoteText,Citation和OutlineText的网格,(2)从网格中选择一条记录,(3)在DBNavigator上点击Delete按钮,(4)删除注释表中与所选记录具有相同NoteID和NoteText的记录。
您是否在使用TADOQuery,以及“从此查询中删除记录”是什么意思? – 2012-07-27 16:46:38
是的,TADOQuery。通过“删除记录......”我可以看到你的困惑;感谢您指出了这一点。看我的编辑。 – 2012-07-27 16:59:31
当我使用TADOQuery加入sql&显示在dbgrid中时,我没有使用查询本身来删除记录。我使用带参数的TADOCommand来执行删除操作。我使用dbgrid.datasource.dataset.fieldbyname('param')。asString(或任何字段类型)的值为参数赋值。之后,我执行命令并刷新网格。 – Hendra 2012-07-28 04:16:09