Problemas com Chave estrangeira
[b:1ec6b31dd1]Tenho a seguinte estrutura:[/b:1ec6b31dd1]
CREATE TABLE ´CONDICOESPGTO´
(
´NOME´VARCHAR(25) CHARACTER SET WIN1252 NOT NULL COLLATE PXW_INTL850,
CONSTRAINT ´PK_CONDICOESPGTO´ PRIMARY KEY (´NOME´)
);
CREATE TABLE ´TABELAS´
(
´NOME´VARCHAR(25) CHARACTER SET WIN1252 NOT NULL COLLATE PXW_INTL850,
´COMISSAO´NUMERIC(7, 3),
´AD´NUMERIC(7, 3),
´CONDICAOPGTO´VARCHAR(25) CHARACTER SET WIN1252,
CONSTRAINT ´PK_TABELAS´ PRIMARY KEY (´NOME´)
);
ALTER TABLE ´TABELAS´ ADD CONSTRAINT ´FK_CONDICOESPGTO´ FOREIGN KEY (´CONDICAOPGTO´) REFERENCES CONDICOESPGTO (´NOME´) ON UPDATE CASCADE ON DELETE NO ACTION;
[b:1ec6b31dd1]Porem não consigo inserir dados na tabela ´TABELAS´, ocorre erro de violação de foreign key.
Se alguem puder ajudar agradeco.[/b:1ec6b31dd1]
CREATE TABLE ´CONDICOESPGTO´
(
´NOME´VARCHAR(25) CHARACTER SET WIN1252 NOT NULL COLLATE PXW_INTL850,
CONSTRAINT ´PK_CONDICOESPGTO´ PRIMARY KEY (´NOME´)
);
CREATE TABLE ´TABELAS´
(
´NOME´VARCHAR(25) CHARACTER SET WIN1252 NOT NULL COLLATE PXW_INTL850,
´COMISSAO´NUMERIC(7, 3),
´AD´NUMERIC(7, 3),
´CONDICAOPGTO´VARCHAR(25) CHARACTER SET WIN1252,
CONSTRAINT ´PK_TABELAS´ PRIMARY KEY (´NOME´)
);
ALTER TABLE ´TABELAS´ ADD CONSTRAINT ´FK_CONDICOESPGTO´ FOREIGN KEY (´CONDICAOPGTO´) REFERENCES CONDICOESPGTO (´NOME´) ON UPDATE CASCADE ON DELETE NO ACTION;
[b:1ec6b31dd1]Porem não consigo inserir dados na tabela ´TABELAS´, ocorre erro de violação de foreign key.
Se alguem puder ajudar agradeco.[/b:1ec6b31dd1]
Paganato
Curtidas 0
Respostas
Afarias
07/10/2003
?
e o valor q vc quer colocar em ´TABELAS´.´CONDICAOPGTO´ existe em ´CONDICAOPGTO´.´NOME´ ??
T+
e o valor q vc quer colocar em ´TABELAS´.´CONDICAOPGTO´ existe em ´CONDICAOPGTO´.´NOME´ ??
T+
GOSTEI 0
Paganato
07/10/2003
O ´CONDICOESPGTO´.´NOME´ existe.
Esta tudo correto, ou pelo menos eu acho que esta. Na estrutura que passei existe algum erro ou inconcistencia?
Esta tudo correto, ou pelo menos eu acho que esta. Na estrutura que passei existe algum erro ou inconcistencia?
GOSTEI 0
Afarias
07/10/2003
estava me referindo aos valores inseridos na tabela!! -- se o valor q vc está tentando colocar em ´TABELAS´.´CONDICAOPGTO´ existe cadastrado na tabela ´CONDICAOPGTO´ ...
T+
T+
GOSTEI 0
Paganato
07/10/2003
Amigo afarias, consegui resolver o problema com a chave estrangeira:
Na tabela ´CONDICOESPGTO´ o campo Nome continha um COLLATE e na tabela ´TABELAS´, a chave estrangeira que é o campo Condicaopgto no continha o COLLATE. Eu coloquei o COLLATE para os dois campos e deu tudo certo.
Muito grato pela ajuda, porém estou com outro problema. Quando tento excluir um registro de CondicoesPgto que tenha um relacionamento com Tabelas, tenho a seguinte exceção
´Violation of FOREIGN KEY constraint ´FK_CONDICOESPGTO´ on table ´TABELAS´.
Lembrando a estrutura da tabela ´TABELAS´.
- ALTER TABLE ´TABELAS´ ADD CONSTRAINT ´FK_CONDICOESPGTO´ FOREIGN KEY (´CONDICAOPGTO´) REFERENCES CONDICOESPGTO (´NOME´) ON UPDATE CASCADE [B]ON DELETE NO ACTION[\B].
Na tabela ´CONDICOESPGTO´ o campo Nome continha um COLLATE e na tabela ´TABELAS´, a chave estrangeira que é o campo Condicaopgto no continha o COLLATE. Eu coloquei o COLLATE para os dois campos e deu tudo certo.
Muito grato pela ajuda, porém estou com outro problema. Quando tento excluir um registro de CondicoesPgto que tenha um relacionamento com Tabelas, tenho a seguinte exceção
´Violation of FOREIGN KEY constraint ´FK_CONDICOESPGTO´ on table ´TABELAS´.
Lembrando a estrutura da tabela ´TABELAS´.
- ALTER TABLE ´TABELAS´ ADD CONSTRAINT ´FK_CONDICOESPGTO´ FOREIGN KEY (´CONDICAOPGTO´) REFERENCES CONDICOESPGTO (´NOME´) ON UPDATE CASCADE [B]ON DELETE NO ACTION[\B].
GOSTEI 0
Afarias
07/10/2003
isso é normal.
como vc definiu:: ON DELETE NO ACTION -- está de acordo com a manutenção da integridade do banco de dados. o IB não vai permitir q vc exclua um registro de ´tipo de pgto´ enquanto está sendo usado por outra tabela relacionada.
vc pode também definir a ação ´on delete´ como::
CASCADE
SET NULL
SET DEFAULT
depende das suas ´regras de negócio´
T+
como vc definiu:: ON DELETE NO ACTION -- está de acordo com a manutenção da integridade do banco de dados. o IB não vai permitir q vc exclua um registro de ´tipo de pgto´ enquanto está sendo usado por outra tabela relacionada.
vc pode também definir a ação ´on delete´ como::
CASCADE
SET NULL
SET DEFAULT
depende das suas ´regras de negócio´
T+
GOSTEI 0