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

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

?? oledbrecordset.cpp

?? oledb封裝類仿MFC的CRecordset
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
	ICommandProperties* pICommandProperties=NULL;
	ICommandText* pICommandText=NULL;
	IRowset* pRowset=NULL;
	IAccessor* pAccessor=NULL;
	HACCESSOR hAccessor=NULL;
	IRowsetChange* pIRowsetChange=NULL;
	long nRowsCount=0;
	HRESULT hr;
	m_pDatabase->m_pIDBInitialize->QueryInterface(IID_IDBCreateSession,(void**)&pIDBCreateSession);
	hr=pIDBCreateSession->CreateSession(NULL,IID_IDBCreateCommand,(IUnknown**)&pIDBCreateCommand);
	pIDBCreateSession->Release();
	if (FAILED(hr))
	{
		ATLTRACE(L"IDBCreateSession Interface Call CreateSession Method Failed,Result code is %08X\n",hr);
		return FALSE;
	}
	hr=pIDBCreateCommand->CreateCommand(NULL,IID_ICommand,(IUnknown**)&pICommand);
	pIDBCreateCommand->Release();
	if(FAILED(hr))
	{
		ATLTRACE(L"IDBCreateCommand Interface Call CreateCommand Method Failed,Result code is %08X\n",hr);
		return FALSE;
	}
	pICommand->QueryInterface(IID_ICommandProperties,(void**)&pICommandProperties);
	m_rgCmdPropSet[0].cProperties=20;
	m_rgCmdPropSet[0].rgProperties[0].vValue.boolVal=VARIANT_FALSE;
	hr=pICommandProperties->SetProperties(1,m_rgCmdPropSet);
	pICommandProperties->Release();
	if(FAILED(hr))
	{
		ATLTRACE(L"ICommandProperties Interface Call SetProperties Method Failed,Result code is %08X\n",hr);
		pICommand->Release();
		return FALSE;
	}
	pICommand->QueryInterface(IID_ICommandText,(void**)&pICommandText);
	if(pColumnNames)
	{
		size_t nNewHBLen=::wcslen(pColumnNames)+14;
		if(nNewHBLen>m_nHBLen)
		{
			m_nHBLen=nNewHBLen;
			delete[] m_strHalfSQLStatement;
			m_strHalfSQLStatement=new WCHAR[m_nHBLen];
		}
		::wcscpy(m_strHalfSQLStatement,L"SELECT ");
		::wcscat(m_strHalfSQLStatement,pColumnNames);
		::wcscat(m_strHalfSQLStatement,L" FROM ");
	}
	size_t nFilterLen=::wcslen(m_strFilter);
	size_t nSortLen=::wcslen(m_strSort);
	size_t nTableLen=::wcslen(m_strTable);
	LPWSTR pwstrSQLStatement=new WCHAR[::wcslen(m_strHalfSQLStatement)+nFilterLen+nTableLen+nSortLen+32];
	::wcscpy(pwstrSQLStatement,m_strHalfSQLStatement);
	::wcscat(pwstrSQLStatement,m_strTable);
	if(nFilterLen)
	{
		::wcscat(pwstrSQLStatement,L" WHERE ");
		::wcscat(pwstrSQLStatement,m_strFilter);
	}
	if(nSortLen)
	{
		::wcscat(pwstrSQLStatement,L" ORDER BY ");
		::wcscat(pwstrSQLStatement,m_strSort);
	}
	hr=pICommandText->SetCommandText(DBGUID_DBSQL,pwstrSQLStatement);
	if(FAILED(hr))
	{
		ATLTRACE(L"ICommandText Interface Call SetCommandText Method Failed,Result code is %08X\n",hr);
		pICommandText->Release();
		pICommand->Release();
		delete[] pwstrSQLStatement;
		return FALSE;
	}
	hr=pICommand->Execute(NULL,IID_IRowset,NULL,&nRowsCount,(IUnknown**)&pRowset);
	pICommandText->Release();
	pICommand->Release();
	if(FAILED(hr))
	{
		ATLTRACE(L"Execute Command Text Failed,Result code is %08X\n",hr);
		delete[] pwstrSQLStatement;
		return FALSE;
	}
	if(pRowset==NULL)
	{
		ATLTRACE(L"Execute Command Text Failed,Result code is %08X\n",hr);
		delete[] pwstrSQLStatement;
		return FALSE;
	}
	m_bHasObject=FALSE;
	if(!InitColumnsBuffer(pRowset))
	{
		pRowset->Release();
		ATLTRACE(L"InitColumnsBuffer Failed");
		delete[] pwstrSQLStatement;
		return FALSE;
	}
	pRowset->QueryInterface(IID_IAccessor,(void**)&pAccessor);
	hr=pAccessor->CreateAccessor(DBACCESSOR_ROWDATA,m_dwColumns,m_pColumnBinding,0, &hAccessor, m_pBindingStatus);
	if(FAILED(hr))
	{
		pAccessor->Release();
		pRowset->Release();
#ifdef _DEBUG
		ATLTRACE(L"IAccessor Interface Call CreateAccessor Method Failed,Result code is %08X\n",hr);
		for(DWORD i=0;i<m_dwColumns;i++)
		{
			ATLTRACE(L"Column %d Binding Status is %x\n",i,m_pBindingStatus[i]);
		}
#endif
		delete[] pwstrSQLStatement;
		return FALSE;
	}
	pRowset->QueryInterface(IID_IRowsetChange,(void**)&pIRowsetChange);
	if(m_pIRowsetChange)
		m_pIRowsetChange->Release();
	if(m_pAccessor)
	{
		m_pAccessor->ReleaseAccessor(m_hAccessor,NULL);
		m_pAccessor->Release();
	}
	if(m_pRowset)
	{
		ReleaseRows();
		m_pRowset->Release();
	}
	m_pRowset=pRowset;
	m_pIRowsetChange=pIRowsetChange;
	m_pAccessor=pAccessor;
	m_hAccessor=hAccessor;
	m_bIsEOF=FALSE;
	MoveFirst();
	m_pDatabase->m_pIDBInitialize->QueryInterface(IID_IDBCreateSession,(void**)&pIDBCreateSession);
	pIDBCreateSession->CreateSession(NULL,IID_IDBCreateCommand,(IUnknown**)&pIDBCreateCommand);
	pIDBCreateSession->Release();
	pIDBCreateCommand->CreateCommand(NULL,IID_ICommand,(IUnknown**)&pICommand);
	pIDBCreateCommand->Release();
	pICommand->QueryInterface(IID_ICommandProperties,(void**)&pICommandProperties);
	m_rgCmdPropSet[0].cProperties=1;
	m_rgCmdPropSet[0].rgProperties[0].vValue.boolVal=VARIANT_TRUE;
	pICommandProperties->SetProperties(1,m_rgCmdPropSet);
	pICommandProperties->Release();
	pICommand->QueryInterface(IID_ICommandText,(void**)&pICommandText);
	pICommandText->SetCommandText(DBGUID_DBSQL,pwstrSQLStatement);
	pICommand->Execute(NULL,IID_IRowset,NULL,&nRowsCount,(IUnknown**)&pRowset);
	pICommandText->Release();
	pICommand->Release();
	pRowset->Release();
	m_nRowsCount=nRowsCount;
	delete[] pwstrSQLStatement;
	return TRUE;
}

