📄 dyndb.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 + -