亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? oledbrecordset.cpp

?? oledb封裝類仿MFC的CRecordset
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "StdAfx.h"
#include ".\dbkrnl.h"

COleDBRecordset::COleDBRecordset(void)
: m_pDatabase(NULL)
, m_nRowsCount(0)
, m_bIsBOF(FALSE)
, m_bIsEOF(FALSE)
, m_bIsOpen(FALSE)
, m_dwAddNewEdit(0)
, m_dwColumnsCount(0)
, m_dwColumns(0)
, m_hRow(NULL)
, m_hAccessor(NULL)
, m_pRowsBuffer(0)
, m_pColumnInfo(NULL)
, m_pBindingStatus(NULL)
, m_pColumnBinding(NULL)
, m_pAccessor(NULL)
, m_pRowset(NULL)
, m_pIRowsetChange(NULL)
, m_dwStatusReadonly(0)
, m_dwStatusReadWrite(0)
, m_bHasObject(FALSE)
, m_bOwnDatabase(FALSE)
, m_nTBLen(32)
, m_nFBLen(32)
, m_nSBLen(32)
, m_nHBLen(32)
{
	m_rgCmdPropSet[0].cProperties=20;
	m_rgCmdPropSet[0].guidPropertySet=DBPROPSET_ROWSET;
	m_rgCmdPropSet[0].rgProperties=new DBPROP[20];
	for(int i=0;i<20;i++)
	{
		::VariantInit(&m_rgCmdPropSet[0].rgProperties[i].vValue);
		m_rgCmdPropSet[0].rgProperties[i].dwOptions=DBPROPOPTIONS_OPTIONAL;
		m_rgCmdPropSet[0].rgProperties[i].colid=DB_NULLID;
	}
	m_rgCmdPropSet[0].rgProperties[0].dwPropertyID=DBPROP_IRowsetScroll;
	m_rgCmdPropSet[0].rgProperties[0].vValue.vt=VT_BOOL;
	m_rgCmdPropSet[0].rgProperties[0].vValue.boolVal=VARIANT_FALSE;

	m_rgCmdPropSet[0].rgProperties[1].dwPropertyID=DBPROP_SERVERCURSOR;
	m_rgCmdPropSet[0].rgProperties[1].vValue.vt=VT_BOOL;
	m_rgCmdPropSet[0].rgProperties[1].vValue.boolVal=VARIANT_TRUE;

	m_rgCmdPropSet[0].rgProperties[2].dwPropertyID=DBPROP_IRowsetChange;
	m_rgCmdPropSet[0].rgProperties[2].vValue.vt=VT_BOOL;
	m_rgCmdPropSet[0].rgProperties[2].vValue.boolVal=VARIANT_TRUE;

	m_rgCmdPropSet[0].rgProperties[3].dwPropertyID=DBPROP_IRowsetLocate;
	m_rgCmdPropSet[0].rgProperties[3].vValue.vt=VT_BOOL;
	m_rgCmdPropSet[0].rgProperties[3].vValue.boolVal=VARIANT_FALSE;

	m_rgCmdPropSet[0].rgProperties[4].dwPropertyID=DBPROP_IRowsetUpdate;
	m_rgCmdPropSet[0].rgProperties[4].vValue.vt=VT_BOOL;
	m_rgCmdPropSet[0].rgProperties[4].vValue.boolVal=VARIANT_FALSE;
	
	m_rgCmdPropSet[0].rgProperties[5].dwPropertyID=DBPROP_BOOKMARKS;
	m_rgCmdPropSet[0].rgProperties[5].vValue.vt=VT_BOOL;
	m_rgCmdPropSet[0].rgProperties[5].vValue.boolVal=VARIANT_FALSE;
	
	m_rgCmdPropSet[0].rgProperties[6].dwPropertyID=DBPROP_CANFETCHBACKWARDS;
	m_rgCmdPropSet[0].rgProperties[6].vValue.vt=VT_BOOL;
	m_rgCmdPropSet[0].rgProperties[6].vValue.boolVal=VARIANT_TRUE;

	m_rgCmdPropSet[0].rgProperties[7].dwPropertyID=DBPROP_BOOKMARKS;
	m_rgCmdPropSet[0].rgProperties[7].vValue.vt=VT_BOOL;
	m_rgCmdPropSet[0].rgProperties[7].vValue.boolVal=VARIANT_FALSE;
	
	m_rgCmdPropSet[0].rgProperties[8].dwPropertyID=DBPROP_CANHOLDROWS;
	m_rgCmdPropSet[0].rgProperties[8].vValue.vt=VT_BOOL;
	m_rgCmdPropSet[0].rgProperties[8].vValue.boolVal=VARIANT_FALSE;
	
	m_rgCmdPropSet[0].rgProperties[9].dwPropertyID=DBPROP_LITERALBOOKMARKS;
	m_rgCmdPropSet[0].rgProperties[9].vValue.vt=VT_BOOL;
	m_rgCmdPropSet[0].rgProperties[9].vValue.boolVal=VARIANT_FALSE;
	
	m_rgCmdPropSet[0].rgProperties[10].dwPropertyID=DBPROP_OTHERINSERT;
	m_rgCmdPropSet[0].rgProperties[10].vValue.vt=VT_BOOL;
	m_rgCmdPropSet[0].rgProperties[10].vValue.boolVal=VARIANT_TRUE;

	m_rgCmdPropSet[0].rgProperties[11].dwPropertyID=DBPROP_OTHERUPDATEDELETE;
	m_rgCmdPropSet[0].rgProperties[11].vValue.vt=VT_BOOL;
	m_rgCmdPropSet[0].rgProperties[11].vValue.boolVal=VARIANT_TRUE;

	m_rgCmdPropSet[0].rgProperties[12].dwPropertyID=DBPROP_OWNINSERT;
	m_rgCmdPropSet[0].rgProperties[12].vValue.vt=VT_BOOL;
	m_rgCmdPropSet[0].rgProperties[12].vValue.boolVal=VARIANT_TRUE;

	m_rgCmdPropSet[0].rgProperties[13].dwPropertyID=DBPROP_OWNUPDATEDELETE;
	m_rgCmdPropSet[0].rgProperties[13].vValue.vt=VT_BOOL;
	m_rgCmdPropSet[0].rgProperties[13].vValue.boolVal=VARIANT_TRUE;

	m_rgCmdPropSet[0].rgProperties[14].dwPropertyID=DBPROP_REMOVEDELETED;
	m_rgCmdPropSet[0].rgProperties[14].vValue.vt=VT_BOOL;
	m_rgCmdPropSet[0].rgProperties[14].vValue.boolVal=VARIANT_TRUE;

	m_rgCmdPropSet[0].rgProperties[15].dwPropertyID=DBPROP_CHANGEINSERTEDROWS;
	m_rgCmdPropSet[0].rgProperties[15].vValue.vt=VT_BOOL;
	m_rgCmdPropSet[0].rgProperties[15].vValue.boolVal=VARIANT_FALSE;
	
	m_rgCmdPropSet[0].rgProperties[16].dwPropertyID=DBPROP_SERVERDATAONINSERT;
	m_rgCmdPropSet[0].rgProperties[16].vValue.vt=VT_BOOL;
	m_rgCmdPropSet[0].rgProperties[16].vValue.boolVal=VARIANT_FALSE;
	
	m_rgCmdPropSet[0].rgProperties[17].dwPropertyID=DBPROP_UNIQUEROWS;
	m_rgCmdPropSet[0].rgProperties[17].vValue.vt=VT_BOOL;
	m_rgCmdPropSet[0].rgProperties[17].vValue.boolVal=VARIANT_FALSE;
	
	m_rgCmdPropSet[0].rgProperties[18].dwPropertyID=DBPROP_IMMOBILEROWS;
	m_rgCmdPropSet[0].rgProperties[18].vValue.vt=VT_BOOL;
	m_rgCmdPropSet[0].rgProperties[18].vValue.boolVal=VARIANT_FALSE;
	
	m_rgCmdPropSet[0].rgProperties[19].dwPropertyID=DBPROP_UPDATABILITY;
	m_rgCmdPropSet[0].rgProperties[19].vValue.vt=VT_I4;
	m_rgCmdPropSet[0].rgProperties[19].vValue.lVal=(long)DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE;
	m_ObjectStruct.dwFlags=STGM_READ;
	m_ObjectStruct.iid=IID_ISequentialStream;
	m_strFilter=new WCHAR[m_nFBLen];
	m_strFilter[0]=0;
    m_strSort=new WCHAR[m_nSBLen];
	m_strSort[0]=0;
	m_strTable=new WCHAR[m_nTBLen];
	m_strTable[0]=0;
	m_strHalfSQLStatement=new WCHAR[m_nHBLen];
	m_strHalfSQLStatement[0]=0;

}

