//
// MODULE: Ado.h
//
// AUTHOR: Carlos Antollini
//
// Date: 6/28/2001
//
// Version 1.2
//
#ifndef _ADO_H_
#define _ADO_H_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include "StdAfx.h"
#include "icrsint.h"
//#include "resource.h"
// CG : In order to use this code against a different version of ADO, the appropriate
// ADO library needs to be used in the #import statement
#import "C:Program FilesCommon FilesSystemADOmsado15.dll" rename_namespace("ADOCG") rename("EOF", "EndOfFile")
using namespace ADOCG;
struct CADOFieldInfo
{
char m_strName[30];
short m_nType;
long m_lSize;
long m_lDefinedSize;
long m_lAttributes;
short m_nOrdinalPosition;
BOOL m_bRequired;
BOOL m_bAllowZeroLength;
long m_lCollatingOrder;
};
CString IntToStr(int nVal);
CString LongToStr(long lVal);
class CADODatabase
{
public:
bool Execute(LPCTSTR lpstrExec);
CADODatabase()
{
::CoInitialize(NULL);
m_pConnection = NULL;
m_strConnection = _T("");
m_pConnection.CreateInstance(__uuidof(Connection));
}
~CADODatabase()
{
Close();
m_pConnection.Release();
m_pConnection = NULL;
::CoUninitialize();
}
bool Open(LPCTSTR lpstrConnection = _T(""));
_ConnectionPtr GetActiveConnection() {return m_pConnection;};
DWORD GetRecordCount(_RecordsetPtr m_pRs);
long BeginTransaction()
{return m_pConnection->BeginTrans();};
long CommitTransaction()
{return m_pConnection->CommitTrans();};
long RollbackTransaction()
{return m_pConnection->RollbackTrans();};
bool IsOpen();
void Close();
void SetConnectionString(LPCTSTR lpstrConnection)
{m_strConnection = lpstrConnection;};
CString GetConnectionString()
{return m_strConnection;};
CString GetLastError()
{return m_strLastError;};
protected:
void dump_com_error(_com_error &e);
protected:
_ConnectionPtr m_pConnection;
CString m_strConnection;
CString m_strLastError;
};
class CADORecordset
{
public:
enum cadoOpenEnum
{
openUnknown = 0,
openQuery = 1,
openTable = 2,
openStoredProc = 3
};
enum cadoEditEnum
{
dbEditNone = 0,
dbEditNew = 1,
dbEdit = 2
};
enum cadoPositionEnum
{
positionUnknown = -1,
positionBOF = -2,
positionEOF = -3
};
enum cadoSearchEnum
{
searchForward = 1,
searchBackward = -1
};
bool SetFieldValue(int nIndex, CString strValue);
bool SetFieldValue(LPCTSTR lpFieldName, CString strValue);
bool SetFieldValue(int nIndex, int nValue);
bool SetFieldValue(LPCTSTR lpFieldName, int nValue);
bool SetFieldValue(int nIndex, long lValue);
bool SetFieldValue(LPCTSTR lpFieldName, long lValue);
bool SetFieldValue(int nIndex, double dblValue);
bool SetFieldValue(LPCTSTR lpFieldName, double dblValue);
bool SetFieldValue(int nIndex, COleDateTime time);
bool SetFieldValue(LPCTSTR lpFieldName, COleDateTime time);
void CancelUpdate();
bool Update();
void Edit();
bool AddNew();
bool Find(LPCTSTR lpFind, int nSearchDirection = CADORecordset::searchForward);
bool FindFirst(LPCTSTR lpFind);
bool FindNext();
CADORecordset()
{
m_pRecordset = NULL;
m_pCmd = NULL;
m_strQuery = _T("");
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pCmd.CreateInstance(__uuidof(Command));
m_nEditStatus = CADORecordset::dbEditNone;
m_nSearchDirection = CADORecordset::searchForward;
}
CADORecordset(CADODatabase* pAdoDatabase);
~CADORecordset()
{
Close();
m_pRecordset.Release();
m_pCmd.Release();
m_pRecordset = NULL;
m_pCmd = NULL;
m_strQuery = _T("");
m_nEditStatus = dbEditNone;
}
CString GetQuery()
{return m_strQuery;};
void SetQuery(LPCSTR strQuery)
{m_strQuery = strQuery;};
bool RecordBinding(CADORecordBinding &pAdoRecordBinding);
DWORD GetRecordCount();
bool IsOpen();
void Close();
bool Open(_ConnectionPtr mpdb, LPCTSTR lpstrExec = _T(""), int nOption = CADORecordset::openUnknown);
bool Open(LPCTSTR lpstrExec = _T(""), int nOption = CADORecordset::openUnknown);
bool GetFieldValue(LPCTSTR lpFieldName, double& dbValue);
bool GetFieldValue(int nIndex, double& dbValue);
bool GetFieldValue(LPCTSTR lpFieldName, long& lValue);
bool GetFieldValue(int nIndex, long& lValue);
bool GetFieldValue(LPCTSTR lpFieldName, int& nValue);
bool GetFieldValue(int nIndex, int& nValue);
bool GetFieldValue(LPCTSTR lpFieldName, CString& strValue);
bool GetFieldValue(int nIndex, CString& strValue);
bool GetFieldValue(LPCTSTR lpFieldName, COleDateTime& time);
bool GetFieldValue(int nIndex, COleDateTime& time);
bool IsFieldNull(LPCTSTR lpFieldName);
bool IsFieldNull(int nIndex);
bool IsFieldEmpty(LPCTSTR lpFieldName);
bool IsFieldEmpty(int nIndex);
bool IsEof()
{return m_pRecordset->EndOfFile == VARIANT_TRUE;};
bool IsEOF()
{return m_pRecordset->EndOfFile == VARIANT_TRUE;};
bool IsBof()
{return m_pRecordset->BOF == VARIANT_TRUE;};
bool IsBOF()
{return m_pRecordset->BOF == VARIANT_TRUE;};
void MoveFirst()
{m_pRecordset->MoveFirst();};
void MoveNext()
{m_pRecordset->MoveNext();};
void MovePrevious()
{m_pRecordset->MovePrevious();};
void MoveLast()
{m_pRecordset->MoveLast();};
long GetAbsolutePage()
{return m_pRecordset->GetAbsolutePage();};
void SetAbsolutePage(int nPage)
{m_pRecordset->PutAbsolutePage((enum PositionEnum)nPage);};
long GetPageCount()
{return m_pRecordset->GetPageCount();};
long GetPageSize()
{return m_pRecordset->GetPageSize();};
void SetPageSize(int nSize)
{m_pRecordset->PutPageSize(nSize);};
long GetAbsolutePosition()
{return m_pRecordset->GetAbsolutePosition();};
void SetAbsolutePosition(int nPosition)
{m_pRecordset->PutAbsolutePosition((enum PositionEnum)nPosition);};
bool GetFieldInfo(LPCTSTR lpFieldName, CADOFieldInfo* fldInfo);
bool GetFieldInfo(int nIndex, CADOFieldInfo* fldInfo);
bool GetChunk(LPCTSTR lpFieldName, CString& strValue);
CString GetString(LPCTSTR lpCols, LPCTSTR lpRows, LPCTSTR lpNull, long numRows = 0);
CString GetLastError() {return m_strLastError;};
void GetBookmark()
{m_varBookmark = m_pRecordset->Bookmark;};
bool SetBookmark();
bool Delete();
protected:
_ConnectionPtr m_pConnection;
int m_nSearchDirection;
CString m_strFind;
_variant_t m_varBookFind;
_variant_t m_varBookmark;
int m_nEditStatus;
CString m_strLastError;
void dump_com_error(_com_error &e);
_RecordsetPtr m_pRecordset;
_CommandPtr m_pCmd;
CString m_strQuery;
};
#endif
//
// MODULE: Ado.cpp
//
// AUTHOR: Carlos Antollini
//
// Date: 6/18/2001
//
// Version 1.2
//
#include "ado.h"
#include <afxdisp.h>
DWORD CADODatabase::GetRecordCount(_RecordsetPtr m_pRs)
{
DWORD numRows = 0;
numRows = m_pRs->GetRecordCount();
if(numRows == -1)
{
if(m_pRs->EndOfFile != VARIANT_TRUE)
m_pRs->MoveFirst();
while(m_pRs->EndOfFile != VARIANT_TRUE)
{
numRows++;
m_pRs->MoveNext();
}
if(numRows > 0)
m_pRs->MoveFirst();
}
return numRows;
}
bool CADODatabase::Open(LPCTSTR lpstrConnection)
{
HRESULT hr = S_OK;
if(IsOpen())
Close();
if(strcmp(lpstrConnection, _T("")) != 0)
m_strConnection = lpstrConnection;
ASSERT(!m_strConnection.IsEmpty());
try
{
hr = m_pConnection->Open(_bstr_t(m_strConnection), "", "", NULL);
return hr == S_OK;
}
catch(_com_error &e)
{
dump_com_error(e);
}
return false;
}
void CADODatabase::dump_com_error(_com_error &e)
{
CString ErrorStr;
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
ErrorStr.Format( "CADODataBase ErrorntCode = %08lxntCode meaning = %sntSource = %sntDescription = %sn",
e.Error(), e.ErrorMessage(), (LPCSTR)bstrSource, (LPCSTR)bstrDescription );
m_strLastError = _T("Connection String = " + GetConnectionString() + 'n' + ErrorStr);
#ifdef _DEBUG
AfxMessageBox( ErrorStr, MB_OK | MB_ICONERROR );
#endif
}
bool CADODatabase::IsOpen()
{
if(m_pConnection )
return m_pConnection->GetState() != adStateClosed;
return false;
}
void CADODatabase::Close()
{
if(IsOpen())
m_pConnection->Close();
}
CADORecordset::CADORecordset(CADODatabase* pAdoDatabase)
{
m_pRecordset = NULL;
m_pCmd = NULL;
m_strQuery = _T("");
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pCmd.CreateInstance(__uuidof(Command));
m_nEditStatus = CADORecordset::dbEditNone;
m_nSearchDirection = CADORecordset::searchForward;
m_pConnection = pAdoDatabase->GetActiveConnection();
}
bool CADORecordset::Open(_ConnectionPtr mpdb, LPCTSTR lpstrExec, int nOption)
{
Close();
if(strcmp(lpstrExec, _T("")) != 0)
m_strQuery = lpstrExec;
ASSERT(!m_strQuery.IsEmpty());
m_strQuery.TrimLeft();
BOOL bIsSelect = m_strQuery.Mid(0, strlen("Select ")).CompareNoCase("select ") == 0;
try
{
m_pRecordset->CursorLocation = adUseClient;
if(bIsSelect || nOption == openQuery)
m_pRecordset->Open((LPCSTR)m_strQuery, _variant_t((IDispatch*)mpdb, true),
adOpenStatic, adLockOptimistic, adCmdUnknown);
else if(nOption == openTable)
m_pRecordset->Open((LPCSTR)m_strQuery, _variant_t((IDispatch*)mpdb, true),
adOpenDynamic, adLockOptimistic, adCmdTable);
else if(nOption == openStoredProc)
{
m_pCmd->ActiveConnection = mpdb;
m_pCmd->CommandText = _bstr_t(m_strQuery);
m_pCmd->CommandType = adCmdStoredProc;
m_pRecordset = m_pCmd->Execute(NULL, NULL, adCmdText);
}
else
{
TRACE( "Unknown parameter. %d", nOption);
return false;
}
}
catch(_com_error &e)
{
dump_com_error(e);
return false;
}
return m_pRecordset != NULL;
}
bool CADORecordset::Open(LPCTSTR lpstrExec, int nOption)
{
ASSERT(m_pConnection != NULL);
return Open(m_pConnection, lpstrExec, nOption);
}
bool CADORecordset::GetFieldValue(LPCTSTR lpFieldName, double& dbValue)
{
double val = (double)NULL;
_variant_t vtFld;
vtFld = m_pRecordset->Fields->GetItem(lpFieldName)->Value;
if(vtFld.vt != VT_NULL)
val = vtFld.dblVal;
dbValue = val;
return true;
}
bool CADORecordset::GetFieldValue(int nIndex, double& dbValue)
{
double val = (double)NULL;
_variant_t vtFld;
_variant_t vtIndex;
vtIndex.vt = VT_I2;
vtIndex.iVal = nIndex;
vtFld = m_pRecordset->Fields->GetItem(vtIndex)->Value;
if(vtFld.vt != VT_NULL)
val = vtFld.dblVal;
dbValue = val;
return true;
}
bool CADORecordset::GetFieldValue(LPCTSTR lpFieldName, long& lValue)
{
long val = (long)NULL;
_variant_t vtFld;
vtFld = m_pRecordset->Fields->GetItem(lpFieldName)->Value;
if(vtFld.vt != VT_NULL)
val = vtFld.lVal;
lValue = val;
return true;
}
bool CADORecordset::GetFieldValue(int nIndex, long& lValue)
{
long val = (long)NULL;
_variant_t vtFld;
_variant_t vtIndex;
vtIndex.vt = VT_I2;
vtIndex.iVal = nIndex;
vtFld = m_pRecordset->Fields->GetItem(vtIndex)->Value;
if(vtFld.vt != VT_NULL)
val = vtFld.lVal;
lValue = val;
return true;
}
bool CADORecordset::GetFieldValue(LPCTSTR lpFieldName, int& nValue)
{
int val = NULL;
_variant_t vtFld;
vtFld = m_pRecordset->Fields->GetItem(lpFieldName)->Value;
switch(vtFld.vt)
{
case VT_I2:
val = vtFld.iVal;
break;
case VT_BOOL:
val = vtFld.boolVal;
case VT_NULL:
case VT_EMPTY:
break;
default:
nValue = 0;
return false;
}
nValue = val;
return true;
}
bool CADORecordset::GetFieldValue(int nIndex, int& nValue)
{
int val = (int)NULL;
_variant_t vtFld;
_variant_t vtIndex;
vtIndex.vt = VT_I2;
vtIndex.iVal = nIndex;
vtFld = m_pRecordset->Fields->GetItem(vtIndex)->Value;
switch(vtFld.vt)
{
case VT_I2:
val = vtFld.iVal;
break;
case VT_NULL:
case VT_EMPTY:
val = 0;
break;
default:
return false;
}
nValue = val;
return true;
}
bool CADORecordset::GetFieldValue(LPCTSTR lpFieldName, CString& strValue)
{
CString str = _T("");
_variant_t vtFld;
vtFld = m_pRecordset->Fields->GetItem(lpFieldName)->Value;
switch(vtFld.vt)
{
case VT_BSTR:
str = vtFld.bstrVal;
break;
case VT_I4:
str = IntToStr(vtFld.iVal);
break;
case VT_DATE:
{
COleDateTime dt(vtFld);
str = dt.Format("%Y-%m-%d %H:%M:%S");
}
break;
case VT_EMPTY:
case VT_NULL:
break;
default:
strValue.Empty();
return false;
}
strValue = str;
return true;
}
bool CADORecordset::GetFieldValue(int nIndex, CString& strValue)
{
CString str = _T("");
_variant_t vtFld;
_variant_t vtIndex;
vtIndex.vt = VT_I2;
vtIndex.iVal = nIndex;
vtFld = m_pRecordset->Fields->GetItem(vtIndex)->Value;
switch(vtFld.vt)
{
case VT_BSTR:
str = vtFld.bstrVal;
break;
case VT_DATE:
{
COleDateTime dt(vtFld);
str = dt.Format("%Y-%m-%d %H:%M:%S");
}
break;
case VT_EMPTY:
case VT_NULL:
break;
default:
strValue.Empty();
return false;
}
strValue = str;
return true;
}
bool CADORecordset::GetFieldValue(LPCTSTR lpFieldName, COleDateTime& time)
{
_variant_t vtFld;
vtFld = m_pRecordset->Fields->GetItem(lpFieldName)->Value;
switch(vtFld.vt)
{
case VT_DATE:
{
COleDateTime dt(vtFld);
time = dt;
}
break;
case VT_EMPTY:
case VT_NULL:
break;
default:
return false;
}
return true;
}
bool CADORecordset::GetFieldValue(int nIndex, COleDateTime& time)
{
_variant_t vtFld;
_variant_t vtIndex;
vtIndex.vt = VT_I2;
vtIndex.iVal = nIndex;
vtFld = m_pRecordset->Fields->GetItem(vtIndex)->Value;
switch(vtFld.vt)
{
case VT_DATE:
{
COleDateTime dt(vtFld);
time = dt;
}
break;
case VT_EMPTY:
case VT_NULL:
break;
default:
return false;
}
return true;
}
bool CADORecordset::IsFieldNull(LPCTSTR lpFieldName)
{
_variant_t vtFld;
vtFld = m_pRecordset->Fields->GetItem(lpFieldName)->Value;
return vtFld.vt == VT_NULL;
}
bool CADORecordset::IsFieldNull(int nIndex)
{
_variant_t vtFld;
_variant_t vtIndex;
vtIndex.vt = VT_I2;
vtIndex.iVal = nIndex;
vtFld = m_pRecordset->Fields->GetItem(vtIndex)->Value;
return vtFld.vt == VT_NULL;
}
bool CADORecordset::IsFieldEmpty(LPCTSTR lpFieldName)
{
_variant_t vtFld;
vtFld = m_pRecordset->Fields->GetItem(lpFieldName)->Value;
return vtFld.vt == VT_EMPTY || vtFld.vt == VT_NULL;
}
bool CADORecordset::IsFieldEmpty(int nIndex)
{
_variant_t vtFld;
_variant_t vtIndex;
vtIndex.vt = VT_I2;
vtIndex.iVal = nIndex;
vtFld = m_pRecordset->Fields->GetItem(vtIndex)->Value;
return vtFld.vt == VT_EMPTY || vtFld.vt == VT_NULL;
}
DWORD CADORecordset::GetRecordCount()
{
DWORD nRows = 0;
nRows = m_pRecordset->GetRecordCount();
if(nRows == -1)
{
nRows = 0;
if(m_pRecordset->EndOfFile != VARIANT_TRUE)
m_pRecordset->MoveFirst();
while(m_pRecordset->EndOfFile != VARIANT_TRUE)
{
nRows++;
m_pRecordset->MoveNext();
}
if(nRows > 0)
m_pRecordset->MoveFirst();
}
return nRows;
}
bool CADORecordset::IsOpen()
{
if(m_pRecordset)
return m_pRecordset->GetState() != adStateClosed;
return false;
}
void CADORecordset::Close()
{
if(IsOpen())
m_pRecordset->Close();
}
bool CADODatabase::Execute(LPCTSTR lpstrExec)
{
ASSERT(m_pConnection != NULL);
ASSERT(strcmp(lpstrExec, _T("")) != 0);
try
{
m_pConnection->Execute(_bstr_t(lpstrExec), NULL, adExecuteNoRecords);
}
catch(_com_error &e)
{
dump_com_error(e);
}
return true;
}
bool CADORecordset::RecordBinding(CADORecordBinding &pAdoRecordBinding)
{
IADORecordBinding *picRs = NULL;
HRESULT hr;
//Open the binding interface.
if(FAILED(hr = m_pRecordset->QueryInterface(__uuidof(IADORecordBinding), (LPVOID*)&picRs )))
{
_com_issue_error(hr);
return false;
}
//Bind the recordset to class
if(FAILED( hr = picRs->BindToRecordset(&pAdoRecordBinding)))
{
_com_issue_error(hr);
return false;
}
return true;
}
void CADORecordset::dump_com_error(_com_error &e)
{
CString ErrorStr;
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
ErrorStr.Format( "CADORecordset ErrorntCode = %08lxntCode meaning = %sntSource = %sntDescription = %sn",
e.Error(), e.ErrorMessage(), (LPCSTR)bstrSource, (LPCSTR)bstrDescription );
m_strLastError = _T("Query = " + GetQuery() + 'n' + ErrorStr);
#ifdef _DEBUG
AfxMessageBox( ErrorStr, MB_OK | MB_ICONERROR );
#endif
}
bool CADORecordset::GetFieldInfo(LPCTSTR lpFieldName, CADOFieldInfo* fldInfo)
{
_variant_t vtFld;
strcpy(fldInfo->m_strName, (LPCTSTR)m_pRecordset->Fields->GetItem(lpFieldName)->GetName());
fldInfo->m_lSize = m_pRecordset->Fields->GetItem(lpFieldName)->GetActualSize();
fldInfo->m_lDefinedSize = m_pRecordset->Fields->GetItem(lpFieldName)->GetDefinedSize();
fldInfo->m_nType = m_pRecordset->Fields->GetItem(lpFieldName)->GetType();
fldInfo->m_lAttributes = m_pRecordset->Fields->GetItem(lpFieldName)->GetAttributes();
return true;
}
bool CADORecordset::GetFieldInfo(int nIndex, CADOFieldInfo* fldInfo)
{
_variant_t vtFld;
_variant_t vtIndex;
vtIndex.vt = VT_I2;
vtIndex.iVal = nIndex;
strcpy(fldInfo->m_strName, (LPCTSTR)m_pRecordset->Fields->GetItem(vtIndex)->GetName());
fldInfo->m_lSize = m_pRecordset->Fields->GetItem(vtIndex)->GetActualSize();
fldInfo->m_lDefinedSize = m_pRecordset->Fields->GetItem(vtIndex)->GetDefinedSize();
fldInfo->m_nType = m_pRecordset->Fields->GetItem(vtIndex)->GetType();
fldInfo->m_lAttributes = m_pRecordset->Fields->GetItem(vtIndex)->GetAttributes();
return true;
}
bool CADORecordset::GetChunk(LPCTSTR lpFieldName, CString& strValue)
{
CString str = _T("");
long lngSize, lngOffSet = 0;
_variant_t varChunk;
int ChunkSize = 100;
lngSize = m_pRecordset->Fields->GetItem(lpFieldName)->ActualSize;
str.Empty();
while(lngOffSet < lngSize)
{
varChunk = m_pRecordset->Fields->GetItem(lpFieldName)->GetChunk(ChunkSize);
str += varChunk.bstrVal;
lngOffSet += ChunkSize;
}
lngOffSet = 0;
strValue = str;
return TRUE;
}
CString CADORecordset::GetString(LPCTSTR lpCols, LPCTSTR lpRows, LPCTSTR lpNull, long numRows)
{
_bstr_t varOutput;
_bstr_t varNull("");
_bstr_t varCols("t");
_bstr_t varRows("r");
if(strlen(lpCols) != 0)
varCols = _bstr_t(lpCols);
if(strlen(lpRows) != 0)
varRows = _bstr_t(lpRows);
if(numRows == 0)
numRows =(long)GetRecordCount();
varOutput = m_pRecordset->GetString(adClipString, numRows, varCols, varRows, varNull);
return (LPCTSTR)varOutput;
}
CString IntToStr(int nVal)
{
CString strRet;
char buff[10];
itoa(nVal, buff, 10);
strRet = buff;
return strRet;
}
CString LongToStr(long lVal)
{
CString strRet;
char buff[20];
ltoa(lVal, buff, 10);
strRet = buff;
return strRet;
}
void CADORecordset::Edit()
{
m_nEditStatus = dbEdit;
}
bool CADORecordset::AddNew()
{
m_nEditStatus = dbEditNone;
if(m_pRecordset->AddNew() != S_OK)
return false;
m_nEditStatus = dbEditNew;
return true;
}
bool CADORecordset::Update()
{
bool bret = true;
if(m_nEditStatus != dbEditNone)
{
if(m_pRecordset->Update() != S_OK)
bret = false;
}
m_nEditStatus = dbEditNone;
return bret;
}
void CADORecordset::CancelUpdate()
{
m_pRecordset->CancelUpdate();
m_nEditStatus = dbEditNone;
}
bool CADORecordset::SetFieldValue(int nIndex, CString strValue)
{
_variant_t vtFld;
vtFld.vt = VT_BSTR;
vtFld.bstrVal = _bstr_t(strValue);
_variant_t vtIndex;
vtIndex.vt = VT_I2;
vtIndex.iVal = nIndex;
m_pRecordset->Fields->GetItem(vtIndex)->Value = _bstr_t(vtFld);//_bstr_t(strValue);
return true;
}
bool CADORecordset::SetFieldValue(LPCTSTR lpFieldName, CString strValue)
{
_variant_t vtFld;
vtFld.vt = VT_BSTR;
vtFld.bstrVal = _bstr_t(strValue);
m_pRecordset->Fields->GetItem(lpFieldName)->Value = _bstr_t(vtFld);//_bstr_t(strValue);
return true;
}
bool CADORecordset::SetFieldValue(int nIndex, int nValue)
{
_variant_t vtFld;
vtFld.vt = VT_I2;
vtFld.iVal = nValue;
_variant_t vtIndex;
vtIndex.vt = VT_I2;
vtIndex.iVal = nIndex;
m_pRecordset->Fields->GetItem(vtIndex)->Value = vtFld;
return true;
}
bool CADORecordset::SetFieldValue(LPCTSTR lpFieldName, int nValue)
{
_variant_t vtFld;
vtFld.vt = VT_I2;
vtFld.iVal = nValue;
m_pRecordset->Fields->GetItem(lpFieldName)->Value = vtFld;
return true;
}
bool CADORecordset::SetFieldValue(int nIndex, long lValue)
{
_variant_t vtFld;
vtFld.vt = VT_I4;
vtFld.lVal = lValue;
_variant_t vtIndex;
vtIndex.vt = VT_I2;
vtIndex.iVal = nIndex;
m_pRecordset->Fields->GetItem(vtIndex)->Value = vtFld;
return true;
}
bool CADORecordset::SetFieldValue(LPCTSTR lpFieldName, long lValue)
{
_variant_t vtFld;
vtFld.vt = VT_I4;
vtFld.lVal = lValue;
m_pRecordset->Fields->GetItem(lpFieldName)->Value = vtFld;
return true;
}
bool CADORecordset::SetFieldValue(int nIndex, double dblValue)
{
_variant_t vtFld;
vtFld.vt = VT_R8;
vtFld.dblVal = dblValue;
_variant_t vtIndex;
vtIndex.vt = VT_I2;
vtIndex.iVal = nIndex;
m_pRecordset->Fields->GetItem(vtIndex)->Value = vtFld;
return true;
}
bool CADORecordset::SetFieldValue(LPCTSTR lpFieldName, double dblValue)
{
_variant_t vtFld;
vtFld.vt = VT_R8;
vtFld.dblVal = dblValue;
m_pRecordset->Fields->GetItem(lpFieldName)->Value = vtFld;
return true;
}
bool CADORecordset::SetFieldValue(int nIndex, COleDateTime time)
{
_variant_t vtFld;
vtFld.vt = VT_DATE;
vtFld.date = time;
_variant_t vtIndex;
vtIndex.vt = VT_I2;
vtIndex.iVal = nIndex;
m_pRecordset->Fields->GetItem(vtIndex)->Value = vtFld;
return true;
}
bool CADORecordset::SetFieldValue(LPCTSTR lpFieldName, COleDateTime time)
{
_variant_t vtFld;
vtFld.vt = VT_DATE;
vtFld.date = time;
m_pRecordset->Fields->GetItem(lpFieldName)->Value = vtFld;
return true;
}
bool CADORecordset::SetBookmark()
{
if(m_varBookmark.vt != VT_EMPTY)
{
m_pRecordset->Bookmark = m_varBookmark;
return true;
}
return false;
}
bool CADORecordset::Delete()
{
if(m_pRecordset->Delete(adAffectCurrent) != S_OK)
return false;
if(m_pRecordset->Update() != S_OK)
return false;
return true;
}
bool CADORecordset::Find(LPCTSTR lpFind, int nSearchDirection)
{
m_strFind = lpFind;
m_nSearchDirection = nSearchDirection;
ASSERT(!m_strFind.IsEmpty());
if(m_nSearchDirection == searchForward)
{
m_pRecordset->Find(_bstr_t(m_strFind), 0, adSearchForward, "");
if(!IsEof())
{
m_varBookFind = m_pRecordset->Bookmark;
return true;
}
}
else if(m_nSearchDirection == searchBackward)
{
m_pRecordset->Find(_bstr_t(m_strFind), 0, adSearchBackward, "");
if(!IsBof())
{
m_varBookFind = m_pRecordset->Bookmark;
return true;
}
}
else
{
TRACE("Unknown parameter. %d", nSearchDirection);
m_nSearchDirection = searchForward;
}
return false;
}
bool CADORecordset::FindFirst(LPCTSTR lpFind)
{
m_pRecordset->MoveFirst();
return Find(lpFind);
}
bool CADORecordset::FindNext()
{
if(m_nSearchDirection == searchForward)
{
m_pRecordset->Find(_bstr_t(m_strFind), 1, adSearchForward, m_varBookFind);
if(!IsEof())
{
m_varBookFind = m_pRecordset->Bookmark;
return true;
}
}
else
{
m_pRecordset->Find(_bstr_t(m_strFind), 1, adSearchBackward, m_varBookFind);
if(!IsBof())
{
m_varBookFind = m_pRecordset->Bookmark;
return true;
}
}
return false;
}
/*
//查询
CADODatabase* pAdoDb = new CADODatabase();
CString sConnetionString = "Provider=SQLOLEDB.1;Password=evertop;Persist Security Info=True;User ID=sa;Initial Catalog=DataManage;Data Source=127.0.0.1";
CADODatabase * pDB =new CADODatabase();//
pDB->Open(_T(sConnetionString));
BOOL bOpened= pDB->IsOpen();
CADORecordset * pdst =new CADORecordset(pDB);
if (bOpened)
{
pdst->Close();
pdst->Open(_T("SELECT *FROM [DataManage].[dbo].[NIBP]"));
while(!pdst->IsEof())
{
CString strMsgText;
pdst->GetFieldValue("SZY",strMsgText);
MessageBox(strMsgText);
pdst->MoveNext();
}
}
delete pdst;
delete pDB;
//-----------------------------------------------------------------------
CString sConnetionString = "Provider=SQLOLEDB.1;Password=evertop;Persist Security Info=True;User ID=sa;Initial Catalog=DataManage;Data Source=127.0.0.1";
CADODatabase * pDB =new CADODatabase();//
pDB->Open(_T(sConnetionString));
CString strSQL = " INSERT INTO NIBP (SSY,SZY) VALUES ('80', '90')";
pDB->BeginTransaction();
try
{
pDB->Execute(strSQL);
pDB->CommitTransaction();
}
catch (CMemoryException* e)
{
pDB->RollbackTransaction();
}
catch (CFileException* e)
{
pDB->RollbackTransaction();
}
catch (CException* e)
{
pDB->RollbackTransaction();
}
delete pDB;