Auto Incremento uma vez

Firebird

04/06/2005

Seguinte fui no IBExpert no SQL Editor crei o generator e a trigger:

Create Generator nome_generator;

CREATE TRIGGER NOME_TRIGGER
ACTIVE BEFORE INSERT POSITION 0
AS
begin
if (new.codigo is null) then
new.codigo = gen_id(nome_generator, 1);
end

E nada acontece...tipo no IBExpert aparece lá que foi criado o generator e o trigger...aparentemente tudo lindo...mas qdo eu vou no programa vou clicar no Inserir novo registro e ele me passa um formulário ´limpo´ sem o número automático...

Obrigado....


Ramms

Ramms

Curtidas 0

Respostas

Eduardo Cocite

Eduardo Cocite

04/06/2005

if DtsProduto.State = dsInsertthen
begin
QryAux.sql.Clear;
QryAux.sql.add(´select´);
QryAux.sql.add(´ max (Codigoproduto) as Maior ´);
QryAux.sql.add(´from ´);
QryAux.sql.add(´ produto1´);
QryAux.open;

if QryAux.Eof then
QryProdutoCODIGOPRODUTO.Value := 1
else
QryProdutoCODIGOPRODUTO.Value := QryAux.fieldbyname(´Maior´).AsInteger + 1;
end;
inserir := DtsProduto.State in [dsinsert];
update := DtsProduto.State in [dsedit];

uma query para a tabela e outra para a geração automática do incremento, eu faço qdo o cara for salvar o registro.......

espero ter te ajudado......


GOSTEI 0
Ramms

Ramms

04/06/2005

Kra de boa vc poderia me expilcar detalhadamente, aonde eu coloco cada código...sou leigo ainda...

Obrigado


GOSTEI 0
Rodolpho123

Rodolpho123

04/06/2005

Ramms,
O auto-incremento só é ativado quando vc envia ao BD uma instrução SQL de INSERT.
Se vc quiser saber o número do seu generator, faça a seguinte qry:
select gen_id(seu_generator,0) from rdb$database



GOSTEI 0
Ramms

Ramms

04/06/2005

Opa Rodolpho....Bem o que eu qro eh que qdo eu clicar no botão inserir a tela seja ´limpada´ e que no edit código já venha o valor...o próximo número...eu deixaria o edit com o enabled false entendeu??
Como eu consegueria fazer isso?? Sou iniciante....
Vlw


GOSTEI 0
Rodolpho123

Rodolpho123

04/06/2005

Vc pode fazer o seguinte:
select gen_id(seu_generator,1) from rdb$database


Onde [b:f148c6a236]1[/b:f148c6a236] é o incremento que vc vai fazer no seu generator. Mas se vc não efetuar o cadastro, o número não é retornado ao seu estado inicial, ex:
Iniciar cadastro nº 1001 > Desiste do cadastro
Iniciar cadastro novamente > Irá mostra o nº 1002


GOSTEI 0
Ramms

Ramms

04/06/2005

Mas aonde coloco esse código ???
select gen_id(seu_generator,1) from rdb$database
Command Text???
Kra eu to começando agora...ehaheuia...malz e vlwzz


GOSTEI 0
Wagsilvasilva

Wagsilvasilva

04/06/2005

Ola Ramms. Se voce conseguir fazer autonumeracao por favor me avise. Eu procurei em tudo que é lugar mas ainda nao consegui faze-lo.


GOSTEI 0
Ramms

Ramms

04/06/2005

Po kra tah dificil até agora nada....


GOSTEI 0
Rodolpho123

Rodolpho123

04/06/2005

Mas aonde coloco esse código ??? select gen_id(seu_generator,1) from rdb$database Command Text???


Isso vc coloca em DataSet desses (TIBQuery, por exemplo) e quando vc abrir o seu DataSet, ele vai executar este código, gerando assim um número de auto-incremento. Para obter um novo número, feche e abra o DataSet.


GOSTEI 0
Ramms

Ramms

04/06/2005

Eu uso SQLConnection, SqlDataset, e clientdataset no caso colocaria o código select gen_id(seu_generator,1) from rdb$database no clientdataset???
Vlw


GOSTEI 0
Rodolpho123

Rodolpho123

04/06/2005

Eu uso SQLConnection, SqlDataset, e clientdataset no caso colocaria o código select gen_id(seu_generator,1) from rdb$database no clientdataset???


Sim

E se vc quiser visualizar o seu código, vc pode fazer assim:
showmessage(´Código gerado: ´ + SeuClientDataSet.FieldByName(´gen_id´).AsString);



GOSTEI 0
Ramms

Ramms

04/06/2005

Tipo eu qro colocar num edit....entaum ficaria assim??

DBEdit1.Text =: SeuClientDataSet.FieldByName(´gen_id´).AsString

tipo no evento onactive ?? ou outro?


GOSTEI 0
Ramms

Ramms

04/06/2005

qdo eu coloco no commandtext do cds ele fala isso:
CommandText changes not allowed...uma parada assim...
alguem sabe o q pode estar errado??
Vlwzzz


GOSTEI 0
Rodolpho123

Rodolpho123

04/06/2005

qdo eu coloco no commandtext do cds ele fala isso: CommandText changes not allowed...uma parada assim... alguem sabe o q pode estar errado?? Vlwzzz

Eu não posso te dizer o porque isto está acontecendo, pois eu ainda não fiz testes. Prq vc não utiliza um componente Query? Se é só para atribuir um valor ao seu DBEDit......

Nota: Para atribuir valores nos DBEdit não faça desta maneira
DBEdit.Text := ´blablabla´;

Pois vc só está escrevendo o texto no edit e não no banco. Para atribuir um valor, faça
DBEdit.Field.Value := ´blablavla´;

Onde vc atribui o valor no banco e que o DBEdit vai exibir na tela.


GOSTEI 0
Ramms

Ramms

04/06/2005

Awe kra funcionou vlw....deu um probleminha aki com o botão insert mas acho que consigo resolver..qualquer coisa eu volto aki vlw...


GOSTEI 0
POSTAR