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

Responder a