Recuperar el valor de Returning
Brought to you by:
henriquemeira
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.
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;
Gracias, funcionó perfectamente.