COleDBRecordset::~COleDBRecordset(void)
{
	if(m_bIsOpen)
		Close();
	delete[] m_rgCmdPropSet[0].rgProperties;
	delete[] m_strFilter;
    delete[] m_strSort;
	delete[] m_strTable;
	delete[] m_strHalfSQLStatement;
}

void COleDBRecordset::AddNew(void)
{
#ifdef _DEBUG
	if(m_pIRowsetChange==NULL)
	{
		ATLTRACE(L"The table must be have primary key");
		return;
	}
#endif
	m_dwAddNewEdit=1;
}

void COleDBRecordset::Edit(void)
{
#ifdef _DEBUG
	if(m_pIRowsetChange==NULL)
	{
		ATLTRACE(L"The table must be have primary key");
		return;
	}
#endif
	m_dwAddNewEdit=2;
}

BOOL COleDBRecordset::Update(void)
{
	_ASSERT(m_dwAddNewEdit);
	HRESULT hr;
	HROW* pHRow;
	m_dwStatusReadonly=DBSTATUS_S_IGNORE;
	m_dwStatusReadWrite=DBSTATUS_S_OK;
	if(m_dwAddNewEdit==1)
	{
		ReleaseRows();
		pHRow = &m_hRow;
		hr = m_pIRowsetChange->InsertRow(DB_NULL_HCHAPTER,m_hAccessor,m_pRowsBuffer,pHRow);
		if(FAILED(hr))
		{
			ATLTRACE(L"Update of AddNew Failed,Result code is %08X\n",hr);
			return FALSE;
		}
		m_nRowsCount++;
	}
	else
	{
		hr=m_pIRowsetChange->SetData(m_hRow,m_hAccessor,m_pRowsBuffer);
		if(FAILED(hr))
		{
			ATLTRACE(L"Update of Edit Failed,Result code is %08X\n",hr);
			return FALSE;
		}
	}
	m_dwAddNewEdit=0;
	return TRUE;
}

