Tecnologia do Blogger.
RSS

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



Em 16 de dezembro de 2011 15:49, Bruno Albuquerque <bruno.albuquerque@gmail.com> escreveu:
Cole aqui a sua diretiva de criação das tabelas CLIENTE e CONSTRUTORA.

Fora isso, usar UPPER para números é completamente desnecessário (qual
a diferença entre 2 minúsculo e 2 maiúsculo? :) ).

Nenhuma diferença, eu sei, é que fiz um construtor de consultas genérico [1]..como não faz diferença..deixei lá..ele apareceu ai poque eu copiei e coloquei de um print que ele dá no LogCat. :-P
 
Outra coisa que eu percebi é que você disse no email original que
simplificou a tabela. Então o problema pode ser em outra FK de outra
tabela. Mas, ainda assim, é numa FK com certeza.

 Então..eu não to mandando o SQL completo poque esse projeto não é de um projeto publico e porque as outras FKs são simples..a única PK composta é a do cliente...
Será que poderia mandar o SQL em pvt para você se não for abusar?



[1] Essa parte é código aberto..
http://code.google.com/p/oktoberfest2011/source/browse/trunk/OktoberfestBlumenau2011/src/org/android/brasil/projetos/oktoberfest2011/persistencia/ApresentacaoDAO.java?r=247&spec=svn256

  private static String condicaoANDBuilder(String[] keys, String[] values) {
                String condicao = new String();
                int parada = values.length < keys.length ? values.length : keys.length;

                for (int i = 0; i < parada; i++) {
                        condicao += "UPPER(" + keys[i] + ") = UPPER('" + values[i]
                                        + "') AND ";
                }
                if (condicao.length() > 5) {
                        condicao = condicao.substring(0, condicao.length() - 5);
                }
                return condicao;
        }


-Bruno

