Fórum Após cadastrar 5 funcionarios, meu IB trava.. so reiniciando #243345
15/07/2004
0
Mariocanel
Curtir tópico
+ 0Posts
15/07/2004
Otto
qual a versão do seu IB , windows...
cole sua rotina de insert...
usa table ou query.... :wink:
Gostei + 0
15/07/2004
Persist
Gostei + 0
17/07/2004
Mariocanel
meus códigos:
CREATE TABLE POLICIAL (
POLICIAL_ID DM_CHAVE_PRIMARIA /* INTEGER NOT NULL */,
NOME CHAR(80) CHARACTER SET OCTETS,
ENDERECO CHAR(60) CHARACTER SET OCTETS,
MATRICULA CHAR(15) CHARACTER SET OCTETS,
........
........
);
ALTER TABLE POLICIAL ADD PRIMARY KEY (POLICIAL_ID);
/******************************************************************************/
/**** Triggers ****/
/******************************************************************************/
SET TERM ^ ;
/* Trigger: INSERT_MATRICULA_POLICIAL */
CREATE TRIGGER INSERT_MATRICULA_POLICIAL FOR POLICIAL
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (exists
(select MATRICULA from POLICIAL
where MATRICULA=NEW.MATRICULA)) then
exception NOME_MATRICULA_JA_EXISTE;
end
^
/* Trigger: INSERT_NOME_POLICIAL */
CREATE TRIGGER INSERT_NOME_POLICIAL FOR POLICIAL
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (exists
(select NOME from POLICIAL
where NOME=NEW.NOME)) then
exception NOME_POLICIAL_JA_EXISTE;
end
^
/* Trigger: NEW_POLICIAL_ID */
CREATE TRIGGER NEW_POLICIAL_ID FOR POLICIAL
ACTIVE BEFORE INSERT POSITION 0
AS
begin
new.policial_id =gen_id(gen_policial,1);
end
^
/* Trigger: UPDATE_MATRICULA_POLICIAL */
CREATE TRIGGER UPDATE_MATRICULA_POLICIAL FOR POLICIAL
ACTIVE BEFORE UPDATE POSITION 0
as
begin
if (old.MATRICULA<>new.MATRICULA) then
if (exists
(select MATRICULA from POLICIAL
where MATRICULA=NEW.MATRICULA)) then
exception NOME_MATRICULA_JA_EXISTE;
end
^
/* Trigger: UPDATE_NOME_POLICIAL */
CREATE TRIGGER UPDATE_NOME_POLICIAL FOR POLICIAL
ACTIVE BEFORE UPDATE POSITION 0
as
begin
if (old.NOME<>new.NOME) then
if (exists
(select NOME from POLICIAL
where NOME=NEW.NOME)) then
exception NOME_POLICIAL_JA_EXISTE;
end
^
SET TERM ; ^
/******************************************************************************/
/**** Privileges ****/
/******************************************************************************/
/* Privileges of users */
GRANT ALL ON POLICIAL TO MARIOCANEL WITH GRANT OPTION;
Tudo issi feito no IBEXPERT,porem quando levo para o Delphi, taí, nao se se tenho que criar uma proceure para ativar a trigger, ou deixando assim ele resolve, porem, dá KEY VIOLATION
aí baseado no datacar(clubedelphi, usei tal código)
procedure TDM.Incrementa(Nome_Tabela: String; Chave_Primaria: TField);
var Qry : TSQLQuery;
begin
if Chave_Primaria.DataSet.State <> dsInsert then
exit; //termina a execução caso não esteja em modo de inserção
Qry:=TSQLQuery.Create(nil); //cria uma instância do objeto
try
Qry.SQLConnection:=SQLConnect; //componente de conexão
Qry.SQL.Add(´SELECT MAX(´+Chave_Primaria.FieldName+´) FROM ´+Nome_Tabela);
Qry.Open;
if Qry.Fields[0].IsNull then //se a tabela está vazia retornará nulo
Chave_Primaria.AsInteger:=1 //então este será o primeiro registro
else Chave_Primaria.AsInteger:=Qry.Fields[0].AsInteger+1;
finally
FreeAndNil(Qry); //tira o objeto da memória
end;
Obs:TDM é meu datamodule
Gostei + 0
19/07/2004
Persist
Verifique também o número de conexões no banco após a terceira inserção.
Gostei + 0
20/07/2004
Mariocanel
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)