void COleDBRecordset::Close(void)
{
	ReleaseRows();
//	if(m_pRowsBuffer)
//	{
//		delete[] m_pRowsBuffer;
//		m_pRowsBuffer=NULL;
//	}
	if(m_pColumnBinding)
	{
		delete[] m_pColumnBinding;
		m_pColumnBinding=NULL;
	}
	if(m_pBindingStatus)
	{
		delete[] m_pBindingStatus;
		m_pBindingStatus=NULL;
	}
	if(m_pAccessor)
	{
		m_pAccessor->ReleaseAccessor(m_hAccessor,NULL);
		m_pAccessor->Release();
		m_pAccessor=NULL;
	}
	if(m_pIRowsetChange)
	{
		m_pIRowsetChange->Release();
		m_pIRowsetChange=NULL;
	}
	if(m_pRowset)
	{
		m_pRowset->Release();
		m_pRowset=NULL;
	}
	if(m_bOwnDatabase)
	{
		m_pDatabase->Close();
		delete m_pDatabase;
		m_pDatabase=NULL;
		m_bOwnDatabase=FALSE;
	}
	m_bIsOpen=FALSE;
}

BOOL COleDBRecordset::Delete(void)
{
#ifdef _DEBUG
	if(m_pIRowsetChange==NULL)
	{
		ATLTRACE(L"The table must be have primary key");
		return FALSE;
	}
#endif
	HRESULT hr;
	hr = m_pIRowsetChange->DeleteRows(DB_NULL_HCHAPTER,1,&m_hRow,NULL);
	if(FAILED(hr))
	{
		ATLTRACE(L"Delete Failed,Result code is %08X\n",hr);
		return FALSE;
	}
	return TRUE;
}

BOOL COleDBRecordset::MoveLast(void)
{
	ReleaseRows();
	m_pRowset->RestartPosition(DB_NULL_HCHAPTER);
	m_bIsEOF=TRUE;
	m_bIsBOF=FALSE;
	return Move(-1);
}

//BOOL COleDBRecordset::MovePrev(void)
//{
//	return Move(-2);
//}

//BOOL COleDBRecordset::MoveNext(void)
//{
//	return Move(0);
//}

BOOL COleDBRecordset::MoveFirst(void)
{
	ReleaseRows();
	m_pRowset->RestartPosition(DB_NULL_HCHAPTER);
	m_bIsBOF=TRUE;
	m_bIsEOF=FALSE;
	return Move(0);
}

