⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vorecordset.cpp

📁 evc环境下的数据库查看器。可以查看表格和表格内的数据。
💻 CPP
字号:
// VORecordSet.cpp: implementation of the CVORecordSet class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "VORecordSet.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

#ifndef TRACE
#define TRACE(s) OutputDebugString(s)


#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);

	if(FAILED(hr))
	{
//		AfxMessageBox(_T("recordset failed"));
		CString info;
		info.Format(_T("%8x"), hr);
		AfxMessageBox(info);
		return;
	}

	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( m_rConn.GetProvider() ), CursorType, LockType, adCmdUnknown);

	m_fIsOpen = (!FAILED(hr));

	if(m_fIsOpen)
	{
		m_rs->get_Fields(&m_Fields);
		m_Fields->get_Count(&m_FldCnt);
	}
	else
	{
//		CString info;
//		info = pcszSource;
//		AfxMessageBox(_T("err : ") + info);

	}

	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));
}

BOOL CVORecordSet::MoveTo(int pos)
{
	if(!m_rs)
	{
		TRACE(TEXT("CVORecordSet::MoveNext() RecordSet COM Object not initialized\n"));
		return FALSE;
	}
/*	_variant_t bookmark;
	bookmark.vt=VT_I4;
	bookmark.lVal=adBookmarkFirst;
	HRESULT hr = m_rs->Move(pos,bookmark);
*/
	HRESULT hr = m_rs->put_AbsolutePosition(pos);

	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(""); // modified by wh from 'Empty' to ''

	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;
}

long CVORecordSet::GetRecordCount()
{
	if(!m_rs)
	{
		TRACE(TEXT("CVORecordset::GetRecordCount() RecordSet COM Object not initialized\n"));
		return 0;
	}
	
	long RecCnt = 0;
	HRESULT	hr = m_rs->get_RecordCount(&RecCnt);
	if( !FAILED(hr) )
		return RecCnt;
	
	return 0;
}

bool CVORecordSet::DropAllTables()
{

	return true;
}

bool CVORecordSet::GetAllTablesNames(CStringArray & tablenames)
{


	return true;
}

//////////////////////////////////////////////////////////////////////////
CMutexRecordSet::CMutexRecordSet(CVOConnection& rConn):CVORecordSet(rConn)
{
	InitializeCriticalSection(&m_CriticalSection);
}

CMutexRecordSet::~CMutexRecordSet()
{
	DeleteCriticalSection(&m_CriticalSection);
	
}

BOOL CMutexRecordSet::OpenMutex(LPCTSTR pcszSource, enum CursorTypeEnum CursorType /* = adOpenForwardOnly */, enum LockTypeEnum LockType /* = adLockReadOnly */)
{
	EnterCriticalSection(&m_CriticalSection);
	BOOL bResult = Open(pcszSource, CursorType, LockType);
	LeaveCriticalSection(&m_CriticalSection);
	return bResult;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -