Fórum Duvida com autoincremento #357659
26/04/2008
0
[quote:2619ec631d=´Moderação´][color=red:2619ec631d]Título editado por Massuda
Por favor, não use apenas letras maiúsculas no título/texto.
Leia as :arrow: [url=http://forum.clubedelphi.net/viewtopic.php?t=6689]Regras de Conduta[/url] do fórum.[/color:2619ec631d][/quote:2619ec631d]Olá pessoal,
Estou com um problema no cadastro de um formulário (delphi) na inclusão do autoincremento na aplicação, no qual utilizo os componentes ADOConnection,ADOQuery.
Dados do banco de Dados Postgresql:
CREATE TABLE categoria
(
cod_categoria integer NOT NULL,
nome_cat character varying(40) NOT NULL,
CONSTRAINT categoria_pkey PRIMARY KEY (cod_categoria)
);
Segue abaixo o código que estou tentado implementar no delphi
procedure TForm6.btnNovoClick(Sender: TObject);
var nreg : integer;
begin
ADOQuery1.last;
nreg := Adoquery1.Fields[´cod_categoria´].Value + 1;
ADOQuery1.post;
Adoquery1.Fields[´cod_categoria´].Value := nreg;
end;
Neste caso, eu gostaria de incrementar dentro da aplicação, Se alguém souber da resolução eu agradeço.
Por favor, não use apenas letras maiúsculas no título/texto.
Leia as :arrow: [url=http://forum.clubedelphi.net/viewtopic.php?t=6689]Regras de Conduta[/url] do fórum.[/color:2619ec631d][/quote:2619ec631d]Olá pessoal,
Estou com um problema no cadastro de um formulário (delphi) na inclusão do autoincremento na aplicação, no qual utilizo os componentes ADOConnection,ADOQuery.
Dados do banco de Dados Postgresql:
CREATE TABLE categoria
(
cod_categoria integer NOT NULL,
nome_cat character varying(40) NOT NULL,
CONSTRAINT categoria_pkey PRIMARY KEY (cod_categoria)
);
Segue abaixo o código que estou tentado implementar no delphi
procedure TForm6.btnNovoClick(Sender: TObject);
var nreg : integer;
begin
ADOQuery1.last;
nreg := Adoquery1.Fields[´cod_categoria´].Value + 1;
ADOQuery1.post;
Adoquery1.Fields[´cod_categoria´].Value := nreg;
end;
Neste caso, eu gostaria de incrementar dentro da aplicação, Se alguém souber da resolução eu agradeço.
Asbrogio
Curtir tópico
+ 0
Responder
Posts
28/04/2008
Catunda
O termo ´Autoincremento´, para mim, só tem sentido se ele é gerado automaticamente.
Não vou nem perder tempo comentando e relacionando aqui, todos os problemas atuais e futuros que esse seu método pode vir a apresentar.
Sugiro, sim, uma solução direta e imediata.
Crie um generator e uma trigger tipo before insert na tabela para incrementar esse campo.
if ((new.cod_categoria is null) or (new.cod_categoria = 0)) then
new.cod_categoria = gen_id(gen_cod_categoria,1);
onde gen_cod_categoria é o generator criado.
Então sua rotina no botão de incluir será desnecessária.
Basta que no evento onnewrecord do dataset utilizado, vc atribua o valor 0 (zero) à variável ou campo cod_categoria, que após o post e commit ou applyupdate do dataset, cod_categoria terá assumido o novo valor.
Valew?
Não vou nem perder tempo comentando e relacionando aqui, todos os problemas atuais e futuros que esse seu método pode vir a apresentar.
Sugiro, sim, uma solução direta e imediata.
Crie um generator e uma trigger tipo before insert na tabela para incrementar esse campo.
if ((new.cod_categoria is null) or (new.cod_categoria = 0)) then
new.cod_categoria = gen_id(gen_cod_categoria,1);
onde gen_cod_categoria é o generator criado.
Então sua rotina no botão de incluir será desnecessária.
Basta que no evento onnewrecord do dataset utilizado, vc atribua o valor 0 (zero) à variável ou campo cod_categoria, que após o post e commit ou applyupdate do dataset, cod_categoria terá assumido o novo valor.
Valew?
Responder
Gostei + 0
28/04/2008
Mazzi
Crie um metodo passando por parametros. Exemplo usando TIB
(o raciocinio eh o mesmo em ADO).
function Novo(Tabela:TibTable;PK:String):Boolean
var aux:integer;
begin
try
Tabela.last;
aux:= Tabela.PK.asInteger + 1;
Tabela.Insert;
Tabela.PK.asInteger := aux;
Tabela.Post;
Result:=true;
execpt
Result:=false;
end;
end;
//onde Tabela o nome da sua TB,
//PK seria o campo que vc ira incrementar , nesse caso Primary Key
// assim vc poderá chamar genericamente qq outra tabela de sua aplicação , bastante deixar esse metodo publico na sua aplicacao. Dessa forma:
Novo(CLIENTE;´cliCODIGO´);
Novo(FUNCIONARIO;´funCODIGO´);
e assim por diante,
vale lembrar q isso eh um exemplo, cabe a vc agora ajustar para a sua aplicação.
ABraços++
(o raciocinio eh o mesmo em ADO).
function Novo(Tabela:TibTable;PK:String):Boolean
var aux:integer;
begin
try
Tabela.last;
aux:= Tabela.PK.asInteger + 1;
Tabela.Insert;
Tabela.PK.asInteger := aux;
Tabela.Post;
Result:=true;
execpt
Result:=false;
end;
end;
//onde Tabela o nome da sua TB,
//PK seria o campo que vc ira incrementar , nesse caso Primary Key
// assim vc poderá chamar genericamente qq outra tabela de sua aplicação , bastante deixar esse metodo publico na sua aplicacao. Dessa forma:
Novo(CLIENTE;´cliCODIGO´);
Novo(FUNCIONARIO;´funCODIGO´);
e assim por diante,
vale lembrar q isso eh um exemplo, cabe a vc agora ajustar para a sua aplicação.
ABraços++
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)