Re: [delphi-br] Re: Recuperar valor de campo Oid Serial no PostgreSQL
silvioprog wrote: 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 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. currval, não incrementa a sequence, somente o nextval. Veja: http://www.postgresql.org/docs/7.4/interactive/functions-sequence.html
[delphi-br] Re: Recuperar valor de campo Oid Serial no PostgreSQL
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 - silvioproggmail/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.
[delphi-br] Re: Recuperar valor de campo Oid Serial no PostgreSQL
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 - silvioproggmail/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.