2011/12/16 Júlio Cesar Bueno Cotta <juliocbcotta@gmail.com>:
> Ok Bruno.
> Copiei o arquivo de db a partir do emulador (adb pull
> /data/data/$PACKAGE/databases/MeuDb) e executei a consulta no Sqliteman.
> Mesmo resultado, a construtora existe.
> Aproveitei e conferi os dados do cliente..o cliente está com o email e id da
> construtora certos também.
> Quando executo manualmente
>
> UPDATE CLIENTE set FONE_CELULAR='1111111111' WHERE
> UPPER(EMAIL)=UPPER('julio@gmail.com') AND UPPER(ID_CONSTRUTORA)=UPPER('2');
>
> também dá certo.
>
> Em 16 de dezembro de 2011 13:00, Bruno Albuquerque
> <bruno.albuquerque@gmail.com> escreveu:
>
>> Cara, conecta no sqlite e rode queries manualmente. Por exemplo, no
>> seu codigo abaixo não dá pra ter a mínima idéia se o nome do campo de
>> id da tabela construtora está correto (tem que ser _id).
>>
>> -Bruno
>>
>> 2011/12/16 Júlio Cesar Bueno Cotta <juliocbcotta@gmail.com>:
>> > Bruno, durante a instalação eu estou inserindo vários campos de teste
>> > nas
>> > tabelas, entre eles estão as construtoras..sendo que eu especifico o id
>> > delas manualmente. Executei o select e me retornou os dados
>> > corretamente.
>> >
>> >     public static Construtora get(Long idConstrutora) {
>> >
>> >         idConstrutora = 2L;
>> >         //Cursor c = consultar(TABELA_CONSTRUTORA,
>> > COLUNA_ID_CONSTRUTORA,
>> > idConstrutora.toString());
>> >         Cursor c = mDb.query(true,TABELA_CONSTRUTORA,
>> > null,COLUNA_ID_CONSTRUTORA+"=" +String.valueOf(idConstrutora),null,null,
>> > null, null,null);
>> >         c.moveToFirst();
>> >         Construtora cons = deCursorParaConstrutora(c);
>> >         System.out.println("CONSTRUTORAAAAAAAAAAAAAAAAAAAAAAAAAA
>> > "+c.getCount()+"  ID "+cons.getIdConstrutora());
>> >         c.close();
>> >         return cons;
>> >
>> >     }
>> >
>> > 12-16 12:06:54.542: I/System.out(459):
>> > CONSTRUTORAAAAAAAAAAAAAAAAAAAAAAAAAA
>> > 1  ID 2
>> >
>> > Queria muito que esse fosse o problema, pois seria simples de resolver,
>> > mas
>> > pelo o que vi aqui, não é.
>> > Mais alguma ideia Bruno?
>> >
>> > Em 16 de dezembro de 2011 09:46, Bruno Albuquerque
>> > <bruno.albuquerque@gmail.com> escreveu:
>> >
>> >> Cara, mais uma vez. O problema *é* com a chave estrangeira. O Erro diz
>> >> exatamente isso. Rode esse query:
>> >>
>> >> SELECT * FROM CONSTRUTORA WHERE _id = 2
>> >>
>> >> Isso retorna algo?
>> >>
>> >> -Bruno
>> >>
>> >> 2011/12/15 Júlio Cesar Bueno Cotta <juliocbcotta@gmail.com>:
>> >> > Pessoal..testei aqui...e nada mudou..
>> >> > Coloquei "no action" e tb tentei com "restrict" em todas as tabelas
>> >> > (tanto
>> >> > no on update quanto no on delete) para ver se funcionava..e nada..
>> >> > continuou
>> >> > dando o mesmo erro..coloquei auto incremento em todas as tabelas de
>> >> > chave
>> >> > simples e tb não mudou nada..se tiverem mais alguma ideia..eu
>> >> > gostaria
>> >> > de
>> >> > ouvir (ler).. :-D
>> >> >
>> >> > E somente a titulo de curiosidade..quando desligo a verificação de
>> >> > chave
>> >> > extrangeira no SQLite..tudo funciona..aparentemente..
>> >> >
>> >> > Abraço.
>> >> >
>> >> > 2011/12/15 Júlio Cesar Bueno Cotta <juliocbcotta@gmail.com>
>> >> >>
>> >> >>
>> >> >>
>> >> >> Em 15 de dezembro de 2011 17:17, Diego Rocha
>> >> >> <diego@diegosrocha.com.br>
>> >> >> escreveu:
>> >> >>
>> >> >>> Diego,
>> >> >>>
>> >> >>> Autoincrement você não coloca como null, pois como ele disse, no
>> >> >>> SQLite o
>> >> >>> "Integer Primary Key" vai funcionar como autoincrement. Quando ele
>> >> >>> não
>> >> >>> passar valor pro insert (ao invés de null vai usar o incremento) na
>> >> >>> chave.
>> >> >>>
>> >> >> Por definição, uma chave primaria não pode ser null..ela é o ponto
>> >> >> de
>> >> >> referencia único (no sentido que identifica unicamente uma linha na
>> >> >> tabela)
>> >> >> e por tanto qualquer coluna marcada como sendo primary key..nunca
>> >> >> pode
>> >> >> ser
>> >> >> marcada como "null". Tem haver com a integridade da tabela..
>> >> >>
>> >> >>> Você disse que o problema acontece só no update não é?
>> >> >>
>> >> >> Sim.
>> >> >>>
>> >> >>> Será que o problema não é por você estar usando cascade do update?
>> >> >>> Faz um teste com a tabela sem "on update cascade" e vê se funciona.
>> >> >>>
>> >> >> Vou testar hoje a noite e dou um feedback..estou usando on delete
>> >> >> restrict
>> >> >> e on update cascade em todas as FK.. ao meu ver..isso não deveria
>> >> >> ser
>> >> >> um
>> >> >> problema..mas vai que é neh. :-D
>> >> >> Assim que testar aviso aqui..
>> >> >> Abraço e muito obrigado pelas dicas!
>> >> >>>
>> >> >>> Atenciosamente,
>> >> >>> Diego Rocha
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >> --
>> >> >> 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
>> >> >
>> >
>> >
>> >
>> >
>> > --
>> > 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
>



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

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

0 comentários:

Postar um comentário