[QnA]에 환경설정 부분은 설명을 드렸는데,
구체적인 예제도 하나 정도 있으면 좋겠다는 생각에 하나 올립니다.
무지 하게 허접합니다.
단지 참고용으로만 사용하시기를...
>>> 환경설정 <<<
우선 환경설정을 하셔야 컴파일이 됩니다.
간략히 설명드리자면,
[Tools] -> [Options] -> [Directories] 에서
및
에 PostgreSQL에서 사용하는
경로를 포함시키셔야 합니다.
제 경우에는
C:\PROGRAM FILES\POSTGRESQL\8.1\INCLUDE
C:\PROGRAM FILES\POSTGRESQL\8.1\LIB\MS
그리고 마지막으로 C:\PROGRAM FILES\POSTGRESQL\8.1\bin
디렉토리의 dll 파일들을 전부 Windows\system32 디렉토리에
복사하셔야 합니다.
이것으로 사용가능한 설정은 완료가 됩니다.
파일 업로드가 되질 않아서..
그냥 소스체로 올립니다.^^ 지송 ^^
-------------------------------------------------------------
[PgDb.h]
#pragma comment (lib, "libpq.lib")
#include "libpq-fe.h"
class CPgDb
{
public:
CPgDb();
virtual ~CPgDb();
public:
BOOL Connect(char *szConn);
void Disconnect();
int ExecDB(char *szSql);
int SelectDB(char *szSql);
void GetErrMsg(char *szMsg);
void ClearDB();
void FinishDB();
public:
PGresult* m_pRes;
private:
BOOL m_bConnected;
PGconn* m_pConn;
};
[PgDb.cpp]
#include "PgDb.h"
CPgDb::CPgDb()
{
m_pConn = NULL;
m_pRes = NULL;
m_bConnected = FALSE;
}
CPgDb::~CPgDb()
{
Disconnect();
}
BOOL CPgDb::Connect(char *szConn)
{
char szMsg[255];
m_pConn = PQconnectdb(szConn);
if (PQstatus(m_pConn) != CONNECTION_OK)
{
GetErrMsg(szMsg);
FinishDB();
m_bConnected = FALSE;
}
else
m_bConnected = TRUE;
return m_bConnected;
}
void CPgDb::Disconnect()
{
if (m_bConnected == TRUE)
{
FinishDB();
m_bConnected = FALSE;
}
}
int CPgDb::ExecDB(char *szSql)
{
int nRet;
m_pRes = PQexecParams(m_pConn, szSql, 0, NULL, NULL, NULL, NULL, 0);
nRet = PQresultStatus(m_pRes);
ClearDB();
return nRet;
}
int CPgDb::SelectDB(char *szSql)
{
m_pRes = PQexecParams(m_pConn, szSql, 0, NULL, NULL, NULL, NULL, 0);
return ( PQresultStatus(m_pRes) );
}
void CPgDb::GetErrMsg(char *szMsg)
{
sprintf(szMsg, "%s", PQerrorMessage(m_pConn));
}
void CPgDb::ClearDB()
{
PQclear(m_pRes);
}
void CPgDb::FinishDB()
{
PQfinish(m_pConn);
}
// 실제로 사용하는 부분
[Exam.cpp]
void CTt1Dlg::OnButtonConnect()
{
// TODO: Add your control notification handler code here
char szConn[255];
char szMsg[255];
sprintf(szConn, "%s", "user=postgres dbname=postgres");
if (!db.Connect(szConn))
{
db.GetErrMsg(szMsg);
AfxMessageBox(szMsg);
}
}
void CTt1Dlg::OnButtonDisconnect()
{
// TODO: Add your control notification handler code here
db.Disconnect();
}
void CTt1Dlg::OnButtonSelect()
{
// TODO: Add your control notification handler code here
int nRet;
char szSql[1024];
char szMsg[255];
sprintf(szSql, "%s", "select * from pg_tables");
nRet = db.SelectDB(szSql);
if (nRet != PGRES_TUPLES_OK)
{
db.GetErrMsg(szMsg);
db.ClearDB();
db.Disconnect();
AfxMessageBox(szMsg);
return;
}
int i, j, nFields;
CString strMsg;
nFields = PQnfields(db.m_pRes);
for (i = 0; i < nFields; i++)
strMsg.Format("[%s]::", PQfname(db.m_pRes, i));
m_strLine.Empty();
m_strLine += strMsg;
m_strLine += "\r\n";
for (i = 0; i < nFields; i++)
m_strLine += strMsg;
m_strLine += "\r\n";
for (i = 0; i < PQntuples(db.m_pRes); i++)
{
for (j = 0; j < nFields; j++)
{
strMsg.Format("%-15s", PQgetvalue(db.m_pRes, i, j));
m_strLine += strMsg;
}
m_strLine += "\r\n";
}
db.ClearDB();
UpdateData(FALSE);
}
-------------------------------------------------------------------
|