2011-11-23 85 views
2

我在Delphi 7中使用ADODB,對於UPDATE查詢,我使用TADOConnection執行過程「recordsAffected」變量獲取修改記錄的數量。 這樣的:ADODB:使用參數化查詢的修改記錄數

MyConnexion.Execute(sReq, iResReq, [eoExecuteNoRecords]); 

哪裏iResReq是修改的記錄數。

現在我想使用參數化查詢與參數化的SQL這樣的:

SQL.Add('UPDATE TABLE SET NAME="TEST" WHERE NAME=:PARAM); 
Parameters.ParamByName('PARAM').text:='Smith'; 

,但我真的不知道如何找到修改的記錄數。 除了我的問題,你知道一個關於ADODB參數化查詢的好tuto嗎?

+0

很好!我沒有意識到ExecSQL是一個函數,並返回修改記錄的數量。 – philnext

+1

正如Mikael在他的回答中指出的那樣,[TADOCommand](http://docwiki.embarcadero.com/VCL/en/ADODB.TADOCommand)更適合此目的。 [TADOQuery.ExecSQL](http://docwiki.embarcadero.com/VCL/en/ADODB.TADOQuery.ExecSQL)內部調用[TADOCommand.Execute](http://docwiki.embarcadero.com/VCL/en/ADODB .TADOCommand.Execute)從它的祖先[TCustomADODataSet](http://docwiki.embarcadero.com/VCL/en/ADODB.TCustomADODataSet)。所以我寧願[TADOCommand](http://docwiki.embarcadero.com/VCL/en/ADODB.TADOCommand);) – TLama

+0

好吧,我有一個工作的答案。但是'TADOCommand.execute','TADOQuery.execSQL'中的'好'選擇並不明顯。 – philnext

回答

4

使用TADOCommand你可以做這樣的事情。

var 
    RecordsAffected: Integer; 
begin 
    ADOCommand1.CommandText := 'UPDATE TABLE SET NAME="TEST" WHERE NAME=:PARAM'; 
    ADOCommand1.Parameters.ParamByName('PARAM').Value:='Smith'; 
    ADOCommand1.Execute(RecordsAffected, EmptyParam); 

也可以用TADOQuery做,如果你使用ExecSQL(如TLama在評論中提及)。

+0

你是對的我的代碼是錯的(我會編輯它)! CommandText允許參數? – philnext

+0

@philnext - 是的,你可以在CommandText中使用參數。 –

+0

謝謝...我會比較執行與ExecSQL – philnext