database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 1100 게시물 읽기
No. 1100
Re: 흑흑흑~~~또 에러가.......
작성자
정재익
작성일
2000-05-25 03:07
조회수
15,404

다음은 에러를 수정한 소스로서 최소한 내게서는 에러없이 잘 돌아간다. 참고로 하기 바란다.

아울러 너가 보내 준 것과는 몇가지 차이가 있는 점을 설명하마.

1. 나는 libpq/fe.h 파일의 위치가 너와는 다르다. 적당히 고치도록 해라.

2. 너가 보낸 database 에서 table 선언시 준 constraint 문을 모두 없애고 테스트 했다. 혹시 이 소스대로 했는데도 안되거든 그 constraint 를 없애고 다시 테이블 만들어서 테스트 해봐라. 혹시 constraint 구문 때문에 쓸데없는 에러가 있을까 싶어 귀찮음을 피하기 위해서 잠시 그렇게 했다.

 

참. 소스 중간중간에 들어가 있는 소용없는 prinf 문은 너가 제거하도록 해라.

제대로 에러없이 돌아간다는 것을 확인시켜 주기 위해서 넣어 둔 문장이다.

 

다음은 수정한 소스문이다.

=====================================================

 

#include "stdio.h"

#include "/usr/local/pgsql/include/libpq/fe.h"

#include "string.h"

 

int main()

{

 

char *pghost, *pgport, *pgoptions, *pgtty, *dbName;

 

PGconn *Connection;

PGresult *result;

 

int number_of_lotto;

int nTuples;

char sqlstr[200];

int i;

 

int level;

int lotto_number;

int t_lotto_number;

int l_point;

char temp[10];

 

char data1[20],data2[20],data3[20];

 

char *LOTTO_NAME="즉석복권";

 

pgoptions=NULL;

pgtty=NULL;

dbName="lotto";

pghost="localhost";

pgport="5432";

 

Connection=PQsetdb(pghost,pgport,pgoptions,pgtty,dbName);

 

if(PQstatus(Connection)==CONNECTION_BAD)

{

fprintf(stdout,"connection_to_database_%s_failed\n\n",dbName);

PQfinish(Connection);

exit(1);

}

 

// strcpy(sqlstr,"declare dcursor cursor for select * from lotto where name='");

// strcat(sqlstr,LOTTO_NAME);

// strcat(sqlstr,"' ");

 

sprintf(sqlstr,"declare dcursor cursor for select * from %s "

"where name='%s'", dbName, LOTTO_NAME);

 

result=PQexec(Connection,"BEGIN");

PQclear(result);

result=PQexec(Connection,sqlstr);

PQclear(result);

result=PQexec(Connection,"FETCH forward 10 in dcursor");

strcpy(temp,PQgetvalue(result,0,1));

number_of_lotto=atoi(temp);

result=PQexec(Connection,"END;");

PQclear(result);

 

printf( "No of lotto : %d\n\n",number_of_lotto );

 

// strcpy(sqlstr,"update lotto set number_of_lotto_usable=");

// strcat(sqlstr,temp);

// strcat(sqlstr," where name='");

// strcat(sqlstr,LOTTO_NAME);

// strcat(sqlstr,"' ;");

 

sprintf(sqlstr,"update %s set number_of_lotto_usable=%d "

"where name='%s'", dbName, temp, LOTTO_NAME);

 

result=PQexec(Connection,sqlstr);

if(PQresultStatus(result)!=PGRES_COMMAND_OK)

{

fprintf(stdout,"command failed \n\n");

fprintf(stdout,"%s",PQerrorMessage(Connection));

PQclear(result);

exit(1);

}

 

printf ("1. 에러점검 \n\n");

 

// strcpy(sqlstr,"delete from level where lotto_name='");

// strcat(sqlstr,LOTTO_NAME);

// strcat(sqlstr,"'; ");

 

sprintf(sqlstr,"delete from level where lotto_name='%s'",LOTTO_NAME);

 

result=PQexec(Connection,sqlstr);

if(PQresultStatus(result)!=PGRES_COMMAND_OK)

{

fprintf(stdout,"command failed \n\n");

fprintf(stdout,"delete error : %s",PQerrorMessage(Connection));

 

PQclear(result);

exit(1);

}

PQclear(result);

 

printf ("2. 에러점검 \n\n");

 

// 이 아래 부분에서 에러가 납니다.....단순한 select문인데요...... 이유를 알수 없네요.....

 

// strcpy(sqlstr,"declare ecursor cursor for select * from leveldata where lotto_name='");

// strcat(sqlstr,LOTTO_NAME);

// strcat(sqlstr,"' ");

 

sprintf(sqlstr,"declare ecursor cursor for select * from leveldata "

"where lotto_name='%s'", LOTTO_NAME);

 

printf ("sqlstr: %s\n\n",sqlstr );

 

result=PQexec(Connection,"BEGIN");

PQclear(result);

result=PQexec(Connection,sqlstr);

PQclear(result);

result=PQexec(Connection,"FETCH forward 50 in ecursor");

 

printf ("PQresultStatus: %d\n\n",PQresultStatus(result));

printf ("PQerrorMessage: %s\n\n",PQerrorMessage(Connection));

printf ("COMMAND_OK: %d TUPLES_OK: %d\n\n",PGRES_COMMAND_OK,PGRES_TUPLES_OK);

 

// if(PQresultStatus(result)!=PGRES_COMMAND_OK) 이렇게 비교하면 안됩니다.

// 이유는 PGRES_COMMAND_OK 는 명령어가 실행되고 돌아오는 결과값이 없을때

// 나는 결과값이고, 만약 돌아오는 결과값이 있을 경우에는

// PGRES_TUPLES_OK 로 돌아 오기 때문이지요.

// 그러므로 이 문장은 차라리 if (fatal_error) {...} 이런식으로 바뀌어야

// 하지 않을까 싶네요.

// 위의 경우 보면 알겠지만 돌아 온값은 PGRES_TUPLES_OK 값이 돌아 왔으므로

// 명령어는 제대로 실행되고 그 결과 돌아 오는 tuple 들이 있다는 것으로

// 해석해 줘야 합니다.

 

if (PQresultStatus(result) == PGRES_FATAL_ERROR)

{

fprintf(stdout,"Fatal Error occurred\n\n"); //출력되는 에러 메시지임다~~

fprintf(stdout,"fetch error : %s\n\n",PQerrorMessage(Connection));

 

PQclear(result);

exit(1);

}

 

nTuples=PQntuples(result);

 

printf("nTuples : %d\n\n",nTuples);

 

for(i=0;i<number_of_lotto&&i<nTuples;i++)

{

strcpy(data1,PQgetvalue(result,i,1));

strcpy(data2,PQgetvalue(result,i,2));

strcpy(data3,PQgetvalue(result,i,3));

 

// strcpy(sqlstr,"insert into level values ('");

// strcat(sqlstr,LOTTO_NAME);

// strcat(sqlstr,"',");

// strcat(sqlstr,data1);

// strcat(sqlstr,",");

// strcat(sqlstr,data2);

// strcat(sqlstr,",");

// strcat(sqlstr,data2);

// strcat(sqlstr,",");

// strcat(sqlstr,data3);

// strcat(sqlstr,");");

 

sprintf(sqlstr,"insert into level values ('%s',%s,%s,%s,%s)",

LOTTO_NAME,data1,data2,data2,data3);

 

printf("%d. sqlstr : %s\n\n",i,sqlstr);

 

PQexec(Connection,sqlstr);

if(PQresultStatus(result) == PGRES_FATAL_ERROR)

{

fprintf(stdout,"Command Failed / insert error : %s\n\n",

PQerrorMessage(Connection));

 

PQclear(result);

exit(1);

}

}

 

result=PQexec(Connection,"END;");

if(PQresultStatus(result)!=PGRES_COMMAND_OK)

{

fprintf(stdout,"command failed \n\n");

fprintf(stdout,"end error : %s",PQerrorMessage(Connection));

 

PQclear(result);

exit(1);

}

 

PQclear(result);

PQfinish(Connection);

 

return 0;

 

}

 

