//-------------------------------------------------------------------
// VORecordset implementation
//-------------------------------------------------------------------
//
// Copyright ?000 Virtual Office Systems Incorporated
// All Rights Reserved
//
// This code may be used in compiled form in any way you desire. This
// file may be redistributed unmodified by any means PROVIDING it is
// not sold for profit without the authors written consent, and
// providing that this notice and the authors name is included.
//
// This code can be compiled, modified and distributed freely, providing
// that this copyright information remains intact in the distribution.
//
// This code may be compiled in original or modified form in any private
// or commercial application.
//
// This file is provided "as is" with no expressed or implied warranty.
// The author accepts no liability for any damage, in any form, caused
// by this code. Use it at your own risk.
//-------------------------------------------------------------------
#include "stdafx.h"
#include "vorecordset.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#ifndef TRACE
#define TRACE(s) OutputDebugString(s)
#endif
#else
#ifndef TRACE
#define TRACE(s)
#endif
#endif
const IID IID__Recordset = { 0x113033f6, 0xf682, 0x11d2, { 0xbb, 0x62, 0x00, 0xc0, 0x4f, 0x68, 0x0a, 0xcc}};
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
BOOL CVORecordset::g_Init = FALSE;
CLSID CVORecordset::g_ClsID;
TCHAR* CVORecordset::g_ProgID = TEXT("ADOCE.Recordset.3.1");
CVORecordset::CVORecordset(CVOConnection& rConn) : m_rConn(rConn), m_rs(NULL)
{
if(!g_Init)
Initialize();
HRESULT hr;
hr = CoCreateInstance(g_ClsID, NULL, CLSCTX_INPROC_SERVER, IID__Recordset, (LPVOID*)&m_rs);
VARIANT varConn;
// If Connection object is using CEDB instead of a .CDB filename, use it
// as a persistent connection. For .CDB filenames, each recordset Open()
// requires its own connection unfortunately.
if((_Connection*)m_rConn)
{
varConn.pdispVal = (_Connection*)m_rConn;
varConn.vt = VT_DISPATCH;
hr = m_rs->put_ActiveConnection(varConn);
}
}
CVORecordset::~CVORecordset()
{
Close();
if(m_rs)
m_rs->Release();
}
BOOL CVORecordset::Initialize()
{
HRESULT hr;
hr = CLSIDFromProgID( g_ProgID, &g_ClsID);
return(!FAILED(hr));
}
BOOL CVORecordset::Open(LPCTSTR pcszSource, enum CursorTypeEnum CursorType, enum LockTypeEnum LockType)
{
if(!m_rs)
{
TRACE(TEXT("CVORecordset::Open() RecordSet COM Object not initialized\n"));
return FALSE;
}
HRESULT hr;
if(IsOpen())
m_rs->Close();
hr = m_rs->Open(_variant_t(pcszSource), _variant_t( m_rConn.GetProvider() ), CursorType, LockType, adCmdUnknown);
/*
hr = m_rs->Open(_variant_t(pcszSource), _variant_t( TEXT("My Do***ents\\Employee.cdb") ), CursorType, LockType, adCmdUnknown);
其中的My Do***ents\\Employee.cdb就是数据库的存放路径及名称。
*/
m_fIsOpen = (!FAILED(hr));
if(m_fIsOpen)
{
m_rs->get_Fields(&m_Fields);
m_Fields->get_Count(&m_FldCnt);
}
return m_fIsOpen;
}
BOOL CVORecordset::Close()
{
if(!m_rs)
{
TRACE(TEXT("CVORecordset::Close() RecordSet COM Object not initialized\n"));
return FALSE;
}
if(IsOpen() )
{
m_rs->Close();
m_fIsOpen = FALSE;
}
return TRUE;
}
BOOL CVORecordset::IsBOF()
{
if(!m_rs)
{
TRACE(TEXT("CVORecordset::BOF() RecordSet COM Object not initialized\n"));
return FALSE;
}
VARIANT_BOOL fValue;
HRESULT hr = m_rs->get_BOF(&fValue);
return (fValue == VARIANT_TRUE);
}
BOOL CVORecordset::IsEOF()
{
if(!m_rs)
{
TRACE(TEXT("CVORecordset::EOF() RecordSet COM Object not initialized\n"));
return FALSE;
}
VARIANT_BOOL fValue;
HRESULT hr = m_rs->get_EOF(&fValue);
return (fValue == VARIANT_TRUE);
}
BOOL CVORecordset::MoveFirst()
{
if(!m_rs)
{
TRACE(TEXT("CVORecordset::MoveFirst() RecordSet COM Object not initialized\n"));
return FALSE;
}
HRESULT hr = m_rs->MoveFirst();
return (!FAILED(hr));
}
BOOL CVORecordset::MoveNext()
{
if(!m_rs)
{
TRACE(TEXT("CVORecordset::MoveNext() RecordSet COM Object not initialized\n"));
return FALSE;
}
HRESULT hr = m_rs->MoveNext();
return (!FAILED(hr));
}
Field* CVORecordset::GetField(int iField)
{
if(!m_rs)
{
TRACE(TEXT("CVORecordset::GetField() RecordSet COM Object not initialized\n"));
return NULL;
}
HRESULT hr = m_Fields->get_Item(_variant_t((long)iField), &m_Field);
if(FAILED(hr))
return NULL;
return m_Field;
}
LPCTSTR CVORecordset::GetFieldName(int iField)
{
if(!m_rs)
{
TRACE(TEXT("CVORecordset::GetFieldName() RecordSet COM Object not initialized\n"));
return NULL;
}
Field* pField = GetField(iField);
if(!pField)
{
TRACE(TEXT("CVORecordset::GetFieldName() Invalid Field Index\n"));
return NULL;
}
m_varFieldName = TEXT("Empty");
pField->get_Name(&m_varFieldName.bstrVal);
if(m_varFieldName.vt != VT_BSTR)
VariantChangeType(&m_varFieldName, &m_varFieldName, 0, VT_BSTR);
return m_varFieldName.bstrVal;
}
VARIANT CVORecordset::GetFieldValue(int iField)
{
if(!m_rs)
{
TRACE(TEXT("CVORecordset::GetFieldValue() RecordSet COM Object not initialized\n"));
return _variant_t(0L);
}
HRESULT hr;
m_varFieldValue = TEXT("Empty");
Field* pField = GetField(iField);
if(!pField)
{
TRACE(TEXT("CVORecordset::GetFieldValue() Invalid Field Index\n"));
return _variant_t(0L);
}
hr = pField->get_Value(&m_varFieldValue);
return m_varFieldValue;
}
LPCTSTR CVORecordset::GetFieldValueString(int iField)
{
if(!m_rs)
{
TRACE(TEXT("CVORecordset::GetFieldValueString() RecordSet COM Object not initialized\n"));
return NULL;
}
_variant_t value = GetFieldValue(iField);
m_varFieldValue = TEXT("Empty");
if(value.vt == VT_BSTR)
m_varFieldValue = value;
else
VariantChangeType(&m_varFieldValue, &value, 0, VT_BSTR);
return m_varFieldValue.bstrVal;
}
BOOL CVORecordset::SetFieldValue(int iField, VARIANT value)
{
if(!m_rs)
{
TRACE(TEXT("CVORecordset::SetFieldValue() RecordSet COM Object not initialized\n"));
return FALSE;
}
HRESULT hr;
Field* pField = GetField(iField);
if(!pField)
{
TRACE(TEXT("CVORecordset::SetFieldValue() Invalid Field Index\n"));
return FALSE;
}
pField = GetField(iField);
hr = pField->put_Value(value);
_variant_t varFieldName(GetFieldName(iField));
hr = m_rs->Update(varFieldName, value);
return !FAILED(hr);
}
BOOL CVORecordset::SetFieldValue(LPCTSTR pcszFieldName, VARIANT value)
{
if(!m_rs)
{
TRACE(TEXT("CVORecordset::SetFieldValue() RecordSet COM Object not initialized\n"));
return FALSE;
}
CVOString strFieldName(pcszFieldName);
for(int iFieldIndex = 0; iFieldIndex < GetFieldCount(); iFieldIndex++)
{
if(strFieldName == GetFieldName(iFieldIndex))
return SetFieldValue(iFieldIndex, value);
}
return FALSE;
}
BOOL CVORecordset::Delete()
{
if(!m_rs)
{
TRACE(TEXT("CVORecordset::SetFieldValue() RecordSet COM Object not initialized\n"));
return FALSE;
}
HRESULT hr;
hr = m_rs->Delete(1);
return !FAILED(hr);
}
没有合适的资源?快使用搜索试试~ 我知道了~
VoADO_source_file.rar
共6个文件
h:3个
cpp:3个
需积分: 3 26 下载量 196 浏览量
2009-05-25
12:04:59
上传
评论
收藏 7KB RAR 举报
温馨提示
voconnection vorecordset VOString三个类的.cpp和.h文件压缩包
资源推荐
资源详情
资源评论
收起资源包目录
VoADO_source_file.rar (6个子文件)
vorecordset.cpp 7KB
vorecordset.h 2KB
VOString.h 908B
voconnection.h 2KB
VOString.cpp 1KB
voconnection.cpp 4KB
共 6 条
- 1
资源评论
aurums
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功