我认为我缺少有关使用 SQL 语句和(Delphi 的 ADO)查询组件和/或在(Access 2003)数据库中设置字段之间关系的基本知识。每当我想删除、更新等任何比 SQL.Text="SELECT something FROM aTable" 更复杂的东西时,我都会收到错误消息。
例如,我在名为 Outline 和 Reference 的表之间创建了一个简单的多对多关系。联结或联结表称为注:
Outline
OutlineID (PK)
etc.
Reference
RefID (PK)
etc.
Note
NoteID (PK)
OutlineID
RefID
NoteText
我在 Access 中的联接上强制执行参照完整性,但没有勾选复选框以级联删除或更新。同时,在德尔福我的 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 上的删除按钮,以及 (4) 删除Note 表中与所选记录具有相同 NoteID 和 NoteText 的记录。