=========================================

이상으로 소스 수정 끝이다.

[Top]
No.
제목
작성자
작성일
조회
1066아파치 php3 , postgresql, oracle 을 연동 시키고 싶습니다.
초보자
2000-05-22
16762
1068┕>Re: 아파치 php3 , postgresql, oracle 을 연동 시키고 싶습니다.
정재익
2000-05-22 14:46:38
15804
1065Data Type TEXT 에 대한 질문
이민우
2000-05-22
17284
1067┕>Re: Data Type TEXT 에 대한 질문
정재익
2000-05-22 14:41:44
17574
1069 ┕>Re: Re: Data Type TEXT 에 대한 질문
이민우
2000-05-22 15:52:34
17007
1061postgres 의 src디렉토리는 ....[초보]
조용호
2000-05-20
17210
1062┕>Re: postgres 의 src디렉토리는 ....[초보]
Coral
2000-05-20 15:01:01
17196
1063 ┕>Re: Re: postgres 의 src디렉토리는 ....[초보]
정재익
2000-05-22 06:15:53
17113
1060흑흑흑~~~또 에러가.......
김종혁
2000-05-19
15407
1064┕>Re: 흑흑흑~~~또 에러가.......
정재익
2000-05-22 07:39:54
16349
1070 ┕>Re: Re: 흑흑흑~~~또 에러가.......
김종혁
2000-05-22 22:36:28
15758
1071  ┕>Re: Re: Re: 흑흑흑~~~또 에러가.......
정재익
2000-05-23 03:02:46
15969
1100┕>Re: 흑흑흑~~~또 에러가.......
정재익
2000-05-25 03:07:03
15404
1058이런 에러가!!!!!!
김종혁
2000-05-19
15887
1059┕>Re: 이런 에러가!!!!!!
정재익
2000-05-19 09:26:36
17069
1056밑의 질문 다시요..
이채은
2000-05-18
16381
1057┕>Re: 밑의 질문 다시요..
Coral
2000-05-18 22:31:28
16961
1052pg_*** 수정하려면?
이채은
2000-05-18
14550
1055┕>Re: pg_*** 수정하려면?
정재익
2000-05-18 19:46:06
15035
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다