Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] foreign key mismatch ao atualizar dados de tabela

Julio, notei que a maneira que você cria a tua PK é diferente da minha e que você não define se é permitido null ou não, não sei se isso tem a ver, mais tenta fazer o create desta maneira


CREATE TABLE Usuario (idUsu INTEGER PRIMARY KEY AUTOINCREMENT, nomeUsu TEXT NOT NULL, emailUsu TEXT NOT NULL, tokenUsu TEXT NULL);

2011/12/15 Júlio Cesar Bueno Cotta <juliocbcotta@gmail.com>
Bruno, eu estou atualizando a linha, mas o valor de ID_CONSTRUTORA não é modificado. Quando eu insiro a linha não ocorre esse problema. Somente quando estou atualizando o valor de alguns dos campos...
Se der uma olhada no sql vai ver que o valor de ID_CONSTRUTORA é ID_CONSTRUTORA=2
e no where também

WHERE UPPER(EMAIL) = UPPER('julio@gmail.com') AND UPPER(ID_CONSTRUTORA) = UPPER('2')

Como consigo inserir esse valor..ele existe na tabela de construtoras..mas não consigo atualizar os valores da linha...

Em 15 de dezembro de 2011 11:34, Bruno Albuquerque <bruno.albuquerque@gmail.com> escreveu:

A menagem de erro me parece bem clara: "foreign key mismatch". A única
chave estrangeira que você possui na tabela é ID_CONSTRUTORA. Você
parece estar setando o valor pra 2. Provavelmente não existe uma
construtora com esse id na tabela ID_CONSTRUTORA.

-Bruno