BOOL COleDBRecordset::Move(long nSkipRows)
{
	BOOL bForward=TRUE;
	if(nSkipRows<0)
		bForward=FALSE;
	HRESULT hr;
	DWORD dwRowsFetched=0;
	HROW* phRow=&m_hRow;
	if(m_hRow)
	{
		m_pRowset->ReleaseRows(1, &m_hRow, NULL, NULL, NULL);
		m_hRow=NULL;
	}
	hr=m_pRowset->GetNextRows(DB_NULL_HCHAPTER,nSkipRows,1, &dwRowsFetched,&phRow);
	if(FAILED(hr))
	{
		ATLTRACE(L"Move Failed,Result code is %08X\n",hr);
		return FALSE;
	}
	else if(hr==DB_S_ENDOFROWSET)
	{
		if(bForward)
			m_bIsEOF=TRUE;
		else
			m_bIsBOF=TRUE;
		return FALSE;
	}
	if(bForward&&m_bIsBOF)
		m_bIsBOF=FALSE;
	else if((!bForward)&&m_bIsEOF)
		m_bIsEOF=FALSE;
	hr=m_pRowset->GetData(m_hRow,m_hAccessor,m_pRowsBuffer);
	if(FAILED(hr))
	{
		ATLTRACE(L"Get Data Failed,Result code is %08X\n",hr);
		ReleaseRows();
		return FALSE;
	}
	return TRUE;
}

BOOL COleDBRecordset::Open(COleDBDatabase* pDatabase, LPCOLESTR pTable, LPCOLESTR pColumnNames)
{
	_ASSERT(pTable);
	if(pDatabase)
		m_pDatabase=pDatabase;
	else
	{
		m_pDatabase=new COleDBDatabase;
		if(!m_pDatabase->Open(GetDefaultConnectString()))
		{
			delete m_pDatabase;
			return FALSE;
		}
		m_bOwnDatabase=TRUE;
	}
	size_t nNewTBLen=::wcslen(pTable)+3;
	if(nNewTBLen>m_nTBLen)
	{
		m_nTBLen=nNewTBLen;
		delete[] m_strTable;
		m_strTable=new WCHAR[m_nTBLen];
	}
	if(::wcschr(pTable,L'['))
		::wcscpy(m_strTable,pTable);
	else
	{
		::wcscpy(m_strTable,L"[");
		::wcscat(m_strTable,pTable);
		::wcscat(m_strTable,L"]");
	}
	m_bIsOpen=Requery(pColumnNames);

	return m_bIsOpen;
}

