2010-10-11 28 views
0

我的2006年德爾福TADOCommand刪除有它能參數安全地從一個Delphi TADOCommand在運行時

 CommandText (including parameters), 
    Prepared (True), 
    ParamCheck (True)

屬性都設置在設計時。

有沒有辦法讓我去刪除它的一些參數運行時,無需改變的CommandText,以適應這些變化。在參數引用的某些表列不需要更新/插入的情況下,這是可取的。

我沿着

TADOCommand.Parameters.ParamByName('MyParam').SafelyRemove; 

非常感謝,
鄧肯

回答

4

在參數每個項目收集對應的命令文本參數標記線思維的東西。這就像這個標記的API。從參數中刪除項目不會刪除相應的標記。如果您不需要在命令文本中觸摸某個字段,則必須修改命令文本並刪除相應的參數標記。

準備命令文本時,DBMS已經構建了命令執行計劃並分配了一些命令執行所需的資源。如果您要更改命令文本,那麼DBMS必須構建新的命令執行計劃。

類是...

+2

此外,從命令文本中刪除參數不是微不足道的。你需要一個SQL驗證器來確保最終的SQL是有效的,而且還需要一系列規則來管理每種情況下被刪除的內容。將DELETE FROM Customers WHERE CustomerID = CustID轉換爲DELETE FROM Customers很容易,但是更復雜的查詢如DELETE FROM Orders WHERE OrderLanguage =:language和ShipToCustomer IN(SELECT CustomerID FROM Customers WHERE Address_Country_Language <>:language) ? – 2010-10-12 04:29:03

+0

非常感謝大家的回答。不幸的是你已經證實了我的懷疑。在這種情況下,我會從頭開始重建命令文本,而不是試圖有選擇地修改現有的字符串。 – DuncanGiles 2010-10-15 12:58:28

0

由於參數佔位符(:PARAMn)嵌入到SQL文本,我不看你怎麼可以在不改變CommandText中添加或刪除參數。你會有一個不匹配的。

+0

非常感謝大家的回答。不幸的是你已經證實了我的懷疑。在這種情況下,我會從頭開始重建命令文本,而不是試圖有選擇地修改現有的字符串。 – DuncanGiles 2010-10-15 13:00:33

0

如果命令文本是動態更新的,我通常使用這樣的參數:* Parameters.Clear; Parameters.ParseSQL(ADOCommand.CommandText,true); *它會自動創建具有正確參數名稱的參數列表。

相關問題