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;
}
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
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