Violation of FOREIGN KEY

Estou tentando fazer uma inserção de um registro no BD Firebird mas ocorre o seguinte erro:

org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544466. violation of FOREIGN KEY constraint “FK_ACESSO_SISTEMA_ADMIN” on table “ACESSO_SISTEMA”
Foreign key reference target does not exist

[code]/**************************************************************************/
/
Generated by IBExpert 19/01/2012 08:18:15 /
/
**************************************************************************/

/**************************************************************************/
/
Tables /
/
**************************************************************************/

CREATE GENERATOR GEN_ACESSO_SISTEMA_ID;

CREATE TABLE ACESSO_SISTEMA (
ID_ACESSO_SISTEMA INTEGER NOT NULL,
DATA_ACESSO DATE,
ID_USUARIO_ADMIN INTEGER,
HORA_ENTRADA TIME,
HORA_SAIDA TIME,
ID_USUARIO_PADRAO INTEGER
);

/**************************************************************************/
/
Primary Keys /
/
**************************************************************************/

ALTER TABLE ACESSO_SISTEMA ADD CONSTRAINT PK_ACESSO_SISTEMA PRIMARY KEY (ID_ACESSO_SISTEMA);

/**************************************************************************/
/
Foreign Keys /
/
**************************************************************************/

ALTER TABLE ACESSO_SISTEMA ADD CONSTRAINT FK_ACESSO_SISTEMA_ADMIN FOREIGN KEY (ID_USUARIO_ADMIN) REFERENCES USUARIO_ADMIN (ID_USUARIO_ADMIN)
USING INDEX FK_ACESSO_SISTEMA_1;
ALTER TABLE ACESSO_SISTEMA ADD CONSTRAINT FK_ACESSO_SISTEMA_PADRAO FOREIGN KEY (ID_USUARIO_PADRAO) REFERENCES USUARIO_PADRAO (ID_USUARIO_PADRAO)
USING INDEX FK_ACESSO_SISTEMA_2;

/**************************************************************************/
/
Triggers /
/
**************************************************************************/

SET TERM ^ ;

/**************************************************************************/
/
Triggers for tables /
/
**************************************************************************/

/* Trigger: ACESSO_SISTEMA_BI */
CREATE OR ALTER TRIGGER ACESSO_SISTEMA_BI FOR ACESSO_SISTEMA
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new.id_acesso_sistema is null) then
new.id_acesso_sistema = gen_id(gen_acesso_sistema_id,1);
end
^

SET TERM ; ^

/**************************************************************************/
/
Privileges /
/
**************************************************************************/
[/code]

Bom dia Luiz.

Observe esta linha de instrução abaixo:

  ALTER TABLE ACESSO_SISTEMA ADD CONSTRAINT FK_ACESSO_SISTEMA_ADMIN FOREIGN KEY (ID_USUARIO_ADMIN) REFERENCES USUARIO_ADMIN (ID_USUARIO_ADMIN)  
  USING INDEX FK_ACESSO_SISTEMA_1;

Isto significa que você criou um relacionamento entre as tabelas USUARIO_ADMIN (Tabela Primária) e ACESSO_SISTEMA (Tabela Estrangeira) onde estão ligadas pelo campo ID_USUARIO_ADMIM, criando uma Crítica (CONSTRAINT), ou seja, um recurso que bloqueia qualquer entrada de dados na tabela ACESSO_SISTEMA sem que haja qualquer usuário relacionado na tabela USUARIO_ADMIN. Em outras palavras você está tentando incluir um acesso ao sistema na tabela ACESSO_SISTEMA a um usuário inexistente na tabela USUARIO_ADMIN.

Voce tem que primeiro inserir o Usuário na tabela USUARIO_ADMIN, para depois, após pegar o seu ID_USUARIO_ADMIN e inserir na tabela ACESSO_SISTEMA.

É justamente para isto que serve os CONSTRAINTS (Críticas), ou seja, evitar que se insira nas tabelas estrangeiras, registros não relacionados com a tabela primária.

Understand. :?:

Um Abraço

Eu já possuo usuários cadastrados na tanto na tabela UsuarioAdmin quanto na tabela UsuarioPadrao

Mas não aquele que estás a tentar inserir no registo de ACESSO_SISTEMA

Olá, sou de novo.

É isso ai, verifique se o ID_USUARIO_ADMIN que você está tentando inserir em ACESSO_SISTEMA é o mesmo ID_USUARIO_ADMIN do Usuário que você quer relacionar e que está na tabela USUARIO_ADMIN. Muita das vezes, não correponde o mesmo ID, ou o ID_USUARIO_ADMIN da tabela ACESSO_SISTEMA está entrando com valor nulo.

Um abraço.