BOOL COleDBRecordset::Requery(LPCOLESTR pColumnNames)
{
	IDBCreateCommand* pIDBCreateCommand=NULL;
	IDBCreateSession* pIDBCreateSession=NULL;
	ICommand* pICommand=NULL;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品91亚洲二区在线观看| 日韩一区欧美二区| 国产寡妇亲子伦一区二区| 欧美不卡123| 国产黄人亚洲片| 中文乱码免费一区二区| 成人动漫一区二区| 亚洲日本在线天堂| 欧美视频在线不卡| 亚洲成人激情av| 欧美tk—视频vk| 成人a级免费电影| 一区二区三区在线影院| 7799精品视频| 国产精品69久久久久水密桃| 亚洲欧美怡红院| 欧美片网站yy| 国产成人免费网站| 亚洲免费成人av| 日韩欧美区一区二| av男人天堂一区| 日韩激情视频在线观看| 国产日韩精品一区二区浪潮av| 91网站在线播放| 麻豆精品精品国产自在97香蕉| 国产精品素人一区二区| 欧美人牲a欧美精品| 国产精品2024| 亚洲国产精品一区二区尤物区| 精品久久久久久久久久久久久久久| 成人在线综合网站| 青草av.久久免费一区| 国产精品视频一二三区| 宅男在线国产精品| 91在线一区二区三区| 久久精品国产**网站演员| 国产精品美女久久久久久2018 | 91精品国产综合久久香蕉的特点| 日韩午夜激情电影| 99精品偷自拍| 极品少妇一区二区| 亚洲午夜久久久| 国产欧美日韩麻豆91| 8x福利精品第一导航| 99精品欧美一区二区三区小说| 日韩不卡手机在线v区| 国产精品久久久久影院老司| 7777女厕盗摄久久久| 色综合久久久久综合99| 国产精品资源在线| 免费观看成人av| 亚洲国产综合人成综合网站| 日本一区二区三区四区| 日韩免费看的电影| 欧美另类z0zxhd电影| 97se亚洲国产综合在线| 国产精品伊人色| 蜜臀av一区二区在线免费观看| 一区二区三区在线播| 国产精品久久看| 国产精品婷婷午夜在线观看| 久久久久久毛片| 欧美成人福利视频| 欧美一区二区国产| 欧美人伦禁忌dvd放荡欲情| 欧洲视频一区二区| 91在线精品一区二区三区| 国产成人午夜精品5599| 国内不卡的二区三区中文字幕 | 亚洲国产激情av| 26uuu另类欧美亚洲曰本| 91精品国产一区二区三区蜜臀 | 成人av电影在线播放| 国产成人免费xxxxxxxx| 国内精品在线播放| 国产乱人伦偷精品视频免下载| 日韩高清欧美激情| 青青草伊人久久| 在线区一区二视频| 日韩精品一区二区在线| 日韩欧美综合在线| 精品国偷自产国产一区| 26uuu色噜噜精品一区| 国产日产欧美一区| 欧美国产精品一区二区| 欧美激情在线免费观看| 中日韩av电影| 亚洲在线免费播放| 天堂成人国产精品一区| 三级亚洲高清视频| 麻豆91精品视频| 国产乱妇无码大片在线观看| 国产一区二区三区免费播放| 国产精品一区在线观看乱码| 成人永久aaa| 色综合视频在线观看| 欧美视频在线观看一区| 日韩一级片在线观看| 精品久久久久久综合日本欧美 | 日韩欧美电影在线| 久久久夜色精品亚洲| 国产精品日产欧美久久久久| 亚洲欧洲中文日韩久久av乱码| 亚洲一区二区三区中文字幕| 五月婷婷久久丁香| 国产一区二区在线免费观看| av男人天堂一区| 91精品国产综合久久福利| 国产亚洲一区二区三区在线观看| 中文字幕在线观看一区| 性做久久久久久免费观看| 国内精品久久久久影院色| 99免费精品在线观看| 欧美色视频一区| 久久久久久日产精品| 亚洲愉拍自拍另类高清精品| 美女网站一区二区| 成人精品gif动图一区| 91福利在线导航| 久久免费电影网| 亚洲自拍都市欧美小说| 久久成人久久鬼色| 91福利在线观看| 欧美国产1区2区| 日韩av一级电影| 99re成人在线| 精品成人免费观看| 亚洲一级二级三级| 亚洲国产精品高清| 日本午夜精品一区二区三区电影| 丁香一区二区三区| 91精品综合久久久久久| 中文字幕亚洲一区二区av在线| 日韩黄色免费网站| 日本大香伊一区二区三区| 久久在线观看免费| 日韩精品三区四区| 色欧美片视频在线观看| 国产视频一区在线观看| 蜜桃精品视频在线| 欧美性受极品xxxx喷水| 亚洲欧美一区二区视频| 国产精品资源站在线| 日韩精品中文字幕一区二区三区 | 欧美一区二区视频网站| 中文字幕一区二区三区蜜月| 韩国在线一区二区| 欧美日韩精品久久久| 亚洲美女在线一区| av一二三不卡影片| 国产精品久久久久一区| 精品一区二区av| 日韩欧美国产一区二区三区| 性欧美疯狂xxxxbbbb| 欧洲精品在线观看| 亚洲老司机在线| 一本色道a无线码一区v| 最新国产成人在线观看| 成人性视频免费网站| 久久久久久久一区| 国产一区二区在线观看免费| 日韩美女主播在线视频一区二区三区| 亚州成人在线电影| 欧美性猛交xxxx乱大交退制版 | 欧美xxxxxxxx| 日韩av成人高清| 欧美一级精品在线| 六月丁香综合在线视频| 日韩你懂的在线观看| 久久国产尿小便嘘嘘尿| 日韩亚洲欧美中文三级| 亚洲成av人片| 538prom精品视频线放| 亚洲成人精品一区| 欧美一区二区三区在线| 免费观看成人av| 成人免费av资源| 国产精品久久久久久久久晋中| 白白色 亚洲乱淫| 国产精品成人一区二区艾草| 高清免费成人av| 久久久不卡网国产精品二区| 美女一区二区三区在线观看| 精品国产乱码久久久久久1区2区 | 91麻豆精品91久久久久同性| 日日摸夜夜添夜夜添亚洲女人| 欧美一区二区三区思思人| 精品一区二区三区免费| 国产欧美一区视频| 99re这里只有精品6| 亚洲一二三区视频在线观看| 91精品国产一区二区| 国产成人av福利| 一区二区免费视频| 日韩一区二区中文字幕| 粉嫩高潮美女一区二区三区| 亚洲色图丝袜美腿| 欧美另类变人与禽xxxxx| 国产永久精品大片wwwapp| 中文字幕在线观看不卡|