primary key não pode, por definição, ser null..eu crio daquele jeito pois assim posso criar PK com multiplas colunas..tipo
PRIMARY KEY (EMAIL,ID_CONSTRUTORA)
as duas colunas em conjunto são a chave primary composta..se eu utilizar o modelo "normal" só é permitido criar chaves primarias simples.
Já que vocês querem tanto eu vou colocar o autoincrement lá e testar..
Em 15 de dezembro de 2011 16:16, Diego Ampessan <ampessann@gmail.com> escreveu:
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 maneiraCREATE 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émComo 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 AmpessanMicrosoft 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 "
--
Júlio Cesar Bueno Cotta
Bacharel em Ciência da Computação pela UFV
Mestrando em Ciência da Computação pela UFABC
Bacharel em Ciência da Computação pela UFV
Mestrando em Ciência da Computação pela UFABC






0 comentários:
Postar um comentário