Menu

#13 Recuperar el valor de Returning

v0.8.*
open
nobody
Development (5)
5
2010-09-02
2010-09-02
No

Tengo lo siguiente en Delphi:

procedure insert_con_returning(query:TMDOQuery);
begin
with query do
begin
Close;
sql.Clear;
SQL.Add('Insert into familias (cod_familia, fecha_ingreso_familia, estado_familia) ');
sql.Add('Select gen_id(Select ibe$log, 1), current_timestamp, ');
sql.Add('''A'' From rdb$database ');
sql.Add('Returning cod_familia ');
try
ExecSQL;
except
raise;
end;
end;
end;

Quiero recuperar cod_familia en una variable o algo. ¿Cómo hago?
Uso Delphi 7, Firebird 2.1, MDO 0.8.8

Santiago.

Discussion

  • Lucas Schatz

    Lucas Schatz - 2010-09-14

    Boa tarde.
    Utilizando a ultima versão do MDO no CVS
    Para funcionar corretamente, voce deve utilizar um TMDOSQL, e dar um "startTransaction" na transação do MDOSQ.

    após o ExecQuery, basta capturar o retorno utilizando o fieldByName('nomeDoCampo').as____;, e dar commit na transação.
    Note que o RecordCount sempre será = 0(zero)
    Exemplo:

    transacao2 := TMDOTransaction.Create(banco2);
    lSql := TMDOSQL.Create(transacao2);
    lSql.SQL.Clear;
    lSql.SQL.Add('INSERT INTO tb (nome, sobrenome) ');
    lSql.SQL.Add('VALUES ');
    lSql.SQL.Add('(''NOME1'', ''SOBRENOME1'') ');
    lSql.SQL.Add('returning codigo, nome');
    lSql.ExecQuery;
    ShowMessage(lSql.FieldByName('codigo').AsString+'-'+lSql.FieldByName('nome').AsString+#13' Registros: '+inttostr(lSql.RecordCount));
    transacao2.commit;

     
  • Santiago Russo

    Santiago Russo - 2010-09-15

    Gracias, funcionó perfectamente.

     

Log in to post a comment.