Consegui pegar o sequencial sem incrementá-lo:

...
ZConnection1.StartTransaction;
try
  ZQuery1.Open;
  ZQuery1.SQL.Text := 'select * from teste_oid_seq';    
ShowMessage(IntToStr(ZQuery1.FieldByName('last_value').AsInteger));
  ZConnection1.Commit;
...

Fica a dica ;)

--- Em delphi-br@yahoogrupos.com.br, "silvioprog" <silviop...@...> escreveu
>
> 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" <silvioprog@> 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