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

📄 dyndb.cpp

📁 This article is based in part on Bob Place s ADO is AOK (a simple ADO tutorial). Wrapper Usage This
💻 CPP
字号:
// Dynadb.cpp: implementation of the CDynadb class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "AdoTest.h"
#include "Dyndb.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CDyndb::CDyndb()
{
	m_currid=0;
}

CDyndb::~CDyndb()
{
	this->CloseAll();
	m_recs.RemoveAll();
	this->CloseConn();
}

void CDyndb::OpenConn(CString sConnStr)
{
	m_pConnection.CreateInstance(__uuidof(Connection));
	m_pConnection->Open(sConnStr.GetBuffer(0),"","",-1);
}

void CDyndb::OpenRec(CString sSQL)
{
	_variant_t TheValue;
	CDynRec temprec;
	
	try
	{
		temprec.m_pRecordset->Open(_bstr_t(sSQL),m_pConnection.GetInterfacePtr(),
			adOpenDynamic,
			adLockOptimistic,
			adCmdText);
	}
	catch(_com_error *e)
	{
		AfxMessageBox(e->ErrorMessage());
	}
	catch(...)
	{
		AfxMessageBox("Unknown Error...");
	}
	temprec.m_id = m_currid;
	m_currid++;
	m_recs.AddTail(temprec);

	//temprec.m_pRecordset = NULL;
}

void CDyndb::CloseRec(long lid)
{
	POSITION pos;
	CDynRec temprec;

	pos=m_recs.GetHeadPosition();
	while(pos) {
		temprec=m_recs.GetNext(pos);
		if(temprec.m_id == lid) {
			if (temprec.m_pRecordset->GetState() == adStateOpen) 
				temprec.m_pRecordset->Close();
			return;
		}
	}
	TRACE0("ERROR : In function 'CloseRec'");
	ASSERT(0);
}


void CDyndb::CloseConn()
{
	if(m_pConnection->GetState() == adStateOpen)
		m_pConnection->Close();
	m_pConnection = NULL;

}

CDynRec CDyndb::GetRec(long lid)
{
	POSITION pos;
	CDynRec temprec;

	pos=m_recs.GetHeadPosition();
	while(pos) {
		temprec=m_recs.GetNext(pos);
		if(temprec.m_id == lid) return temprec;
	}
	
	TRACE0("ERROR : In function 'GetRec'");
	ASSERT(0);
	return temprec;

}

_variant_t CDyndb::GetFieldVal(long lid, CString sFieldName)
{
	POSITION pos;
	CDynRec temprec;
	_variant_t ret;

	pos=m_recs.GetHeadPosition();
	while(pos) {
		temprec=m_recs.GetNext(pos);
		if(temprec.m_id == lid) {
			ret = temprec.m_pRecordset->GetCollect(sFieldName.GetBuffer(0));
			return ret;
		}
	}
	TRACE0("ERROR : In function 'GetFieldVal'");
	ASSERT(0);
	return ret;
}


void CDyndb::CloseAll()
{
	POSITION pos;
	CDynRec temprec;

	pos=m_recs.GetHeadPosition();
	while(pos) {
		temprec=m_recs.GetNext(pos);
		if (temprec.m_pRecordset->GetState() == adStateOpen) 
			temprec.m_pRecordset->Close();
	}
}

long CDyndb::GetFieldCount(long lid)
{
	POSITION pos;
	CDynRec temprec;
	Fields *fFields;
		
	pos=m_recs.GetHeadPosition();
	while(pos) {
		temprec=m_recs.GetNext(pos);
		if(temprec.m_id == lid) {
			fFields=temprec.m_pRecordset->GetFields();
			return fFields->Count;
		}
	}
	TRACE0("ERROR : In function 'GetFieldVal'");
	ASSERT(0);
	return -1;
}

CString CDyndb::GetFieldName(long lid, long lFldIndex)
{
	POSITION pos;
	CDynRec temprec;
	Fields *fFields;
	Field *fField;
	CString name;
		
	pos=m_recs.GetHeadPosition();
	while(pos) {
		temprec=m_recs.GetNext(pos);
		if(temprec.m_id == lid) {
			fFields=temprec.m_pRecordset->GetFields();
			ASSERT(lFldIndex<fFields->Count); // There is no such a field index
			fField=fFields->GetItem(lFldIndex);
			name.Format("%s",(char*)_bstr_t(fField->GetName()));
			return name;
		}
	}
	TRACE0("ERROR : In function 'GetFieldVal'");
	ASSERT(0);
	return CString("<</EMPTY>>");
}

DataTypeEnum CDyndb::GetFieldType(long lid, long lFldIndex)
{
	POSITION pos;
	CDynRec temprec;
	Fields *fFields;
	Field *fField;
	CString name;
		
	pos=m_recs.GetHeadPosition();
	while(pos) {
		temprec=m_recs.GetNext(pos);
		if(temprec.m_id == lid) {
			fFields=temprec.m_pRecordset->GetFields();
			ASSERT(lFldIndex<fFields->Count); // There is no such a field index
			fField=fFields->GetItem(lFldIndex);
			return fField->Type;
		}
	}
	TRACE0("ERROR : In function 'GetFieldVal'");
	ASSERT(0);
	return adEmpty;
}

⌨️ 快捷键说明

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