void COleDBRecordset::SetColumnInfo(LPCOLESTR pColumnNames, WORD wDBType, LPVOID pColumnValue, LPVOID pColumnLength, DWORD dwPart, DBOBJECT* pObjectStruct, BOOL bReadOnly, DWORD dwMaxLength)
{
	_ASSERT(m_pColumnBinding);
	_ASSERT(m_pColumnInfo);
	for(DWORD i=0;i<m_dwColumns;i++)
	{
		if(::wcscmp(pColumnNames,m_pColumnInfo[i].pwszName)==0)
		{
			m_pColumnBinding[m_dwColumnsCount].iOrdinal=m_pColumnInfo[i].iOrdinal;
		    m_pColumnBinding[m_dwColumnsCount].obValue = DWORD(((LPBYTE)pColumnValue)-m_pRowsBuffer);
			if(pColumnLength)
			    m_pColumnBinding[m_dwColumnsCount].obLength = DWORD(((LPBYTE)pColumnLength)-m_pRowsBuffer);
			if(bReadOnly)
				m_pColumnBinding[m_dwColumnsCount].obStatus = offsetof(COleDBRecordset,m_dwStatusReadonly);
			else
				m_pColumnBinding[m_dwColumnsCount].obStatus = offsetof(COleDBRecordset,m_dwStatusReadWrite);
			m_pColumnBinding[m_dwColumnsCount].pObject = pObjectStruct;
			m_pColumnBinding[m_dwColumnsCount].dwPart = dwPart;
		    m_pColumnBinding[m_dwColumnsCount].dwMemOwner = DBMEMOWNER_CLIENTOWNED;
			m_pColumnBinding[m_dwColumnsCount].eParamIO = DBPARAMIO_NOTPARAM;
			if(dwMaxLength==-1)
				m_pColumnBinding[m_dwColumnsCount].cbMaxLen = m_pColumnInfo[i].ulColumnSize;
			else
				m_pColumnBinding[m_dwColumnsCount].cbMaxLen = dwMaxLength;
			m_pColumnBinding[m_dwColumnsCount].bPrecision = m_pColumnInfo[i].bPrecision;
			m_pColumnBinding[m_dwColumnsCount].bScale = m_pColumnInfo[i].bScale;
			#ifdef _DEBUG
				if(m_pColumnInfo[i].wType!=wDBType&&(!((m_pColumnInfo[i].wType==DBTYPE_BYTES)&&(wDBType==DBTYPE_IUNKNOWN))))
					ATLTRACE(L"Warring: You binding DBType is %d,System required DBType is %d\n",wDBType,m_pColumnInfo[i].wType);
			#endif
			m_pColumnBinding[m_dwColumnsCount].wType = wDBType;
			break;
		}
	}
	m_dwColumnsCount++;
}

BOOL COleDBRecordset::SetAbsolutePosition(long nRow)
{
	_ASSERT(nRow>=0);
	ReleaseRows();
	m_pRowset->RestartPosition(DB_NULL_HCHAPTER);
	m_bIsBOF=TRUE;
	m_bIsEOF=FALSE;
	return Move(nRow);
}

long COleDBRecordset::GetRecordCount(void)
{
	return m_nRowsCount;
}

BOOL COleDBRecordset::InitColumnsBuffer(IRowset* pRowset)
{
	IColumnsInfo* pIColumnsInfo=NULL;
	OLECHAR* pStringBuffer=NULL;
	IMalloc* pIMalloc=NULL;
	DWORD dwColumnsNumber=0;
	HRESULT hr;
	pRowset->QueryInterface(IID_IColumnsInfo,(void**)&pIColumnsInfo);
	hr=pIColumnsInfo->GetColumnInfo(&dwColumnsNumber,&m_pColumnInfo,&pStringBuffer);
	pIColumnsInfo->Release();
	if(dwColumnsNumber>m_dwColumns)
	{
		if(m_pColumnBinding)
			delete[] m_pColumnBinding;
		m_pColumnBinding=new DBBINDING[dwColumnsNumber];

		if(m_pBindingStatus)
			delete[] m_pBindingStatus;
		m_pBindingStatus=new DBBINDSTATUS[dwColumnsNumber];
	}
	memset(m_pColumnBinding,0,sizeof(DBBINDING)*dwColumnsNumber);
	m_dwColumns=dwColumnsNumber;
	m_dwColumnsCount=0;
	BindColumns();
	::CoGetMalloc(1,&pIMalloc);
	pIMalloc->Free(m_pColumnInfo);
	pIMalloc->Free(pStringBuffer);
	pIMalloc->Release();
	return TRUE;
}

void COleDBRecordset::ReleaseRows(void)
{
	if (m_hRow)
	{
		m_pRowset->ReleaseRows(1, &m_hRow, NULL, NULL, NULL);
		m_hRow=NULL;
	}
}

BOOL COleDBRecordset::GetData(void)
{
	HRESULT hr;
	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;
}

void COleDBRecordset::BindText(LPCOLESTR pColumnName, LPSTR ppTextValue, long* pTextLen)
{
	SetColumnInfo(pColumnName,DBTYPE_STR,ppTextValue,pTextLen,DBPART_VALUE|DBPART_LENGTH|DBPART_STATUS);
}

void COleDBRecordset::BindText(LPCOLESTR pColumnName, LPWSTR ppTextValue, long* pTextLen)
{
	SetColumnInfo(pColumnName,DBTYPE_WSTR,ppTextValue,pTextLen,DBPART_VALUE|DBPART_LENGTH|DBPART_STATUS);
}

void COleDBRecordset::BindLong(LPCOLESTR pColumnName, long* pLongValue, BOOL bReadonly)
{
	SetColumnInfo(pColumnName,DBTYPE_I4,pLongValue,NULL,DBPART_VALUE|DBPART_STATUS,NULL,bReadonly);
}

void COleDBRecordset::BindDouble(LPCOLESTR pColumnName, double* pDoubleValue)
{
	SetColumnInfo(pColumnName,DBTYPE_R8,pDoubleValue);
}

void COleDBRecordset::BindDataTime(LPCOLESTR pColumnName, DBTIMESTAMP* pDataTimeValue)
{
	SetColumnInfo(pColumnName,DBTYPE_DBTIMESTAMP,pDataTimeValue);
}

void COleDBRecordset::BindNumeric(LPCOLESTR pColumnName, DB_NUMERIC* pNumericValue)
{
	SetColumnInfo(pColumnName,DBTYPE_NUMERIC,pNumericValue);
}

void COleDBRecordset::BindLonglong(LPCOLESTR pColumnName, LONGLONG* pLonglongValue, BOOL bReadonly)
{
	SetColumnInfo(pColumnName,DBTYPE_I8,pLonglongValue,NULL,DBPART_VALUE|DBPART_STATUS,NULL,bReadonly);
}

void COleDBRecordset::BindCurrency(LPCOLESTR pColumnName, CURRENCY* pCurrencyValue)
{
	SetColumnInfo(pColumnName,DBTYPE_CY,pCurrencyValue);
}

void COleDBRecordset::BindBool(LPCOLESTR pColumnName, BOOL* pBoolValue)
{
	SetColumnInfo(pColumnName,DBTYPE_I4,pBoolValue);
}

void COleDBRecordset::BindFloat(LPCOLESTR pColumnName, float* pFloatValue)
{
	SetColumnInfo(pColumnName,DBTYPE_R4,pFloatValue);
}

void COleDBRecordset::BindShort(LPCOLESTR pColumnName, short* pShortValue, BOOL bReadonly)
{
	SetColumnInfo(pColumnName,DBTYPE_I2,pShortValue,NULL,DBPART_VALUE|DBPART_STATUS,NULL,bReadonly);
}

void COleDBRecordset::BindISequentialStream(LPCOLESTR pColumnName, ISequentialStream** ppIStreamValue, long* pLength)
{
	SetColumnInfo(pColumnName,DBTYPE_IUNKNOWN,ppIStreamValue,pLength,DBPART_VALUE| DBPART_LENGTH|DBPART_STATUS,&m_ObjectStruct);
	m_bHasObject=TRUE;
}

void COleDBRecordset::BindGUID(LPCOLESTR pColumnName, LPGUID pGUIDValue)
{
	SetColumnInfo(pColumnName,DBTYPE_GUID,pGUIDValue);
}

void COleDBRecordset::BindByteArray(LPCOLESTR pColumnName, LPBYTE ppByteArray, long* pLength, long nMaxLength)
{
	SetColumnInfo(pColumnName,DBTYPE_BYTES,ppByteArray,pLength,DBPART_VALUE|DBPART_LENGTH|DBPART_STATUS,NULL,FALSE,nMaxLength);
}

LPCOLESTR COleDBRecordset::GetDefaultConnectString(void)
{
	_ASSERT(FALSE);
	return NULL;
}

void COleDBRecordset::SetFilter(LPCOLESTR pFilter)
{
	size_t nNewFBLen=::wcslen(pFilter)+1;
	if(nNewFBLen>m_nFBLen)
	{
		m_nFBLen=nNewFBLen;
		delete[] m_strFilter;
		m_strFilter=new WCHAR[m_nFBLen];
	}
	::wcscpy(m_strFilter,pFilter);
}

void COleDBRecordset::SetSort(LPCOLESTR pSort)
{
	size_t nNewSBLen=::wcslen(pSort)+1;
	if(nNewSBLen>m_nSBLen)
	{
		m_nSBLen=nNewSBLen;
		delete[] m_strSort;
		m_strSort=new WCHAR[m_nSBLen];
	}
	::wcscpy(m_strSort,pSort);
}
void COleDBRecordset::SetTable(LPCOLESTR pTable)
{
	size_t nNewTBLen=::wcslen(pTable)+1;
	if(nNewTBLen>m_nTBLen)
	{
		m_nTBLen=nNewTBLen;
		delete[] m_strTable;
		m_strTable=new WCHAR[m_nTBLen];
	}
	::wcscpy(m_strTable,pTable);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产伦精品一区二区三区免费迷| 一区二区三区精品视频在线| 精品影视av免费| 欧美一区二区三区在| 日本不卡的三区四区五区| 精品国产一区二区亚洲人成毛片| 国产老女人精品毛片久久| 国产欧美精品在线观看| 成人高清视频在线观看| 亚洲女子a中天字幕| 欧美人与性动xxxx| 蜜桃视频一区二区三区在线观看| 精品第一国产综合精品aⅴ| 国产不卡高清在线观看视频| 亚洲天堂久久久久久久| 欧美精品自拍偷拍动漫精品| 老色鬼精品视频在线观看播放| 久久蜜桃av一区精品变态类天堂 | 国产成人综合网| 中文字幕一区二区三区四区不卡 | 色综合色狠狠综合色| 亚洲午夜影视影院在线观看| 日韩视频国产视频| 成人黄色在线看| 午夜视频在线观看一区二区三区| 欧美电影免费观看高清完整版在线 | 色一情一伦一子一伦一区| 亚洲第一狼人社区| 久久久.com| 精品视频在线视频| 国产99精品在线观看| 亚洲一区成人在线| 久久综合999| 欧美亚洲国产怡红院影院| 久久99精品国产| 亚洲狠狠爱一区二区三区| 精品国产三级a在线观看| 91啦中文在线观看| 国产精品一区二区免费不卡| 亚洲午夜精品久久久久久久久| 久久人人97超碰com| 欧美私人免费视频| aaa欧美色吧激情视频| 美国三级日本三级久久99 | 亚洲一区在线观看免费 | 色哟哟欧美精品| 高清成人免费视频| 日本午夜精品视频在线观看| 亚洲天堂av一区| 亚洲国产高清在线观看视频| 欧美一卡二卡在线观看| 色香蕉久久蜜桃| 99re热这里只有精品视频| 国产一区二区调教| 免费观看91视频大全| 亚洲成a人v欧美综合天堂下载 | 久久综合狠狠综合久久综合88| 欧美午夜精品理论片a级按摩| 丁香婷婷综合网| 激情综合网激情| 欧美a级理论片| 午夜一区二区三区在线观看| 亚洲男人的天堂在线aⅴ视频| 欧美国产精品中文字幕| 国产亚洲一区字幕| 久久久久久电影| 欧美精品一区二区三区高清aⅴ| 337p亚洲精品色噜噜狠狠| 欧洲激情一区二区| 欧美三级资源在线| 欧美日韩三级一区| 欧美三级欧美一级| 在线观看一区日韩| 欧美中文一区二区三区| 欧洲一区在线观看| 91国产福利在线| 欧洲激情一区二区| 欧美日韩一区在线观看| 欧美日韩三级视频| 欧美一区二区三区视频在线 | 成人免费观看av| 成人永久aaa| www.亚洲激情.com| 91免费视频网址| 日本精品一区二区三区高清 | 99国产精品视频免费观看| 不卡一区二区在线| 色综合久久天天| 欧美色国产精品| 欧美一区二区三区在线| 久久只精品国产| 一区二区中文字幕在线| 一个色在线综合| 六月婷婷色综合| 成人黄色av网站在线| 99riav久久精品riav| 欧美性欧美巨大黑白大战| 欧美一区二区三区视频免费 | 97久久精品人人做人人爽50路| 91欧美一区二区| 欧美丰满少妇xxxxx高潮对白| 欧美一级国产精品| 久久蜜臀中文字幕| 亚洲欧洲精品成人久久奇米网| 亚洲激情自拍偷拍| 蜜臀久久99精品久久久画质超高清| 久久不见久久见中文字幕免费| 成人av电影免费观看| 欧美色中文字幕| 精品精品国产高清一毛片一天堂| 欧美激情一区在线| 亚洲一区二区在线播放相泽| 麻豆91在线播放免费| av电影在线不卡| 日韩一区二区精品葵司在线| 国产精品久久久久久福利一牛影视 | 国产色产综合产在线视频| 亚洲另类一区二区| 久久成人免费日本黄色| 91网站最新地址| 日韩欧美国产1| 亚洲人成网站精品片在线观看 | 日本一二三不卡| 午夜精品久久久| 成人一级片网址| 91麻豆精品国产91久久久更新时间| 国产欧美综合色| 日韩精品每日更新| 99精品视频在线观看| 日韩免费高清视频| 一区二区三区波多野结衣在线观看| 麻豆成人av在线| 欧美日韩免费电影| 中文字幕欧美日本乱码一线二线| 丝袜美腿亚洲综合| 91视频在线看| 国产日韩精品一区二区三区| 视频在线观看国产精品| bt7086福利一区国产| 日韩精品在线看片z| 亚洲图片自拍偷拍| 成人av网址在线| 久久影院视频免费| 日韩电影在线一区二区| 色香色香欲天天天影视综合网| 国产亚洲欧美日韩俺去了| 日日夜夜精品免费视频| 色视频一区二区| 国产欧美精品日韩区二区麻豆天美| 三级一区在线视频先锋 | 欧美激情自拍偷拍| 韩国中文字幕2020精品| 日韩一区二区电影网| 亚洲成人免费影院| 在线视频你懂得一区二区三区| 国产精品美女一区二区| 国产成人av电影在线观看| 精品少妇一区二区三区日产乱码| 日韩黄色免费电影| 欧美肥妇free| 婷婷一区二区三区| 欧美日韩国产高清一区二区| 一区二区国产视频| 欧美在线观看视频在线| 伊人色综合久久天天| 日本道精品一区二区三区| ...av二区三区久久精品| av欧美精品.com| 亚洲色图欧洲色图| 色综合久久99| 亚洲美女淫视频| 欧美午夜免费电影| 人人超碰91尤物精品国产| 欧美一区二区三区不卡| 日本一区中文字幕| 日韩午夜小视频| 黄色小说综合网站| 国产午夜精品在线观看| 成人深夜在线观看| 亚洲欧美中日韩| 91国产成人在线| 日本强好片久久久久久aaa| 日韩欧美一级二级| 国产精品一区二区x88av| 国产精品―色哟哟| 91看片淫黄大片一级| 亚洲成人动漫在线观看| 日韩三级视频在线观看| 国产麻豆成人传媒免费观看| 国产精品欧美一区二区三区| 91一区一区三区| 视频一区免费在线观看| 精品久久久久久久一区二区蜜臀| 国产精品一区二区91| 亚洲精品乱码久久久久久黑人| 欧美日产在线观看| 高清av一区二区| 亚洲午夜久久久久久久久电影网| 欧美videos中文字幕| 99精品视频一区|