Gatilho de auto incremento
O que esta faltando para este gatilho funcionar? Ele não da menssagem de erro nenhuma, simplesmente ele não funciona.
CREATE TABLE ´MANEJO´
(
´MAN_CODINT´INTEGER NOT NULL,
´MAN_PROCUL´INTEGER NOT NULL,
´MAN_TIPMAN´VARCHAR(120) CHARACTER SET WIN1252,
´MAN_SALVO´CHAR(1) CHARACTER SET WIN1252,
PRIMARY KEY (´MAN_CODINT´)
);
SET TERM ^ ;
/* Triggers only will work for SQL triggers */
CREATE TRIGGER ´TR_MANEJO´ FOR ´MANEJO´
ACTIVE BEFORE INSERT POSITION 0
as
Begin
New.MAN_CODINT=Gen_id(MANEJO,1);
end
^
COMMIT WORK ^
SET TERM ;^
CREATE GENERATOR ´MANEJO´;
o que eu posso fazer?
CREATE TABLE ´MANEJO´
(
´MAN_CODINT´INTEGER NOT NULL,
´MAN_PROCUL´INTEGER NOT NULL,
´MAN_TIPMAN´VARCHAR(120) CHARACTER SET WIN1252,
´MAN_SALVO´CHAR(1) CHARACTER SET WIN1252,
PRIMARY KEY (´MAN_CODINT´)
);
SET TERM ^ ;
/* Triggers only will work for SQL triggers */
CREATE TRIGGER ´TR_MANEJO´ FOR ´MANEJO´
ACTIVE BEFORE INSERT POSITION 0
as
Begin
New.MAN_CODINT=Gen_id(MANEJO,1);
end
^
COMMIT WORK ^
SET TERM ;^
CREATE GENERATOR ´MANEJO´;
o que eu posso fazer?
Rs_ferreira
Curtidas 0
Respostas
Gandalf.nho
17/11/2004
Aparentemente não há erro nenhum. Ele chega a incrementar o generator ou nem isso? Como você cadastra registros no banco?
GOSTEI 0
Rs_ferreira
17/11/2004
ela não chega a incrementar. E quando insiro dados via sql ou via data do ib console. E da uma mesagem de erro ´man_codint não pode ser nulo´
GOSTEI 0
Gandalf.nho
17/11/2004
Pode ser que não tenha nada a ver, mas tente renomear seu generator para ter um novo nome ligeiramente diferente do da tabela associada.
GOSTEI 0
Afarias
17/11/2004
A trigger não chega a executar pq o Delphi nem executa o comando INSERT.
A mensagem de erro q vc recebe é do Delphi (não tem nada a ver com o IB) e diz respeito o fato do seu TFIELD estar com REQUIRED=TRUE
Mude o valor dessa propriedade ou jogue qualquer valor nesse campo (-1 po exemplo) antes dar o POST
T+
A mensagem de erro q vc recebe é do Delphi (não tem nada a ver com o IB) e diz respeito o fato do seu TFIELD estar com REQUIRED=TRUE
Mude o valor dessa propriedade ou jogue qualquer valor nesse campo (-1 po exemplo) antes dar o POST
T+
GOSTEI 0
Rs_ferreira
17/11/2004
Não estou utilizando o delphi ainda. Esto por enquanto so fazendo a nivel de bd , ou seja no ibconsole. E com relação aos fields no ibtable do delphi, esta required false.
GOSTEI 0
Afarias
17/11/2004
Se vc estivesse usando um INSERT (no Interactive SQL) isso não estaria ocorrendo. Mas vc deve estar usando a página DATA e inserindo as informações pelo GRID -- o IBConsole é construído com IBX e segue a mesma regra do TField q mencionei, com a diferença q vc não pode mudar para Required=False ;-)
Neste caso a única solução é digitar algo no campo requerido (-1) -- só pra não receber este erro.
T+
Neste caso a única solução é digitar algo no campo requerido (-1) -- só pra não receber este erro.
T+
GOSTEI 0
Rs_ferreira
17/11/2004
funcionou colocando -1 :D . Agora vem outro problema , como farei com o dbgrid do delphi, se eu omitir o campo codint? Sendo que eu uso um datasouse e um ibtable?
GOSTEI 0
Afarias
17/11/2004
|como farei com o dbgrid do delphi, se eu omitir o campo codint?
No evento OnNewRecord do seu DataSet coloque::
DataSet.FieldByName(´codint´).AsInteger := 0; {ou -1}
|Sendo que eu uso um datasouse e um ibtable?
Em programação C/S :: NUNCA USE TABLE
;)
Tanto faz o DataSet q vc usa (IBTable, IBQuery, IBDataSet) -- funciona igual. Mas dê preferência a usar IBDataSet ou IBQuery.
Qualquer coisa, veja o tópico::
http://delphiforum.icft.com.br/forum/viewtopic.php?t=30575
T+
No evento OnNewRecord do seu DataSet coloque::
DataSet.FieldByName(´codint´).AsInteger := 0; {ou -1}
|Sendo que eu uso um datasouse e um ibtable?
Em programação C/S :: NUNCA USE TABLE
;)
Tanto faz o DataSet q vc usa (IBTable, IBQuery, IBDataSet) -- funciona igual. Mas dê preferência a usar IBDataSet ou IBQuery.
Qualquer coisa, veja o tópico::
http://delphiforum.icft.com.br/forum/viewtopic.php?t=30575
T+
GOSTEI 0