亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国产欧美一区二区精品性色 | 欧美精品在线一区二区| 欧美一区二区三区在线| 国产精品欧美极品| 国产一区二区看久久| 欧美乱妇一区二区三区不卡视频| 国产精品女人毛片| 激情图区综合网| 欧美一区二区福利视频| 亚洲综合色丁香婷婷六月图片| 国产一区二区免费看| 日韩欧美一级精品久久| 亚洲成国产人片在线观看| 99久久久久久99| 国产精品三级av在线播放| 国产精一品亚洲二区在线视频| 欧美蜜桃一区二区三区| 亚洲男人天堂av网| 99视频一区二区| 国产精品国产三级国产专播品爱网| 琪琪久久久久日韩精品| 制服.丝袜.亚洲.中文.综合| 一区二区三区视频在线观看| 91免费在线视频观看| 亚洲视频中文字幕| eeuss鲁片一区二区三区在线观看| 欧美精品一区视频| 国产自产2019最新不卡| 日本伊人色综合网| 日韩限制级电影在线观看| 香蕉久久夜色精品国产使用方法 | 国产亚洲女人久久久久毛片| 国产一区二区美女诱惑| 久久婷婷国产综合精品青草| 国产一区二区视频在线播放| 国产视频一区不卡| 成人精品小蝌蚪| 国产精品久久久久桃色tv| 成人美女视频在线看| 国产精品久久三| 色综合天天综合色综合av| 一区二区三区91| 欧美欧美午夜aⅴ在线观看| 日韩国产在线一| 精品理论电影在线| 国产精品1024久久| 欧美国产日本韩| 色婷婷综合久久久中文一区二区| 亚洲综合一区在线| 91麻豆精品91久久久久同性| 三级不卡在线观看| 精品国产一区二区三区四区四| 国产一区二区中文字幕| 国产精品的网站| 在线成人高清不卡| 国产麻豆9l精品三级站| 日韩理论电影院| 欧美一区二区在线播放| 国产传媒一区在线| 亚洲专区一二三| 精品成人免费观看| 91在线免费播放| 日产欧产美韩系列久久99| 久久久www成人免费毛片麻豆 | jvid福利写真一区二区三区| 亚洲一二三区不卡| 国产欧美一区二区三区沐欲 | 香蕉乱码成人久久天堂爱免费| 精品国产髙清在线看国产毛片| 99re热视频这里只精品| 美女一区二区在线观看| 国产精品久久久久久久午夜片 | 国产欧美在线观看一区| 欧美日精品一区视频| 国产精品资源网| 亚洲国产精品自拍| 国产精品卡一卡二| 欧美电视剧在线观看完整版| 91视视频在线直接观看在线看网页在线看| 亚洲网友自拍偷拍| 国产精品二三区| 欧美电影免费观看高清完整版在线| 91日韩精品一区| 丁香激情综合国产| 免费成人美女在线观看| 一区二区成人在线| 日本一区二区高清| 欧美精品一区二区久久婷婷| 欧美精品自拍偷拍| 91蜜桃在线观看| 成人精品免费看| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲成人一区二区在线观看| 亚洲色图制服丝袜| 国产午夜精品久久久久久免费视| 欧美精品v国产精品v日韩精品| va亚洲va日韩不卡在线观看| 成人亚洲一区二区一| 国内精品免费在线观看| 日韩国产精品91| 视频一区在线视频| 午夜精品福利一区二区三区蜜桃| 亚洲视频一二区| 国产精品入口麻豆九色| 欧美国产日韩一二三区| 国产欧美一区二区精品忘忧草 | 天天做天天摸天天爽国产一区| 自拍偷自拍亚洲精品播放| 久久精品欧美日韩精品| 欧美精品一区二区三| 日韩精品一区二区三区三区免费 | 欧美日韩国产欧美日美国产精品| 色天使色偷偷av一区二区| 成人黄色在线网站| 成人国产精品视频| 成年人国产精品| 99久久精品免费精品国产| 丁香啪啪综合成人亚洲小说 | 成人综合婷婷国产精品久久蜜臀| 国产真实乱对白精彩久久| 国产一区美女在线| 懂色av噜噜一区二区三区av| 成人高清免费观看| 91国在线观看| 宅男噜噜噜66一区二区66| 91麻豆精品91久久久久同性| 欧美大度的电影原声| 26uuu久久天堂性欧美| 国产色一区二区| 亚洲欧美激情一区二区| 亚洲一区二区三区美女| 人人狠狠综合久久亚洲| 国产一区在线视频| 成人h精品动漫一区二区三区| 色欧美片视频在线观看在线视频| 欧美日韩精品一区二区在线播放| 91精品国产综合久久香蕉麻豆| 26uuu国产电影一区二区| 国产视频在线观看一区二区三区| 亚洲天堂av老司机| 青青草原综合久久大伊人精品 | 91蝌蚪porny九色| 欧美区在线观看| 精品粉嫩超白一线天av| 亚洲欧美二区三区| 日韩av不卡一区二区| 成人a区在线观看| 3d动漫精品啪啪1区2区免费| 久久精品在线免费观看| 一区二区三区在线观看网站| 麻豆精品一区二区| 91久久免费观看| 久久综合色综合88| 性做久久久久久久免费看| 国产精品中文字幕日韩精品| 91九色最新地址| 久久精品人人爽人人爽| 亚洲成av人片在www色猫咪| 国产成人精品一区二区三区四区| 欧美亚洲免费在线一区| 国产色产综合产在线视频| 天堂成人国产精品一区| 成人av在线网| 欧美va在线播放| 亚洲国产中文字幕| 成人午夜又粗又硬又大| 欧美变态口味重另类| 亚洲一区二区黄色| 成人av综合在线| 久久中文字幕电影| 午夜激情一区二区三区| 北岛玲一区二区三区四区| 日韩西西人体444www| 一区二区三区四区不卡视频| 不卡一区在线观看| 久久婷婷国产综合精品青草| 日韩精品欧美精品| 欧美色图在线观看| 亚洲三级久久久| 国产69精品久久久久777| 日韩精品一区国产麻豆| 欧美a级理论片| 欧美日韩亚洲综合在线| 亚洲另类春色校园小说| 99久久久精品| 综合分类小说区另类春色亚洲小说欧美| 国产中文字幕一区| 久久噜噜亚洲综合| 国产在线视频精品一区| 日韩欧美在线不卡| 青青草精品视频| 日韩欧美www| 国产综合色精品一区二区三区| 日韩久久久精品| 紧缚捆绑精品一区二区| 欧美大片在线观看| 激情成人综合网| 久久品道一品道久久精品| 国产一区美女在线| 久久蜜臀精品av|