2011/12/15 Júlio Cesar Bueno Cotta <juliocbcotta@gmail.com>:
> Pessoal, estou com um problema aqui na hora de atualizar os dados de uma
> tabela..quando eu insiro alguma linha funciona ok, mas quando vou atualizar
> dados dá o erro abaixo:
>
> sqlite returned     error code = 1, msg = foreign key mismatch
>  Error updating BAIRRO=meu bairro FONE_CELULAR= ID_REVISTA=0
> FONE_RESIDENCIAL= NUMERO=123 ID_SITE=0 ID_CORRETOR_SOLICITADO=1
> FONE_COMERCIAL=(12) 3123-1231 VISITOU_STAND_ANTES=NAO
> ID_CORRETOR_ATENDIMENTO=0 NOME=julio COMPLEMENTO=casa ID_JORNAL=0 ESTADO=SP
> CEP=12345-660 SEXO=Masculino EMAIL=julio@gmail.com ID_CONSTRUTORA=2
> ENDERECO=Rua Porto CIDADE=Santos NOME_ACOMPANHANTE= using UPDATE CLIENTE SET
> BAIRRO=?, FONE_CELULAR=?, ID_REVISTA=?, FONE_RESIDENCIAL=?, NUMERO=?,
> ID_SITE=?, ID_CORRETOR_SOLICITADO=?, FONE_COMERCIAL=?,
> VISITOU_STAND_ANTES=?, ID_CORRETOR_ATENDIMENTO=?, NOME=?, COMPLEMENTO=?,
> ID_JORNAL=?,  ESTADO=?, CEP=?, SEXO=?, EMAIL=?, DATA_NASCIMENTO=?,
> ID_CONSTRUTORA=?, ENDERECO=?, CIDADE=?, NOME_ACOMPANHANTE=? WHERE
> UPPER(EMAIL) = UPPER('julio@gmail.com') AND UPPER(ID_CONSTRUTORA) =
> UPPER('2')
>
>
> A tabela é a seguinte: (um pouco resuzida para caber aqui..mas todas as FKs
> são simples como a de ID_CONSTRUTORA e com o mesmo comportamento para on
> update e on delete)
>
> CREATE TABLE CLIENTE (BAIRRO TEXT,FONE_CELULAR TEXT,ID_REVISTA
> INTEGER,FONE_RESIDENCIAL TEXT,NUMERO TEXT,ID_SITE
> INTEGER,ID_CORRETOR_SOLICITADO INTEGER,FONE_COMERCIAL
> TEXT,VISITOU_STAND_ANTES TEXT,ID_CORRETOR_ATENDIMENTO INTEGER,NOME
> TEXT,COMPLEMENTO TEXT,ID_JORNAL INTEGER,ESTADO TEXT,CEP TEXT,SEXO TEXT,EMAIL
> TEXT,DATA_NASCIMENTO TEXT,ID_CONSTRUTORA INTEGER,ENDERECO TEXT,CIDADE
> TEXT,DATA_,NOME_ACOMPANHANTE TEXT, PRIMARY KEY (EMAIL,ID_CONSTRUTORA)
> CONSTRAINT FK_ID_CONSTRUTORA FOREIGN KEY (ID_CONSTRUTORA)  REFERENCES
> CONSTRUTORA (_id) ON DELETE RESTRICT ON UPDATE CASCADE);
>
> Já verifiquei na internet e achei essa explicação:
>
> The English language error message for foreign key DML errors is usually
> "foreign key mismatch" but can also be "no such table" if the parent table
> does not exist. Foreign key DML errors are may be reported if:
>
> The parent table does not exist, or
> The parent key columns named in the foreign key constraint do not exist, or
> The parent key columns named in the foreign key constraint are not the
> primary key of the parent table and are not subject to a unique constraint
> using collating sequence specified in the CREATE TABLE, or
> The child table references the primary key of the parent without specifying
> the primary key columns and the number of primary key columns in the parent
> do not match the number of child key columns.
>
>
>
> From:http://www.sqlite.org/foreignkeys.html
>
> Mas não estou conseguindo entender como modificar as tabelas para que o erro
> pare de acontecer..as tabelas pais existem..estou mandando imprimir quando
> são criaddas..e as colunas que estou referenciando são primary key..
>
> ID_REVISTA
> CREATE TABLE REVISTA (NOME TEXT,ID_REVISTA INTEGER, PRIMARY KEY (ID_REVISTA)
> );
>
> ID_SITE
> CREATE TABLE SITE (URL TEXT NOT NULL ,_id INTEGER,NOME TEXT NOT NULL ,
> PRIMARY KEY (_id) );
>
> ID_CORRETOR_SOLICITADO e ID_CORRETOR_ATENDIMENTO
> CREATE TABLE CORRETOR (ID_IMOBILIARIA INTEGER,_id INTEGER, PRIMARY KEY (_id)
> CONSTRAINT FK_ID_IMOBILIARIA FOREIGN KEY (ID_IMOBILIARIA)  REFERENCES
> IMOBILIARIA (_id) ON DELETE RESTRICT ON UPDATE CASCADE);
>
> ID_JORNAL
> CREATE TABLE JORNAL (_id INTEGER,NOME TEXT NOT NULL , PRIMARY KEY (_id) );
>
> ID_CONSTRUTORA
> CREATE TABLE CONSTRUTORA (_id INTEGER,RESPONSAVEL TEXT,TELEFONE TEXT,CEP
> TEXT,NUMERO TEXT,ENDERECO TEXT,,INSCRICAO_ESTADUAL TEXT UNIQUE
> ,TELEFONE_CELULAR TEXT,CNPJ TEXT, PRIMARY KEY (_id) );
>
>
> Será que alguém pode me dar uma ideia do que pode ser?
>
> Desde já muito obrigado!
> --
> Júlio Cesar Bueno Cotta
> Bacharel em Ciência da Computação pela UFV
> Mestrando em Ciência da Computação pela UFABC
>



--
Júlio Cesar Bueno Cotta
Bacharel em Ciência da Computação pela UFV
Mestrando em Ciência da Computação pela UFABC




--
Att.
Diego Ampessan
Microsoft MTA

www.diegoampessan.com.br


Os computadores são incrivelmente rápidos, precisos e burros; Os homens são incrivelmente lentos, imprecisos e brilhantes; Juntos, seu poder ultrapassa os limites da imaginação  - "Albert Einstein "

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário