Boa noite,
Acabei de ler o email do Fabio que disse que a lista ficou fora do ar
durante o fim de semana. por isso continuo com problemas...
INSERT INTO MINISTRA VALUES('0000301', 'SCE-0611', 1, 20042, true);
Error in Query: ERROR: insert or update on table "ministra" violates
foreign key constraint "fk_ministra_turma"
DETAIL: Key (disc,id_turma,semestre)=(SCE-0611 ,1,20042) is not
present in table "turma".
Olha a saida que a execuçao mostra o espaço entre a disciplina e virgula
surge de maneira muito estranha... Já revi os encoding dos arquivos de
entrada, criação de tabela, instalei o postgres e atualizei o sistema
operacional, tudo com o latin-1.
Aguem sabe o que esta acontecendo? Se estiver omitindo alguma informação
importante, um log, por favor me informem. Estou sem saber como resolver. O
gcc foi instalado no apt-get será que ele esta com o encoding bagunçado?
Muito obrigado
On 7/5/07, Felipe Luis (TIO) <[EMAIL PROTECTED]> wrote:
Olá a todos,
Antes de mais nada mandei este e-mail na lista dia 30, por algum motivo
nào recebi os e-mails da lista do dia 1 até hoje. Espero que este chegue.
Estou com um problema na minha aplicação e depois de procurar muito na net
ainda não encontrei nada parecido.
Alguns caracteres aparecem na minha consulta e esses caracteres não estào
sendo inseridos.
Vou colocar um exemplo prático eu inserio os dados sobre as disciplinas e
suas turmas:
INSERT INTO DISCIPLINA VALUES('SCE-0105','Estatística I', 4,'Computação');
>
> INSERT INTO DISCIPLINA VALUES('SCE-0119','Introdução à Teoria das
> Probabilidades', 4,'Computação');
> (...)
INSERT INTO TURMA VALUES('SCE-0105', '1', 20042);
> INSERT INTO TURMA VALUES('SCE-0119', '1', 20042);
(...)
>
Recupero as informções em um programa, escrito em c da seguinte maneira:
if(executaComando(conn,"DECLARE curr CURSOR FOR SELECT t.disc, t.id_turma,
> t.semestre, da.area, d.ch FROM TURMA t LEFT JOIN DISC_EM_AREA da ON
> t.disc = da.disc JOIN DISCIPLINA d ON t.disc = d.cod ORDER BY t.disc,
> t.id_turma;", &result)){
(...)
>
Os dados estavam vindo com varios caracteres a mais. Tentei resolver o
problema usando a função strncpy informando o tamanho dos meus dados (que
deveriam conter 8 caracteres).
strncpy((*turma)[i].cod, PQgetvalue(result, 0, 0),8);
> printf("%s,%s.\n",PQgetvalue(result, 0, 0),(*turma)[i].cod);
(...)
>
Aparentemente funciona. Em negrito pode-se ver que o espaço entre virgulas
é o lixo que estava guardado no banco de dados. o valor copiado no vetor de
turmas está correto pois tem apenas 8 digitos.
SCE-0105 ,SCE-0105.
> SCE-0119 ,SCE-0119.
> (...)
>
Fiquei supreso quando vi o resultado que foi gravado no arquivo de saida:
onde deveria ser gravado...
fprintf(fp,"%s %s %d\n",prof[p].nusp, turma[t].cod, turma[t].turma);
0000401 SCE-0105 1
0000702 SCE-0105 1
0000801 SCE-0105 1
0000902 SCE-0105 1
0000801 SCE-0119 1
0000802 SCE-0119 1
0000801 SCE-0119 2
0000802 SCE-0119 2
0000801 SCE-0119 3
Olhando mais de perto percebi algo mais bizarro o valor deste caracter
fantasma é o valor do outro atributo. (!?!?!)
Alguem á passou por um problema parecido? Acho que estou tendo um problema
com enncoding porem quando criei a base me preocupei para deixar tudo em
latin-1.
Agradeço a atenção de todos e espero consigir ajuda neste forum.
--
Felipe Luis de Souza Vieira
--
Felipe Luis de Souza Vieira
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral