// Ado.h: interface for the CAdo class.
//
//
#if !defined(AFX_ADO_H__752BAA60_879D_4055_8A96_D272B57F0C87__INCLUDED_)
#define AFX_ADO_H__752BAA60_879D_4055_8A96_D272B57F0C87__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#import "c:/program files/common files/system/ado/msado15.dll" no_namespace rename("EOF", "adoEOF")
class CAdo
{
private:
_RecordsetPtr m_pRst;//("ADODB.Connection")
_ConnectionPtr m_pCon;//("ADODB.Recordset")
CString m_szLastError;
public:
CAdo();
virtual ~CAdo();
BOOL GetFieldType(long nIndex,int &nType);
enum DatabaseType{DBT_ACCESS,DBT_SQL,DBT_ORACLE,DBT_ODBC};
BOOL Connect(DatabaseType DBType,LPCTSTR szDatabase,LPCTSTR szUser=NULL,LPCTSTR szPass=NULL,LPCSTR szHost = NULL);
int ExecSQL(LPCTSTR szSQL);
BOOL Select(LPCTSTR szSQL);
BOOL IsEOF();
BOOL MoveNext();
BOOL GetFieldValue(LPCTSTR szField,COleDateTime &tValue);
BOOL GetFieldValue(LPCTSTR szField,double &fValue);
BOOL GetFieldValue(LPCTSTR szField,CString &sValue);
BOOL GetFieldValue(LPCTSTR szField,int &iValue);
int GetFieldMoney(LPCTSTR szField,double &fValue);
BOOL GetFieldByIndex(long nIndex,COleDateTime &tValue);
BOOL GetFieldByIndex(long nIndex,double &fValue);
BOOL GetFieldByIndex(long nIndex,CString &sValue);
BOOL GetFieldByIndex(long nIndex,int &iValue);
int GetFieldCount();
BOOL GetFieldName(long nIndex,CString &szName);
int GetRecordCount();
LPCTSTR GetLastError() {return m_szLastError;}
};
#endif // !defined(AFX_ADO_H__752BAA60_879D_4055_8A96_D272B57F0C87__INCLUDED_)
// Ado.cpp: implementation of the CAdo class.
//
//
#include "stdafx.h"
#include "ADODB.h"
#include "Ado.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//
// Construction/Destruction
//
CAdo::CAdo()
{
::CoInitialize(NULL);
}
CAdo::~CAdo()
{
::CoUninitialize();
}
BOOL CAdo::Connect(DatabaseType DBType,LPCTSTR szDatabase,LPCTSTR szUser,LPCTSTR szPass,LPCSTR szHost)
{
CString str;
switch(DBType)
{
case DBT_ACCESS:
{
str.Format("Provider=MSDASQL.1;Persist Security Info=False;"
"Data Source=MS Access Database;Initial Catalog=%s",szDatabase);
//str.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s",szDatabase);
}
break;
case DBT_ODBC:
{
str.Format("Data Source=%s;UID=%s;PWD=%s;",szDatabase,szUser,szPass);
}
break;
case DBT_SQL:
{
str="Driver=SQL Server;Server=";
str+=szHost;
str+=";Database=";
str+=szDatabase;
str+=";UID=";
str+=szUser;
str+=";PWD=";
str += szPass;
}
break;
case DBT_ORACLE:
str="Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=";
str+=szUser;
str+=";Password=";
str+=szPass;
str+=";Data Source=";
str+=szHost;
str+="//";
str+=szDatabase;
break;
}
try
{
m_pCon.CreateInstance(__uuidof(Connection));
m_pCon->Open(_bstr_t(str),szUser,szPass,adModeUnknown);
}
catch(_com_error &e)
{
m_szLastError = (LPCSTR)e.Description();
return FALSE;
}
return TRUE;
}
int CAdo::ExecSQL(LPCTSTR szSql)
{
_variant_t vRet;
try
{
m_pCon->Execute(szSql,&vRet,adCmdText);
}
catch( _com_error &e)
{
m_szLastError = (LPCSTR)e.Description();
return e.Error();
}
return 0;
}
BOOL CAdo::Select(LPCTSTR szSQL)
{
try
{
if(m_pRst)
m_pRst ->Close();
m_pRst.CreateInstance(__uuidof(Recordset));
m_pRst ->Open(szSQL,m_pCon.GetInterfacePtr(),adOpenForwardOnly,adLockReadOnly,adCmdText);
}
catch( _com_error &e)
{
m_szLastError = (LPCSTR)e.Description();
return FALSE;
}
return TRUE;
}
int CAdo::GetFieldCount()
{
try
{
return m_pRst ->Fields->Count;
}
catch(_com_error &e)
{
m_szLastError = (LPCSTR)e.Description();
return FALSE;
}
return TRUE;
}
BOOL CAdo::GetFieldName(long nIndex,CString &szName)
{
try
{
szName = (LPCSTR)m_pRst ->Fields ->Item[nIndex] ->Name;
}
catch(_com_error &e)
{
m_szLastError = (LPCSTR)e.Description();
return FALSE;
}
return TRUE;
}
BOOL CAdo::GetFieldValue(LPCTSTR szField,int &iValue)
{
try
{
iValue = (long)m_pRst ->GetCollect(szField);
}
catch(_com_error &e)
{
m_szLastError = (LPCSTR)e.Description();
return FALSE;
}
return TRUE;
}
BOOL CAdo::GetFieldByIndex(long nIndex,int &iValue)
{
try
{
iValue = (long)m_pRst ->GetCollect(nIndex);
}
catch(_com_error &e)
{
m_szLastError = (LPCSTR)e.Description();
return FALSE;
}
return TRUE;
}
BOOL CAdo::GetFieldByIndex(long nIndex,CString &szValue)
{
try
{
szValue = m_pRst ->GetCollect(nIndex).bstrVal;
}
catch(_com_error &e)
{
m_szLastError = (LPCSTR)e.Description();
return FALSE;
}
return TRUE;
}
BOOL CAdo::GetFieldByIndex(long nIndex,COleDateTime &tValue)
{
try
{
tValue = (DATE)m_pRst->GetCollect(nIndex);
return TRUE;
}
catch(_com_error &e)
{
m_szLastError = (LPCSTR)e.Description();
return FALSE;
}
}
BOOL CAdo::GetFieldByIndex(long nIndex,double &fValue)
{
try
{
fValue = m_pRst->GetCollect(nIndex);
return TRUE;
}
catch(_com_error &e)
{
m_szLastError = (LPCSTR)e.Description();
return FALSE;
}
}
BOOL CAdo::IsEOF()
{
try
{
return m_pRst ->adoEOF;
}
catch(_com_error &e)
{
m_szLastError = (LPCSTR)e.Description();
return FALSE;
}
}
BOOL CAdo:: MoveNext()
{
try
{
m_pRst ->MoveNext();
return TRUE;
}
catch(_com_error &e)
{
m_szLastError = (LPCSTR)e.Description();
return FALSE;
}
}
BOOL CAdo::GetFieldValue(LPCTSTR szField,CString &sValue)
{
try
{
sValue = m_pRst->GetCollect(szField).bstrVal;
return TRUE;
}
catch(_com_error &e)
{
m_szLastError = (LPCSTR)e.Description();
return FALSE;
}
}
BOOL CAdo::GetFieldValue(LPCTSTR szField,COleDateTime &tValue)
{
try
{
tValue = (DATE)m_pRst->GetCollect(szField);
return TRUE;
}
catch(_com_error &e)
{
m_szLastError = (LPCSTR)e.Description();
return FALSE;
}
}
int CAdo::GetRecordCount()
{
try
{
return m_pRst ->RecordCount;
}
catch(_com_error &e)
{
m_szLastError = (LPCSTR)e.Description();
return FALSE;
}
}
BOOL CAdo::GetFieldType(long nIndex, int &nType)
{
try
{
nType = m_pRst ->Fields->Item[nIndex] ->Type;
}
catch(_com_error &e)
{
m_szLastError = (LPCSTR)e.Description();
return FALSE;
}
return TRUE;
}