2013-04-17 2 views
3

J'utilise Adoquery avec une base de données Postgres. Lorsque je fais une requête UPDATE ou INSERT, ExecSql ou OPEN renvoie le nombre d'enregistrements affectés comme il se doit, mais toujours -1. J'utilise la dernière version de psqlODBC: 09.01.0200.Code de retour d'une requête de mise à jour avec ADOquery dans Delphi vers PostgresSql

code:

Adoquery1.close; 
Adoquery1.SQL.Clear; 
query := 'insert into testtabel (nummer, naam) values (3,''Barnsten'') '; 
Adoquery1.SQL.Add(query) ; 
result := Adoquery1.ExecSql; 

Résultat moi -1

+0

Pourquoi ne pas simplement utiliser l'habituel '' Insert' et le mécanisme Post'? –

+0

Peut-être qu'il n'y a pas de contrôle DBAware derrière? – pf1957

+0

Que se passe-t-il si juste après l'appel de 'Adoquery1.ExecSQL;', vous ajoutez 'AdoQuery1.Close; AdoQuery1.SQL.Text: = 'SELECT nummer, naam FROM testtabel où nummer = 3 et naam = '' Barnsten ''); AdoQuery1.Open; ShowMessage ('Résultat:' + IntToStr (ADOQuery1.RowCount)); '? Avez-vous le '1'? Sinon, le 'INSERT' a échoué, et la valeur que vous avez obtenue de' RowsAffected' était correcte. 'Open' n'utilise pas' RowsAffected'; il utilise 'RowCount' à la place, IIRC. –

Répondre

0
function PerformSQL(const ASQL: string): integer; 
begin 
    Result := -1; 
    if ASQL <> '' then 
    begin 
    ZQuery1.SQL.Text := ASQL; 
    ZQuery1.ExecSQL; 
    Result := ZQuery1.RowsAffected; 
    end; 
end; 



ShowMessage 
    (IntToStr(PerformSQL('insert into test(te_id, te_code, te_name, te_type)' + 
    ' VALUES(DEFAULT, 15, ''tezty68'', 1), (DEFAULT, 16, ''teztx75'', 1), (DEFAULT, 18, ''teztx89'', 1)') 
    )); 

Renvoie 3.

Questions connexes