我想我錯過了關於使用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