2013-04-17 2 views
3

Postores 데이터베이스와 함께 Adoquery를 사용하고 있습니다. UPDATE 또는 INSERT 쿼리를 수행 할 때 ExecSql이나 OPEN이 영향을받는 레코드 수를 반환하지만 항상 -1을 반환합니다. psqlODBC : 09.01.0200의 최신 버전을 사용합니다.Delphi에서 PostgresSql로 ADOquery로 업데이트 쿼리를 수행하는 코드를 반환

코드 :

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

결과는 -1

+0

왜 그냥 보통'Insert' 및 오며 'Post 메커니즘을 사용하지 않는? –

+0

아마도 DBAware 컨트롤이 뒤에 있습니까? – pf1957

+0

'Adoquery1.ExecSQL;'을 호출 한 직후에'AdoQuery1.Close; AdoQuery1.SQL.Text : ='SELECT nummer, naam FROM testtabel 여기서 nummer = 3 및 naam = ''Barnsten ''); AdoQuery1.Open; ShowMessage ('결과 :'+ IntToStr (ADOQuery1.RowCount)); '? 당신은'1'을 얻습니까? 그렇지 않으면'INSERT'가 실패하고'RowsAffected'에서 얻은 값이 정확합니다. 'Open'은'RowsAffected'를 사용하지 않습니다; IIRC 대신'RowCount'를 사용합니다. –

답변

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)') 
    )); 

나에게 반환 3.