Fórum Ajuda com Trigger de inclusão x Delphi 6 #57470
13/12/2006
0
Estou usando o seguinte código:
No Interbase:
/* Generator para o cadastro do grupo que tem como chave primária o campo CODGRU char (3) */
Create generator Ger_Cod_Gru as char(3);
/* Criando uma Trigger para usar o Generator */
SET TERM ^! ;
CREATE TRIGGER NR_SEQ_GRU FOR GRUPOS
ACTIVE BEFORE INSERT POSTION 0 AS
BERGIN
NEW.CODGRU = GEN_ID(GER_COD_GRU,1);
END
^!
SET TERM ; ^!
:: Até aqui tudo bem, no delphi, qundo vou incluir:
No IbQuery faço o seguite:
/* Para Pegar o valor do Generator */
SELECT GEN_ID(GER_COD_GRU, 1) as CODIGO FROM RDB$DATABASE
Qundo executo isso no delphi, não gera na sequencia correta.. fica pulando de dois em dois, ou quando gera um número alto, tipo 200, 130, etc..
Alguem pode me ajudar por favor.. ficaria muito grato coma ajuda dos colegas
meu e-mail : cmtbravo@hotmail.com
Cmtbravo
Curtir tópico
+ 0Posts
13/12/2006
Marcos Fernando
se vc usa
/* Criando uma Trigger para usar o Generator */ SET TERM ^! ; CREATE TRIGGER NR_SEQ_GRU FOR GRUPOS ACTIVE BEFORE INSERT POSTION 0 AS BERGIN NEW.CODGRU = GEN_ID(GER_COD_GRU,1); END ^! SET TERM ; ^!
a base vai add 1 certo?
ai vc depois manda fazer:
SELECT GEN_ID(GER_COD_GRU, 1) as CODIGO FROM RDB$DATABASE
ele vai colocar mais 1
por isso pula de 2x2
usa
[list=]SELECT GEN_ID(GER_COD_GRU, 0) as CODIGO FROM RDB$DATABASE [/list]
thanks
Gostei + 0
13/12/2006
Cmtbravo
Obrigado!!
Gostei + 0
13/12/2006
Emerson Nascimento
por conta disso muitos sistemas só informam o número no momento da gravação, com uma mensagem como ´Seu pedido foi gravado com o número XXXXX´
Gostei + 0
13/12/2006
Cmtbravo
1 - a trigger fica como ´BEFORE INSERT´;
2 - no botão incluir eu só do um insert;
3 - no botão gravar é eu gero o seguencial é ??
Gostei + 0
14/12/2006
Emerson Nascimento
trigger significa gatilho, e nos RDBMS esses gatilhos são/deveriam ser disparados automaticamente.
não sei como funciona o seu programa, portanto vou usar uma rotina minha como exemplo.
tenho os seguintes campos na tabela notafiscal:
----------------------
NOTAFISCAL
----------------------
IDNOTAFISCAL int (PK) (+)
IDCLIENTE int (FK)
NUMERO numeric(6)
CRIACAO date
EMISSAO datetime
VALOR numeric(10,2)
ICMS numeric(10,2)
etc....
os tipos são definidos por domains, mas os coloquei aqui para ilustrar melhor.
o campo [i:ea46fc6ee4]idnotafiscal[/i:ea46fc6ee4] nunca é visível pelo usuário. ele é um campo interno utilizado para relacionamento de tabelas e etc, somente o campo [i:ea46fc6ee4]numero[/i:ea46fc6ee4] é exibido
o que ocorre?
no momento da inclusão do registro (insert ou append):
o campo [i:ea46fc6ee4]numero[/i:ea46fc6ee4] fica vazio e o campo [i:ea46fc6ee4]idnotafiscal[/i:ea46fc6ee4] recebe o valor de GetTickCount(), que é a quantidade de segundos que o micro está ligado. esse valor é gerado simplesmente para poder fazer o relacionamento com a tabela-filha.
no momento da gravação (applyupdates):
o campo [i:ea46fc6ee4]numero[/i:ea46fc6ee4] continua vazio e o campo [i:ea46fc6ee4]idnotafiscal[/i:ea46fc6ee4] recebe o valor atribuído automaticamente pela trigger. de posse desse valor eu altero o valor do campo na tabela-filha e mando gravá-la, já com o valor correto.
no momento da impressão:
gero um novo número para a nota fiscal e preencho o campo [i:ea46fc6ee4]numero[/i:ea46fc6ee4].
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)