GARANTIR DESCONTO

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.


Asbrogio

Asbrogio

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?


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++


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar