Fórum Violação de chave estrangeira #326640
02/08/2006
0
Tenho um sistema contábil, e está dando erro de violação de chave estrangeira.
Banco de Dados Firebird 2.0. Utilizo, o IBDataBase + IBTransaction + IBDataSet + DataSource.
Tenho uma tabela de CLIENTES cuja chave primária é COD_CLIENTE e nessa tabela eu tenho o campo chamado CIDADE, que é ´CHAVE ESTRANGEIRA´ da minha tabela de CIDADES.
Quando eu tento salvar um registro na tabela de CLIENTES, da o seguinte erro.
´violation of FOREIGN KEY constraint "FK_CLIENTES_CIDADES" on table "CLIENTES".
O campo cidades, no meu form clientes, é um TDBLookupComboBox.
Procurei aqui no fórum e não consegui achar uma luz.
Ve se alguém consegue me ajudar.
Edivaldo_ap
Curtir tópico
+ 0Posts
02/08/2006
Marco Salles
mas voce disse
Tenho uma tabela de CLIENTES cuja chave primária é COD_CLIENTE e nessa tabela eu tenho o campo chamado CIDADE, que é ´CHAVE ESTRANGEIRA´ da minha tabela de CIDADES.
[b:659dfc9fa9]Não seria assim :[/b:659dfc9fa9]
Tenho uma tabela de CLIENTES cuja chave primária é COD_CLIENTE e
Tenho Uma tabela Cidades . nessa tabela eu tenho o campo chamado CIDADE, que é chave primária e é ´CHAVE ESTRANGEIRA´ da tabela de Clientes.
Ficando assim o Relacionamento
Tab Cidade Campo Cidade -->> PK Outros campos Tab Clientes Campo Codigo ---->>PK campo Cidades --->>> FK
será que estou enganado :oops: :oops: :oops:
Gostei + 0
03/08/2006
Edivaldo_ap
Será que alguém pode me ajudar?
Edivaldo.
Gostei + 0
03/08/2006
Marco Salles
Então , no seu dataset tem o campo Cidade e o Campo LookCidades :!: :!:
O campo cidades é um campo fisico da tabela , ja o campo lookCidades é um campo Virtual...
SeuDataSetCidade.asstring:=SeuDataSetLookCidades.AsString
eu não ´tenho certeza´ , mas ´acho´ a que pode estar [b:db79774cef]ai[/b:db79774cef] o motivo da reclamação por parte do banco.
Gostei + 0
09/08/2006
Edivaldo_ap
PK COD_CLIENTE INTEGER NOT NULL, RAZAO_NOME VARCHAR(80) NOT NULL, ENDERECO VARCHAR(50), COMPLEMENTO VARCHAR(20), CEP VARCHAR(10), FK COD_PESSOA INTEGER, TELEFONE VARCHAR(14), FAX VARCHAR(14), HOME_PAGE VARCHAR(80), E_MAIL VARCHAR(80), CPF_CNPJ VARCHAR(20) NOT NULL, NUMERO VARCHAR(10), FK CIDADE INTEGER, RG_INSC_MUNICIPAL VARCHAR(30), INSC_ESTADUAL VARCHAR(30), FK ESTADO INTEGER, BAIRRO VARCHAR(40), CELULAR VARCHAR(14)
Porém só o campo cidade é que ta dando erro.
O que pode ser esse erro????
Gostei + 0
09/08/2006
Marco Salles
Mas so duas perguntinhas ,.
1)
quando voce esta inserindo os dados pelo IbExpert , no campo Cidade da Tabela Clientes , voce digita o nome da cidade ou usa a <SETA> que aparece , devido ao relacionamentos
2)
Sua tabela Cidades ja tem dados inseridos nela...
Gostei + 0
13/08/2006
Edivaldo_ap
1) Quando estou inserindo no IBExpert eu uso a SETA para selecionar o item.
2) Sim, minha tabela de Cidades tem todas as cidades do Brasil cadastradas, e a tabela de Estados tem todos os estados pré-cadastrados.
Aí vai a DLL das três tabelas.
TABELA DE CLIENTES
/******************************************************************************/ /**** Generated by IBExpert 13/8/2006 23:38:19 ****/ /******************************************************************************/ SET SQL DIALECT 3; SET NAMES NONE; /******************************************************************************/ /**** Tables ****/ /******************************************************************************/ CREATE GENERATOR ID_CLIENTE; CREATE TABLE CLIENTES ( COD_CLIENTE INTEGER NOT NULL, RAZAO_NOME VARCHAR(80) NOT NULL, ENDERECO VARCHAR(50), COMPLEMENTO VARCHAR(20), CEP VARCHAR(10), COD_PESSOA INTEGER, TELEFONE VARCHAR(14), FAX VARCHAR(14), HOME_PAGE VARCHAR(80), E_MAIL VARCHAR(80), CPF_CNPJ VARCHAR(20) NOT NULL, NUMERO VARCHAR(10), CIDADE INTEGER, RG_INSC_MUNICIPAL VARCHAR(30), INSC_ESTADUAL VARCHAR(30), ESTADO INTEGER, BAIRRO VARCHAR(40), CELULAR VARCHAR(14) ); /******************************************************************************/ /**** Primary Keys ****/ /******************************************************************************/ ALTER TABLE CLIENTES ADD CONSTRAINT PK_CLIENTES PRIMARY KEY (COD_CLIENTE); /******************************************************************************/ /**** Foreign Keys ****/ /******************************************************************************/ ALTER TABLE CLIENTES ADD CONSTRAINT FK_CLIENTES_CIDADES FOREIGN KEY (CIDADE) REFERENCES CIDADES (COD_CIDADE) ON DELETE SET NULL ON UPDATE CASCADE; ALTER TABLE CLIENTES ADD CONSTRAINT FK_CLIENTES_ESTADOS FOREIGN KEY (ESTADO) REFERENCES ESTADOS (COD_ESTADO) ON DELETE SET NULL ON UPDATE CASCADE; ALTER TABLE CLIENTES ADD CONSTRAINT FK_COD_PESSOA FOREIGN KEY (COD_PESSOA) REFERENCES PESSOA (COD_PESSOA) ON DELETE SET NULL ON UPDATE CASCADE; /******************************************************************************/ /**** Triggers ****/ /******************************************************************************/ SET TERM ^ ; /******************************************************************************/ /**** Triggers for tables ****/ /******************************************************************************/ /* Trigger: CLIENTES_BI */ CREATE TRIGGER CLIENTES_BI FOR CLIENTES ACTIVE BEFORE INSERT POSITION 0 AS BEGIN IF (NEW.COD_CLIENTE IS NULL) THEN NEW.COD_CLIENTE = GEN_ID(ID_CLIENTE,1); END ^ SET TERM ; ^ /******************************************************************************/ /**** Privileges ****/ /******************************************************************************/
TABELA DE ESTADOS
/******************************************************************************/ /**** Generated by IBExpert 13/8/2006 23:39:49 ****/ /******************************************************************************/ SET SQL DIALECT 3; SET NAMES NONE; /******************************************************************************/ /**** Tables ****/ /******************************************************************************/ CREATE GENERATOR ID_ESTADO; CREATE TABLE ESTADOS ( COD_ESTADO INTEGER NOT NULL, DESCRICAO VARCHAR(30), SIGLA VARCHAR(2) ); /******************************************************************************/ /**** Primary Keys ****/ /******************************************************************************/ ALTER TABLE ESTADOS ADD CONSTRAINT PK_ESTADOS PRIMARY KEY (COD_ESTADO); /******************************************************************************/ /**** Triggers ****/ /******************************************************************************/ SET TERM ^ ; /******************************************************************************/ /**** Triggers for tables ****/ /******************************************************************************/ /* Trigger: ESTADOS_BI */ CREATE TRIGGER ESTADOS_BI FOR ESTADOS ACTIVE BEFORE INSERT POSITION 0 AS BEGIN IF (NEW.COD_ESTADO IS NULL) THEN NEW.COD_ESTADO = GEN_ID(ID_ESTADO,1); END ^ SET TERM ; ^ /******************************************************************************/ /**** Privileges ****/ /******************************************************************************/
TABELA DE CIDADES
/******************************************************************************/ /**** Generated by IBExpert 13/8/2006 23:40:20 ****/ /******************************************************************************/ SET SQL DIALECT 3; SET NAMES NONE; /******************************************************************************/ /**** Tables ****/ /******************************************************************************/ CREATE GENERATOR ID_CIDADE; CREATE TABLE CIDADES ( COD_CIDADE INTEGER NOT NULL, DESCRICAO VARCHAR(40), COD_ESTADO INTEGER ); /******************************************************************************/ /**** Primary Keys ****/ /******************************************************************************/ ALTER TABLE CIDADES ADD PRIMARY KEY (COD_CIDADE); /******************************************************************************/ /**** Foreign Keys ****/ /******************************************************************************/ ALTER TABLE CIDADES ADD CONSTRAINT FK_COD_ESTADO FOREIGN KEY (COD_ESTADO) REFERENCES ESTADOS (COD_ESTADO) ON DELETE SET NULL ON UPDATE CASCADE; /******************************************************************************/ /**** Triggers ****/ /******************************************************************************/ SET TERM ^ ; /******************************************************************************/ /**** Triggers for tables ****/ /******************************************************************************/ /* Trigger: CIDADES_BI */ CREATE TRIGGER CIDADES_BI FOR CIDADES ACTIVE BEFORE INSERT POSITION 0 AS BEGIN IF (NEW.COD_CIDADE IS NULL) THEN NEW.COD_CIDADE = GEN_ID(ID_CIDADE,1); END ^ SET TERM ; ^ /******************************************************************************/ /**** Privileges ****/ /******************************************************************************/
Espero que alguém possa me ajudar ou me dar alguma dica.... Obrigado pelo esforço gente.
Edivaldo André Pereira.
Gostei + 0
14/08/2006
Marco Salles
Qaundo voce inseri um Dado na Tabela Clientes , voce coloca o Valor No Campo COD_CLIENTE ou Deixa o Gerador determinar este valor ???
Antes de prosseguir , sugiro que voce coloque um[b:ae55610607] valor manulamente [/b:ae55610607]no Campo COD_CLIENTE e veja se vai dar erro...Tenho 99,99¬ que ele aceita....
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)