用到的库#include "TCHAR.h"-----------------------------头文件开始------------------------------
//在实际应用中,根据自己情况决定使用方法
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","ADOEOF")
//#import "msado15.dll" no_namespace rename("EOF","ADOEOF")///////////////////////////////////////////////////////////////////////////////////////////////////////
/*
//加载COM库
::CoInitialize(NULL); //卸载COM库
::CoUninitialize();
*////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 示例:
// DataConnection 进行数据库连接。反回连接值 (真:表示成功,假:表示失败)
// DataConnection obj; //创建一个类对象
// obj.Create(); //创建一个连接对象
// SQL数据库连接
// CString dbString = "Provider=SQLOLEDB;Initial Catalog=DB;User ID=sa;Password=sa;Data Source=(local)";
// ACCESS 数据库连接
// CString dbString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db2.mdb;User ID=admin;Password=;
// Jet OLEDB:Database Password=123";(接上一行的,这里怎自动换行了)
// oracle 数据库连接
// CString dbString = "Provider=OraOLEDB.Oracle.1;Data Source=workflow;User ID=user;Password=pw";
// ODBC 数据源
// CString dbString = "Data Source=adotest;UID=sa;PWD=sa";
// obj.Open(dbString);//进行数据库连接
// obj.GetConnectionPtr(void);//取得数据连接值
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class CfAdoConnection
{
public:
CfAdoConnection(void);
CfAdoConnection(LPCTSTR lpDBpath);
public:
virtual ~CfAdoConnection(void);
protected:
_ConnectionPtr m_hConnPtr;
public:
BOOL Create();
/*
enum ConnectModeEnum
{
adModeUnknown = 0, //缺省。当前的许可权未设置
adModeRead = 1, // 只读
adModeWrite = 2, // 只写
adModeReadWrite = 3, //可以读写
adModeShareDenyRead = 4, //阻止其它Connection对象以读权限打开连接
adModeShareDenyWrite = 8, //阻止其它Connection对象以写权限打开连接
adModeShareExclusive = 12, //阻止其它Connection对象打开连接
adModeShareDenyNone = 16, //允许其它程序或对象以任何权限建立连接
adModeRecursive = 4194304
};
*/
virtual BOOL Open(LPCTSTR lpDBpath,LONG lConnectMode = 0);
virtual BOOL Open(LPCTSTR lpDBpath,LPCTSTR lpUserID,LPCTSTR lpPassword,LONG lConnectMode = 0 );
BOOL IsCreate();
BOOL IsOpen();
public:
_ConnectionPtr GetConnectionPtr(void);
public:
virtual void SetTimeOut(LONG lTimeout);
public:
virtual BOOL Close();
virtual BOOL Release();
public:
};
/////////////////////////////////////////////////////////////////////////////////////////////////////
class CfAdoRecordset
{
public:
CfAdoRecordset();
CfAdoRecordset(_ConnectionPtr pConnection);
virtual ~CfAdoRecordset();
protected:
_RecordsetPtr m_hRecPtr;
_ConnectionPtr m_hConnPtr;
public:
BOOL Create();
/*
enum CursorTypeEnum
{
adOpenUnspecified = -1,
adOpenForwardOnly = 0, //只能用MoveNext读取,并且打开的同时建立的数据库的备份,不能即时体现数据库记录状态,比如记录的编辑和增删.
adOpenKeyset = 1, //'可上下滚动的游标,给打开的记录创建了一个关键字列表,类似记录集的描述,访问的时候才去取得数据值,
//就是说可以即时看到修改信息,但是不能即时得到数据是否删除的信息,因为这个关键字列表是事先初始化好的.
adOpenDynamic = 2, //'完全可滚动,可得到数据的最新状态,执行效率也会有所降低.
adOpenStatic = 3 // ' 完全可滚动,但是和adOpenKeyset类似,它先将数据库备份文件之后进行操作.可以断开数据库连接后继续使用.
};
*/
/*
enum LockTypeEnum
{
adLockUnspecified = -1,
adLockReadOnly = 1, //'只读锁,不能操作记录
adLockPessimistic = 2, //'悲观锁,操作者打开之后立即上锁,直到修改完成或者放弃修改为止,此时其他人无法编辑.
adLockOptimistic = 3, //'乐观锁,当记录将要被更新的时候才开始上锁,但是不能保证在提交修改之前是否有人改动过.
adLockBatchOptimistic = 4 //'批量乐观锁,SQL server中要使用它,必须打开一个可上下滚动的游标,如adOpenKeyset,adOpenStatic.
};
*/
/*
enum CommandTypeEnum
{
adCmdUnspecified = -1,
adCmdUnknown = 8,
adCmdText = 1,
adCmdTable = 2,
adCmdStoredProc = 4,
adCmdFile = 256,
adCmdTableDirect = 512
};
*/ BOOL Open(_ConnectionPtr pConnection,LPCTSTR lpszCmd,int nCursorType = 2 ,int nLockType = 3 ,int nCommandType = 1 );
BOOL Open(LPCTSTR lpszCmd,int nCfrsorType = 2 ,int nLockType = 3 ,int nCommandType = 1 );
BOOL IsCreate();
BOOL IsOpen();
public:
BOOL Read(const _variant_t & Index,_variant_t & pvar);
BOOL Read(LPCTSTR lpszField,_variant_t & pvar);
BOOL Write(const _variant_t & Index,const _variant_t & pvar);
BOOL Write(LPCTSTR lpszField,const _variant_t & pvar);public:
BOOL Read(LPCTSTR lpszField,PTCHAR szData,int nlen,int &nRelen);#ifdef _AFX
BOOL Read(LPCTSTR lpszField,CString &csData);
#endif BOOL Read(LPCTSTR lpszField,long &lData);
BOOL Read(LPCTSTR lpszField,int &iData);
BOOL Read(LPCTSTR lpszField,double &dData);
BOOL Read(LPCTSTR lpszField,float &fData);
BOOL Write(LPCTSTR lpszField,LPCTSTR szPrompt, ...);public:
BOOL WriteBit(LPCTSTR lpszField,PVOID lpData,int nlen);
BOOL WriteBitFromFile(LPCTSTR lpszField,LPCTSTR lpFileName);
BOOL ReadBit(LPCTSTR lpszField,PVOID lpData,int nlen,int &nRelen);
BOOL ReadBitToFile(LPCTSTR lpszField,LPCTSTR lpFileName);public:
BOOL MoveNext();
BOOL MoveFirst();
BOOL MoveLast();
BOOL IsBegin();
BOOL IsEnd();
public:
BOOL New();
BOOL Del();
BOOL Update();
BOOL Close();
BOOL Release();
public:
UINT GetContentSize(LPCTSTR lpszField);
protected:
BOOL CharToVariant( variant_t &varBinaryData, LPBYTE pDataBuffer, long nBufferLength );
BOOL VariantToChar( LPBYTE pDataBuffer,variant_t &varBinaryData, long nBufferLength );};-----------------------------头文件结束------------------------------
//在实际应用中,根据自己情况决定使用方法
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","ADOEOF")
//#import "msado15.dll" no_namespace rename("EOF","ADOEOF")///////////////////////////////////////////////////////////////////////////////////////////////////////
/*
//加载COM库
::CoInitialize(NULL); //卸载COM库
::CoUninitialize();
*////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 示例:
// DataConnection 进行数据库连接。反回连接值 (真:表示成功,假:表示失败)
// DataConnection obj; //创建一个类对象
// obj.Create(); //创建一个连接对象
// SQL数据库连接
// CString dbString = "Provider=SQLOLEDB;Initial Catalog=DB;User ID=sa;Password=sa;Data Source=(local)";
// ACCESS 数据库连接
// CString dbString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db2.mdb;User ID=admin;Password=;
// Jet OLEDB:Database Password=123";(接上一行的,这里怎自动换行了)
// oracle 数据库连接
// CString dbString = "Provider=OraOLEDB.Oracle.1;Data Source=workflow;User ID=user;Password=pw";
// ODBC 数据源
// CString dbString = "Data Source=adotest;UID=sa;PWD=sa";
// obj.Open(dbString);//进行数据库连接
// obj.GetConnectionPtr(void);//取得数据连接值
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class CfAdoConnection
{
public:
CfAdoConnection(void);
CfAdoConnection(LPCTSTR lpDBpath);
public:
virtual ~CfAdoConnection(void);
protected:
_ConnectionPtr m_hConnPtr;
public:
BOOL Create();
/*
enum ConnectModeEnum
{
adModeUnknown = 0, //缺省。当前的许可权未设置
adModeRead = 1, // 只读
adModeWrite = 2, // 只写
adModeReadWrite = 3, //可以读写
adModeShareDenyRead = 4, //阻止其它Connection对象以读权限打开连接
adModeShareDenyWrite = 8, //阻止其它Connection对象以写权限打开连接
adModeShareExclusive = 12, //阻止其它Connection对象打开连接
adModeShareDenyNone = 16, //允许其它程序或对象以任何权限建立连接
adModeRecursive = 4194304
};
*/
virtual BOOL Open(LPCTSTR lpDBpath,LONG lConnectMode = 0);
virtual BOOL Open(LPCTSTR lpDBpath,LPCTSTR lpUserID,LPCTSTR lpPassword,LONG lConnectMode = 0 );
BOOL IsCreate();
BOOL IsOpen();
public:
_ConnectionPtr GetConnectionPtr(void);
public:
virtual void SetTimeOut(LONG lTimeout);
public:
virtual BOOL Close();
virtual BOOL Release();
public:
};
/////////////////////////////////////////////////////////////////////////////////////////////////////
class CfAdoRecordset
{
public:
CfAdoRecordset();
CfAdoRecordset(_ConnectionPtr pConnection);
virtual ~CfAdoRecordset();
protected:
_RecordsetPtr m_hRecPtr;
_ConnectionPtr m_hConnPtr;
public:
BOOL Create();
/*
enum CursorTypeEnum
{
adOpenUnspecified = -1,
adOpenForwardOnly = 0, //只能用MoveNext读取,并且打开的同时建立的数据库的备份,不能即时体现数据库记录状态,比如记录的编辑和增删.
adOpenKeyset = 1, //'可上下滚动的游标,给打开的记录创建了一个关键字列表,类似记录集的描述,访问的时候才去取得数据值,
//就是说可以即时看到修改信息,但是不能即时得到数据是否删除的信息,因为这个关键字列表是事先初始化好的.
adOpenDynamic = 2, //'完全可滚动,可得到数据的最新状态,执行效率也会有所降低.
adOpenStatic = 3 // ' 完全可滚动,但是和adOpenKeyset类似,它先将数据库备份文件之后进行操作.可以断开数据库连接后继续使用.
};
*/
/*
enum LockTypeEnum
{
adLockUnspecified = -1,
adLockReadOnly = 1, //'只读锁,不能操作记录
adLockPessimistic = 2, //'悲观锁,操作者打开之后立即上锁,直到修改完成或者放弃修改为止,此时其他人无法编辑.
adLockOptimistic = 3, //'乐观锁,当记录将要被更新的时候才开始上锁,但是不能保证在提交修改之前是否有人改动过.
adLockBatchOptimistic = 4 //'批量乐观锁,SQL server中要使用它,必须打开一个可上下滚动的游标,如adOpenKeyset,adOpenStatic.
};
*/
/*
enum CommandTypeEnum
{
adCmdUnspecified = -1,
adCmdUnknown = 8,
adCmdText = 1,
adCmdTable = 2,
adCmdStoredProc = 4,
adCmdFile = 256,
adCmdTableDirect = 512
};
*/ BOOL Open(_ConnectionPtr pConnection,LPCTSTR lpszCmd,int nCursorType = 2 ,int nLockType = 3 ,int nCommandType = 1 );
BOOL Open(LPCTSTR lpszCmd,int nCfrsorType = 2 ,int nLockType = 3 ,int nCommandType = 1 );
BOOL IsCreate();
BOOL IsOpen();
public:
BOOL Read(const _variant_t & Index,_variant_t & pvar);
BOOL Read(LPCTSTR lpszField,_variant_t & pvar);
BOOL Write(const _variant_t & Index,const _variant_t & pvar);
BOOL Write(LPCTSTR lpszField,const _variant_t & pvar);public:
BOOL Read(LPCTSTR lpszField,PTCHAR szData,int nlen,int &nRelen);#ifdef _AFX
BOOL Read(LPCTSTR lpszField,CString &csData);
#endif BOOL Read(LPCTSTR lpszField,long &lData);
BOOL Read(LPCTSTR lpszField,int &iData);
BOOL Read(LPCTSTR lpszField,double &dData);
BOOL Read(LPCTSTR lpszField,float &fData);
BOOL Write(LPCTSTR lpszField,LPCTSTR szPrompt, ...);public:
BOOL WriteBit(LPCTSTR lpszField,PVOID lpData,int nlen);
BOOL WriteBitFromFile(LPCTSTR lpszField,LPCTSTR lpFileName);
BOOL ReadBit(LPCTSTR lpszField,PVOID lpData,int nlen,int &nRelen);
BOOL ReadBitToFile(LPCTSTR lpszField,LPCTSTR lpFileName);public:
BOOL MoveNext();
BOOL MoveFirst();
BOOL MoveLast();
BOOL IsBegin();
BOOL IsEnd();
public:
BOOL New();
BOOL Del();
BOOL Update();
BOOL Close();
BOOL Release();
public:
UINT GetContentSize(LPCTSTR lpszField);
protected:
BOOL CharToVariant( variant_t &varBinaryData, LPBYTE pDataBuffer, long nBufferLength );
BOOL VariantToChar( LPBYTE pDataBuffer,variant_t &varBinaryData, long nBufferLength );};-----------------------------头文件结束------------------------------
-----------------------------源文件开始------------------------------
#pragma warning (disable:4996 4101)
CfAdoConnection::CfAdoConnection(void)
{
m_hConnPtr = NULL;
}
CfAdoConnection::~CfAdoConnection(void)
{
Close();
Release();}
BOOL CfAdoConnection::Create()
{
BOOL bResult = FALSE;
try
{
///创建Connection对象
bResult = SUCCEEDED(m_hConnPtr.CreateInstance(_T("ADODB.Connection")));
}
catch(_com_error &e)
{
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ }
return bResult;
}
BOOL CfAdoConnection::Open(LPCTSTR lpszDBpath,LONG lConnectMode /*= ModeUnknown*/ )
{
BOOL bResult = FALSE; // try
{ ///连接数据库
bResult = SUCCEEDED(m_hConnPtr->Open(_bstr_t(lpszDBpath),"","",lConnectMode)); }
catch(_com_error &e)
{
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ } return bResult;
}
BOOL CfAdoConnection::Open(LPCTSTR lpszDBpath,LPCTSTR lpszUserID,LPCTSTR lpszPassword,LONG lConnectMode /*= ModeUnknown*/ )
{
BOOL bResult = FALSE; try
{ ///连接数据库 bResult = SUCCEEDED( m_hConnPtr->Open(_bstr_t(lpszDBpath),_bstr_t(lpszUserID),_bstr_t(lpszPassword),lConnectMode) );
}
catch(_com_error &e)
{
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ } return bResult;
}
BOOL CfAdoConnection::IsCreate()
{
//
return (m_hConnPtr !=NULL);
}
BOOL CfAdoConnection::IsOpen()
{
//
return (m_hConnPtr !=NULL && m_hConnPtr->State == adStateOpen);
}
BOOL CfAdoConnection::Close()
{
BOOL bResult = FALSE; // try
{
if(IsOpen())
{
bResult = SUCCEEDED( m_hConnPtr->Close());
}
}
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ }
return bResult ;
}
BOOL CfAdoConnection::Release()
{
BOOL bResult = FALSE; // try
{
if ( IsOpen() )
{
Close();
} if( IsCreate() )
{
m_hConnPtr.Release();
m_hConnPtr =NULL;
bResult = TRUE;
} }
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ } return bResult;
}
void CfAdoConnection::SetTimeOut(LONG lTimeout)
{
//
if( IsCreate() )
m_hConnPtr->ConnectionTimeout=lTimeout;
}
_ConnectionPtr CfAdoConnection::GetConnectionPtr()
{
return m_hConnPtr;
}
-----------------------------源文件结束------------------------------
CfAdoRecordset::CfAdoRecordset(void)
{ m_hRecPtr=NULL;
}
CfAdoRecordset::CfAdoRecordset(_ConnectionPtr pConnection)
{
m_hRecPtr = NULL;
m_hConnPtr = pConnection;}
CfAdoRecordset::~CfAdoRecordset(void)
{
Close();
Release();
}
BOOL CfAdoRecordset::Create()
{ BOOL bResult = FALSE; // try
{
bResult = SUCCEEDED(m_hRecPtr.CreateInstance(_T("ADODB.Recordset")));
}
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ }
return bResult;}
BOOL CfAdoRecordset::Open(_ConnectionPtr pConnection,LPCTSTR lpszCmd,
int nCfrsorType /*= OpenDynamic*/,int nLockType /*= LockOptimistic*/,int nCommandType /*= CmdText*/)
{
m_hConnPtr=pConnection; return Open(lpszCmd,nCfrsorType,nLockType,nCommandType);
}BOOL CfAdoRecordset::Open(LPCTSTR lpszCmd,
int nCursorType /*= OpenDynamic*/,int nLockType /*= LockOptimistic*/,int nCommandType /*= CmdText*/)
{
BOOL bResult = FALSE; // try
{
bResult = SUCCEEDED( m_hRecPtr->Open(_bstr_t(lpszCmd),m_hConnPtr.GetInterfacePtr(),
(CursorTypeEnum)nCursorType,(LockTypeEnum)nLockType,nCommandType) ); }
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ }
return bResult;
}
BOOL CfAdoRecordset::IsCreate()
{
// return (m_hRecPtr != NULL);
}
BOOL CfAdoRecordset::IsOpen()
{
//
return (m_hRecPtr != NULL && m_hRecPtr->State == adStateOpen );
}
BOOL CfAdoRecordset::Read(const _variant_t & Index,_variant_t & pvar)
{
//
BOOL bResult = FALSE;
try
{ if( IsOpen() )
{
pvar = m_hRecPtr->GetCollect(Index);
bResult = TRUE;
}
}
catch (_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{
}
return bResult;
}
BOOL CfAdoRecordset::Write(const _variant_t & Index,const _variant_t & pvar)
{
BOOL bResult = FALSE; // try
{
if( IsOpen() )
{
m_hRecPtr->PutCollect(Index,pvar);
bResult = TRUE;
}
}
catch (_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{
} return bResult;
}
BOOL CfAdoRecordset::Read(LPCTSTR lpszField,_variant_t & pvar)
{
return Read(_variant_t(lpszField),pvar);
}
BOOL CfAdoRecordset::Write(LPCTSTR lpszField,const _variant_t & pvar)
{
return Write(_variant_t(lpszField),pvar);
}
BOOL CfAdoRecordset::Read(LPCTSTR lpszField,PTCHAR szData,int nlen,int &nRelen)
{
BOOL bResult = FALSE; variant_t v; if( bResult = Read(lpszField,v) )
{
nRelen = min((int)_tcslen((PTCHAR)(_bstr_t)v),nlen);
_tcsncpy(szData,(( v.vt == VT_NULL || v.vt == VT_EMPTY )?_T(""):(PTCHAR)(_bstr_t)v),nRelen);
} return bResult;
}#ifdef _AFXBOOL CfAdoRecordset::Read(LPCTSTR lpszField,CString &csData)
{
BOOL bResult = FALSE;
variant_t v;
if( bResult = Read(lpszField,v) )
{
csData.Format(_T("%s"),( v.vt == VT_NULL || v.vt == VT_EMPTY )?_T(""):(TCHAR*)(_bstr_t)v);
}
return bResult;}#endifBOOL CfAdoRecordset::Read(LPCTSTR lpszField,long &lData)
{
BOOL bResult = FALSE;
variant_t v;
if( bResult = Read(lpszField,v) )
{ if( v.vt != VT_NULL && v.vt != VT_EMPTY )
{
lData =(long)v.lVal;
}
}
return bResult;
}
BOOL CfAdoRecordset::Read(LPCTSTR lpszField,int &iData)
{
BOOL bResult = FALSE;
variant_t v;
if( bResult = Read(lpszField,v) )
{ if( v.vt != VT_NULL && v.vt != VT_EMPTY)
{
iData =(int)v.iVal;
}
}
return bResult;
}
BOOL CfAdoRecordset::Read(LPCTSTR lpszField,double &dData)
{
BOOL bResult = FALSE;
variant_t v;
if( bResult = Read(lpszField,v) )
{ if( v.vt != VT_NULL && v.vt != VT_EMPTY )
{
dData =(double)v.dblVal;
}
}return bResult;}
BOOL CfAdoRecordset::Read(LPCTSTR lpszField,float &fData)
{
BOOL bResult = FALSE;
variant_t v;
if( bResult = Read(lpszField,v) )
{ if( v.vt != VT_NULL && v.vt != VT_EMPTY)
{
fData =(float)v.fltVal;
}
}
return bResult;}
BOOL CfAdoRecordset::Write(LPCTSTR lpszField,LPCTSTR szPrompt, ...)
{
BOOL bResult = FALSE; TCHAR szBuffer[8000]={0};///最大长度 va_list ap;
va_start(ap , szPrompt); _vsntprintf(szBuffer ,8000, szPrompt , ap); va_end(ap); bResult = Write(lpszField,_variant_t(szBuffer)); return bResult;
}
BOOL CfAdoRecordset::WriteBit(LPCTSTR lpszField,PVOID lpData,int nlen)
{
BOOL bResult = FALSE; variant_t v; if( CharToVariant(v,(BYTE*)lpData,nlen) )
bResult = Write(lpszField,v); return bResult;
}
BOOL CfAdoRecordset::WriteBitFromFile(LPCTSTR lpszField,LPCTSTR lpFileName)
{
BOOL bResult = FALSE; // try
{
_StreamPtr pstm(_uuidof(Stream));
_variant_t var(DISP_E_PARAMNOTFOUND,VT_ERROR);
pstm->PutType(adTypeBinary);
pstm->put_Mode(adModeReadWrite);//adModeReadWrite=3
pstm->raw_Open(var,adModeUnknown,adOpenStreamUnspecified,NULL,NULL); if( SUCCEEDED( pstm->LoadFromFile(_bstr_t(lpFileName) ) ) )
bResult = SUCCEEDED( Write(lpszField,pstm->Read(pstm->GetSize())) );
}
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage()); }
catch(...)
{ }
return bResult;}BOOL CfAdoRecordset::ReadBit(LPCTSTR lpszField,PVOID lpData,int nlen,int &nRelen)
{
//
BOOL bResult = FALSE;
try
{ variant_t v;
if( Read(lpszField,v) )
{
int nContentSize = GetContentSize(lpszField);
LPBYTE lpBuf=new BYTE[nContentSize];
if( lpBuf )
{
memset(lpBuf,0,nContentSize);
nRelen =min(nlen,nContentSize);
if( bResult = VariantToChar(lpBuf,v,nRelen) )
{
memcpy(lpData,lpBuf,nRelen);
}
delete []lpBuf;
lpBuf = NULL;
}
}
}
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ }
return bResult;
}BOOL CfAdoRecordset::ReadBitToFile(LPCTSTR lpszField,LPCTSTR lpFileName)
{
//
BOOL bResult = FALSE;
try
{ _StreamPtr pstm(_uuidof(Stream));
_variant_t var(DISP_E_PARAMNOTFOUND,VT_ERROR);
pstm->PutType(adTypeBinary);
pstm->put_Mode(adModeReadWrite);//adModeReadWrite=3
pstm->raw_Open(var,adModeUnknown,adOpenStreamUnspecified,NULL,NULL); //pstm->Write(m_hRecPtr->GetFields()->GetItem(_variant_t(fIeld))->Value);
variant_t v;
if( Read(lpszField,v) )
if( SUCCEEDED( pstm->Write( v ) ) )
bResult = SUCCEEDED(pstm->SaveToFile(_bstr_t(lpFileName),adSaveCreateOverWrite)); }
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ }
return bResult;}
BOOL CfAdoRecordset::MoveNext()
{
BOOL bResult = FALSE; // try
{
if( IsOpen() )
bResult = SUCCEEDED( m_hRecPtr->MoveNext() );
}
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ } return bResult;
}
BOOL CfAdoRecordset::MoveFirst()
{
BOOL bResult = FALSE; // try
{
if( IsOpen() )
bResult = SUCCEEDED( m_hRecPtr->MoveFirst() );
}
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ } return bResult;
}
BOOL CfAdoRecordset::MoveLast()
{
BOOL bResult = FALSE; // try
{
if( IsOpen() )
bResult = SUCCEEDED( m_hRecPtr->MoveLast() );
}
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ } return bResult;
}
BOOL CfAdoRecordset::IsBegin()
{
BOOL bResult = FALSE; // try
{
if( IsOpen() )
bResult = m_hRecPtr->BOF; }
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ }
return bResult;
}
BOOL CfAdoRecordset::IsEnd()
{
BOOL bResult = FALSE; // try
{
if( IsOpen() )
bResult = m_hRecPtr->ADOEOF; }
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ } return bResult;
}
BOOL CfAdoRecordset::New()
{
BOOL bResult = FALSE; // try
{
if( IsOpen() )
bResult = SUCCEEDED(m_hRecPtr->AddNew()); }
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage()); }
catch(...)
{ }
return bResult;
}
BOOL CfAdoRecordset::Del()
{
BOOL bResult = FALSE; // try
{
if( IsOpen() )
bResult = SUCCEEDED(m_hRecPtr->Delete(adAffectCurrent));
}
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ }
return bResult;
}
{
BOOL bResult = FALSE; // try
{
if( IsOpen() )
bResult = SUCCEEDED(m_hRecPtr->Update()); }
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ }
return bResult;
}
BOOL CfAdoRecordset::Close()
{
BOOL bResult = FALSE; // try
{
if( IsOpen())
bResult = SUCCEEDED(m_hRecPtr->Close()); }
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ }
return bResult;
}
BOOL CfAdoRecordset::Release()
{
BOOL bResult = FALSE; // try
{
Close(); if ( IsCreate() )
{
m_hRecPtr.Release();
m_hRecPtr =NULL; bResult = TRUE;
}
}
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ } return bResult;
}
UINT CfAdoRecordset::GetContentSize(LPCTSTR lpszField)
{
// UINT vl = 0; try
{
if( IsOpen() )
{
vl= m_hRecPtr->GetFields()->GetItem(_bstr_t(lpszField))->ActualSize;
} }
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ } return vl;
}BOOL CfAdoRecordset::CharToVariant( variant_t &varBinaryData, LPBYTE pDataBuffer, long nBufferLength )
{
BOOL bResult = FALSE; // try
{ if( pDataBuffer != NULL && nBufferLength > 0 )
{
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1]; rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nBufferLength;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound); ///创建SAFEARRAY对象
if( psa != NULL )
{
LPBYTE pArrayBuffer = NULL;
if( (SafeArrayAccessData( psa,(void **)&pArrayBuffer ) == S_OK) && pArrayBuffer != NULL )
{
memcpy( pArrayBuffer, pDataBuffer, nBufferLength );
varBinaryData.vt = VT_ARRAY | VT_UI1;
varBinaryData.parray = psa; bResult = TRUE;
}
SafeArrayUnaccessData (psa);
}
}
}
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ } return bResult;
}
BOOL CfAdoRecordset::VariantToChar( LPBYTE pDataBuffer,variant_t &varBinaryData, long nBufferLength )
{
BOOL bResult = FALSE; // try
{
if( varBinaryData.vt == (VT_ARRAY | VT_UI1))
{
LPBYTE pArrayBuffer = NULL; if(SafeArrayAccessData(varBinaryData.parray,(void **)&pArrayBuffer) == S_OK && pArrayBuffer != NULL )
{
memcpy( pDataBuffer, pArrayBuffer, nBufferLength ); bResult = TRUE;
}
SafeArrayUnaccessData (varBinaryData.parray);
} }
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ } return bResult;
}
{
BOOL bResult = FALSE; // try
{
if( IsOpen() )
bResult = SUCCEEDED(m_hRecPtr->Update()); }
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ }
return bResult;
}
BOOL CfAdoRecordset::Close()
{
BOOL bResult = FALSE; // try
{
if( IsOpen())
bResult = SUCCEEDED(m_hRecPtr->Close()); }
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ }
return bResult;
}
BOOL CfAdoRecordset::Release()
{
BOOL bResult = FALSE; // try
{
Close(); if ( IsCreate() )
{
m_hRecPtr.Release();
m_hRecPtr =NULL; bResult = TRUE;
}
}
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ } return bResult;
}
UINT CfAdoRecordset::GetContentSize(LPCTSTR lpszField)
{
// UINT vl = 0; try
{
if( IsOpen() )
{
vl= m_hRecPtr->GetFields()->GetItem(_bstr_t(lpszField))->ActualSize;
} }
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ } return vl;
}BOOL CfAdoRecordset::CharToVariant( variant_t &varBinaryData, LPBYTE pDataBuffer, long nBufferLength )
{
BOOL bResult = FALSE; // try
{ if( pDataBuffer != NULL && nBufferLength > 0 )
{
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1]; rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nBufferLength;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound); ///创建SAFEARRAY对象
if( psa != NULL )
{
LPBYTE pArrayBuffer = NULL;
if( (SafeArrayAccessData( psa,(void **)&pArrayBuffer ) == S_OK) && pArrayBuffer != NULL )
{
memcpy( pArrayBuffer, pDataBuffer, nBufferLength );
varBinaryData.vt = VT_ARRAY | VT_UI1;
varBinaryData.parray = psa; bResult = TRUE;
}
SafeArrayUnaccessData (psa);
}
}
}
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ } return bResult;
}
BOOL CfAdoRecordset::VariantToChar( LPBYTE pDataBuffer,variant_t &varBinaryData, long nBufferLength )
{
BOOL bResult = FALSE; // try
{
if( varBinaryData.vt == (VT_ARRAY | VT_UI1))
{
LPBYTE pArrayBuffer = NULL; if(SafeArrayAccessData(varBinaryData.parray,(void **)&pArrayBuffer) == S_OK && pArrayBuffer != NULL )
{
memcpy( pDataBuffer, pArrayBuffer, nBufferLength ); bResult = TRUE;
}
SafeArrayUnaccessData (varBinaryData.parray);
} }
catch(_com_error &e)
{
//
//fTrace(_T("%s"),e.ErrorMessage());
}
catch(...)
{ } return bResult;
}