Galera consegui fazer sem POG mudando o SQL, vejam como fiz, com outras tabelas:

==========
insert into Pedido (Oid, Data)
 values (nextval('pedido_oid_seq'), current_date);
 
insert into PedidoItem (OidPedido, Preco, Quantidade)
 values (currval('pedido_oid_seq'), 10, 1);
==========

Pequei a dica nesse artigo:

http://imasters.uol.com.br/artigo/1804

Mas se alguém conseguir pegar o valor atual de um sequenciador sem 
incrementá-lo eu agradeço.

--- Em delphi-br@yahoogrupos.com.br, "silvioprog" <silviop...@...> escreveu
>
> Olá galera,
> 
> Pelo que pesquisei no Google a combinação de campo do tipo Serial + tdataset 
> não é legal, e pelo que vi, a solução seria via POG (argh! :P*), vejam:
> 
> Tabela:
> =====================================
> CREATE TABLE teste
> (
>   oid serial NOT NULL,
>   nome character varying(50),
>   CONSTRAINT pk_oidteste PRIMARY KEY (oid)
> );
> =====================================
> 
> Código (com Zeos):
> ...
> procedure TForm1.Button1Click(Sender: TObject);
> begin
>   ZConnection1.StartTransaction;
>   try
>     ZQuery1.SQL.Text := 'insert into Teste (Nome) values (''testando'') 
> returning Oid';
>     ZQuery1.Open; // Será?
>     ShowMessage(IntToStr(ZQuery1.FieldByName('Oid').AsInteger));
>     ZConnection1.Commit;
>   except
>     ZConnection1.Rollback;
>   end;
> end;
> ...
> 
> Hum... Com Open? Isso é POG e das feias, só existe essa maneira de fazer? Não 
> tem como pegar o valor do sequencial antes de aplicar o commit?
> 
> No Firebird-2.1.3 o código acima nem funcionou.

--
Silvio Clécio
--
Contato - silvioprog<gmail/googlewave>
Blog estilo mural - silvioclecio.blogspot.com
Twitter - twitter.com/silvioprog
--
programmer ObjectPascal - silvioprog.blogspot.com
--
"Duas coisas instruem o homem, qualquer que seja a sua natureza: o instinto e a 
experiência. Blaise Pascal.

Responder a