2016-11-09 15 views
0

Ich habe eine Tabelle mit vier Feldern, eines dieser Felder ist der Primärschlüssel. Wenn ich die folgenden Befehle aus:Einfügen von Daten durch TADOCommand in Delphi

var 
    iAffectedRows: integer; 
begin 
    ADOCommand1.CommandText := 'insert into table_1(Field_1, Field_2, Field_3) values(:A_Field_1, :A_Field_2, :A_Field_3)';  

    ADOCommand1.Parameters.FindParam('A_Field_1').Value := '100'; 
    ADOCommand1.Parameters.FindParam('A_Field_2').Value := '200'; 
    ADOCommand1.Parameters.FindParam('A_Field_3').Value := '300'; 

    ADOCommand1.Execute(iAffectedRows); 
end; 

Das Ergebnis ist:

enter image description here

Der Field_1 Wert 0.

ist (dieses Ergebnis ist darauf zurückzuführen, den Befehl auszuführen: ADOCommand1.Execute(iAffectedRows))

Aber mit diesem Befehl ist alles richtig: ADOCommand1.Execute()

Gibt es eine Lösung für dieses Problem?

Antwort

3

Es scheint, Sie haben bereits die Lösung - rufen Sie die keine-Argument-Version von Execute().

function Execute: _Recordset; 

Sie rufen die 1-Argument Version von Execute(), die Ausgabe nicht die Anzahl der betroffenen Zeilen:

function Execute(const Parameters: OleVariant): _Recordset; 

von iAffectedRows auf diese Version vorbei, ersetzen Sie den ersten Wert Parameter mit welcher Wert iAffectedRows enthält anfänglich, was gerade passiert 0.

Wenn Sie die Anzahl der betroffenen Zeilen erhalten möchten, müssen Sie stattdessen die 2-Argument-Version von Execute() verwenden:

function Execute(var RecordsAffected: Integer; const Parameters: OleVariant): _Recordset; 

Zum Beispiel:

var 
    iAffectedRows: integer; 
begin 
    ADOCommand1.CommandText := 'insert into table_1(Field_1, Field_2, Field_3) values(:A_Field_1, :A_Field_2, :A_Field_3)'; 

    ADOCommand1.Parameters.FindParam('A_Field_1').Value := '100'; 
    ADOCommand1.Parameters.FindParam('A_Field_2').Value := '200'; 
    ADOCommand1.Parameters.FindParam('A_Field_3').Value := '300'; 

    ADOCommand1.Execute(iAffectedRows, EmptyParam); 
end; 

Oder:

var 
    iAffectedRows: integer; 
begin 
    ADOCommand1.CommandText := 'insert into table_1(Field_1, Field_2, Field_3) values(:A_Field_1, :A_Field_2, :A_Field_3)';  
    ADOCommand1.Execute(iAffectedRows, VarArrayOf('100', '200', '300')); 
end; 
Verwandte Themen