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

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

?? adorecordset.cpp

?? 一個ADO數據庫的開發(數據庫中能存儲位圖)
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
/*########################################################################
	Filename: 	adorecordset.cpp
	----------------------------------------------------
	Remarks:	...
	----------------------------------------------------
	Author:		成真
	Email:		anyou@sina.com
				anyou@msn.com
	Created:	29/4/2003 8:15
  ########################################################################*/
#include "stdafx.h"
#include "AdoRecordSet.h"
#include <math.h>
#include <io.h>

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

/*########################################################################
			 ------------------------------------------------
					CAdoRecordSet class 構造/析構函數
			 ------------------------------------------------
  ########################################################################*/

CAdoRecordSet::CAdoRecordSet()
{
	m_pConnection = NULL;
	m_SearchDirection = adSearchForward;
	m_pRecordset.CreateInstance("ADODB.Recordset");
	#ifdef _DEBUG
	if (m_pRecordset == NULL)
	{
		AfxMessageBox("RecordSet 對象創建失敗! 請確認是否初始化了COM環境.");
	}
	#endif
	ASSERT(m_pRecordset != NULL);
}

CAdoRecordSet::CAdoRecordSet(CAdoConnection *pConnection)
{
	m_SearchDirection = adSearchForward;
	m_pConnection = pConnection;
	ASSERT(m_pConnection != NULL);
	m_pRecordset.CreateInstance("ADODB.Recordset");
	#ifdef _DEBUG
	if (m_pRecordset == NULL)
	{
		AfxMessageBox("RecordSet 對象創建失敗! 請確認是否初始化了COM環境.");
	}
	#endif
	ASSERT(m_pRecordset != NULL);
}

CAdoRecordSet::~CAdoRecordSet()
{
	Release();
}

/*========================================================================
	Params:		
		- strSQL:		SQL語句, 表名, 存儲過程調用或持久 Recordset 文件名.
		- CursorType:   可選. CursorTypeEnum 值, 確定打開 Recordset 時應該
					使用的游標類型. 可為下列常量之一.
		[常量]				[說明] 
		-----------------------------------------------
		adOpenForwardOnly	打開僅向前類型游標. 
		adOpenKeyset		打開鍵集類型游標. 
		adOpenDynamic		打開動態類型游標. 
		adOpenStatic		打開靜態類型游標. 
		-----------------------------------------------
		- LockType:     可選, 確定打開 Recordset 時應該使用的鎖定類型(并發)
					的 LockTypeEnum 值, 可為下列常量之一.
		[常量]				[說明] 
		-----------------------------------------------
		adLockReadOnly		只讀 - 不能改變數據. 
		adLockPessimistic	保守式鎖定 - 通常通過在編輯時立即鎖定數據源的記錄. 
		adLockOptimistic	開放式鎖定 - 只在調用 Update 方法時才鎖定記錄. 
		adLockBatchOptimistic 開放式批更新 - 用于批更新模式(與立即更新模式
						相對). 
		-----------------------------------------------
		- lOption		可選. 長整型值, 用于指示 strSQL 參數的類型. 可為下
					列常量之一.
		[常量]				[說明] 
		-------------------------------------------------
		adCmdText			指示strSQL為命令文本, 即普通的SQL語句. 
		adCmdTable			指示ADO生成SQL查詢返回以 strSQL 命名的表中的
						所有行. 
		adCmdTableDirect	指示所作的更改在strSQL中命名的表中返回所有行. 
		adCmdStoredProc		指示strSQL為存儲過程. 
		adCmdUnknown		指示strSQL參數中的命令類型為未知. 
		adCmdFile			指示應從在strSQL中命名的文件中恢復保留(保存的)
						Recordset. 
		adAsyncExecute		指示應異步執行strSQL. 
		adAsyncFetch		指示在提取 Initial Fetch Size 屬性中指定的初始
						數量后, 應該異步提取所有剩余的行. 如果所需的行尚未
						提取, 主要的線程將被堵塞直到行重新可用. 
		adAsyncFetchNonBlocking 指示主要線程在提取期間從未堵塞. 如果所請求
						的行尚未提取, 當前行自動移到文件末尾. 
==========================================================================*/
BOOL CAdoRecordSet::Open(LPCTSTR strSQL, long lOption, CursorTypeEnum CursorType, LockTypeEnum LockType)
{
	ASSERT(m_pConnection != NULL);
	ASSERT(m_pRecordset != NULL);
	ASSERT(AfxIsValidString(strSQL));

	if(strcmp(strSQL, _T("")) != 0)
	{
		m_strSQL = strSQL;
	}
	if (m_pConnection == NULL || m_pRecordset == NULL)
	{
		return FALSE;
	}

	if (m_strSQL.IsEmpty())
	{
		ASSERT(FALSE);
		return FALSE;
	}

	try
	{
		if (IsOpen()) Close();
		return SUCCEEDED(m_pRecordset->Open(_variant_t(LPCTSTR(m_strSQL)), 
											_variant_t((IDispatch*)m_pConnection->GetConnection(), true),
											CursorType, LockType, lOption));
	}
	catch (_com_error e)
	{
		TRACE(_T("Warning: 打開記錄集發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
		TRACE(_T("%s\r\n"), GetLastError());
		return FALSE;
	}
}

/*========================================================================
	Name:		通過重新執行對象所基于的查詢, 更新 Recordset 對象中的數據.
    ----------------------------------------------------------
	Params:		Options   可選. 指示影響該操作選項的位屏蔽. 如果該參數設置
		為 adAsyncExecute, 則該操作將異步執行并在它結束時產生 
		RecordsetChangeComplete 事件
    ----------------------------------------------------------
	Remarks:	通過重新發出原始命令并再次檢索數據, 可使用 Requery 方法刷新
	來自數據源的 Recordset 對象的全部內容. 調用該方法等于相繼調用 Close 和 
	Open 方法. 如果正在編輯當前記錄或者添加新記錄將產生錯誤.
==========================================================================*/
BOOL CAdoRecordSet::Requery(long Options)
{
	ASSERT(m_pRecordset != NULL);
	try
	{
		if (m_pRecordset != NULL) 
		{
			return (m_pRecordset->Requery(Options) == S_OK);
		}
	}
	catch (_com_error e)
	{
		TRACE(_T("Warning: Requery 方法發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
		return FALSE;
	} 
	return	FALSE; 
}

/*========================================================================
	Name:		從基本數據庫刷新當前 Recordset 對象中的數據.	
    ----------------------------------------------------------
	Params:		AffectRecords:   可選, AffectEnum 值, 決定 Resync 方法所影
		響的記錄數目, 可以為下列常量之一.
		[常量]				[說明]
		------------------------------------
		adAffectCurrent		只刷新當前記錄. 
		adAffectGroup		刷新滿足當前 Filter 屬性設置的記錄.只有將 Filter
						屬性設置為有效預定義常量之一才能使用該選項. 
		adAffectAll			默認值.刷新 Recordset 對象中的所有記錄, 包括由
						于當前 Filter 屬性設置而隱藏的記錄. 
		adAffectAllChapters 刷新所有子集記錄. 

		ResyncValues:   可選, ResyncEnum 值. 指定是否覆蓋基本值. 可為下列
					常量之一.
		[常量]				[說明] 
		------------------------------------
		adResyncAllValues	默認值. 覆蓋數據, 取消掛起的更新. 
		adResyncUnderlyingValues 不覆蓋數據, 不取消掛起的更新. 
    ----------------------------------------------------------
	Remarks:	使用 Resync 方法將當前 Recordset 中的記錄與基本的數據庫重新
	同步. 這在使用靜態或僅向前的游標但希望看到基本數據庫中的改動時十分有用.
	如果將 CursorLocation 屬性設置為 adUseClient, 則 Resync 僅對非只讀的 
	Recordset 對象可用.
	與 Requery 方法不同, Resync 方法不重新執行 Recordset 對象的基本的命令, 
	基本的數據庫中的新記錄將不可見.
==========================================================================*/
BOOL CAdoRecordSet::Resync(AffectEnum AffectRecords, ResyncEnum ResyncValues)
{
	ASSERT(m_pRecordset != NULL);
	try
	{
		if (m_pRecordset != NULL) 
		{
			return (m_pRecordset->Resync(AffectRecords, ResyncValues) == S_OK);
		}
	}
	catch (_com_error e)
	{
		TRACE(_T("Warning: Resync 方法發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
		return FALSE;
	} 
	return	FALSE; 
}

/*========================================================================
	Name:		將 Recordset 保存在持久性文件中.
    ----------------------------------------------------------
	Params:		
	[strFileName]:   可選. 文件的完整路徑名, 用于保存 Recordset.
	[PersistFormat]:   可選. PersistFormatEnum 值, 指定保存 Recordset 所使
		用的格式. 可以是如下的某個常量: 
		[常量]			[說明] 
		------------------------------
		adPersistADTG	使用專用的"Advanced Data Tablegram"格式保存. 
		adPersistXML	(默認)使用 XML 格式保存. 
    ----------------------------------------------------------
	Remarks:	只能對打開的 Recordset 調用 Save 方法. 隨后使用 Load 方法可
	以從文件中恢復 Recordset. 如果 Filter 屬性影響 Recordset, 將只保存經過
	篩選的行.
		在第一次保存 Recordset 時指定 FileName. 如果隨后調用 Save 時, 應忽
	略 FileName, 否則將產生運行時錯誤. 如果隨后使用新的 FileName 調用 Save, 
	那么 Recordset 將保存到新的文件中, 但新文件和原始文件都是打開的.
==========================================================================*/
BOOL CAdoRecordSet::Save(LPCTSTR strFileName, PersistFormatEnum PersistFormat)
{
	ASSERT(m_pRecordset != NULL);
	ASSERT(IsOpen());
	
	if (m_strFileName == strFileName)
	{
		strFileName = NULL;
	}
	else if(_taccess(strFileName, 0) != -1)
	{
		DeleteFile(strFileName);
		m_strFileName = strFileName;
	}
	else
	{
		m_strFileName = strFileName;
	}

	try
	{
		if (m_pRecordset != NULL) 
		{
			return (m_pRecordset->Save(_bstr_t(strFileName), PersistFormat) == S_OK);
		}
	}
	catch (_com_error e)
	{
		TRACE(_T("Warning: Save 發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
		return FALSE;
	} 
	return FALSE;
}

BOOL CAdoRecordSet::Load(LPCTSTR strFileName)
{
	if (IsOpen()) Close();

	try
	{
		return (m_pRecordset->Open(strFileName, "Provider=MSPersist;", adOpenForwardOnly, adLockOptimistic, adCmdFile) == S_OK);
	}
	catch (_com_error &e)
	{
		TRACE(_T("Warning: Load 發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
		return FALSE;
	}
}

/*========================================================================
	Name:		取消執行掛起的異步 Execute 或 Open 方法的調用.
	-----------------------------------------------------
	Remarks:	使用 Cancel 方法終止執行異步 Execute 或 Open 方法調用(即通
		過 adAsyncConnect、adAsyncExecute 或 adAsyncFetch 參數調用的方法).
		如果在試圖終止的方法中沒有使用 adAsyncExecute, 則 Cancel 將返回運行
		時錯誤.
==========================================================================*/
BOOL CAdoRecordSet::Cancel()
{
	ASSERT(m_pRecordset != NULL);
	try
	{
		return m_pRecordset->Cancel();
	}
	catch (_com_error e)
	{
		TRACE(_T("Warning: Cancel發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
		return FALSE;
	} 
	return FALSE;
}

/*========================================================================
	Name:		關閉打開的對象及任何相關對象.
	-----------------------------------------------------
	Remarks:	使用 Close 方法可關閉 Recordset 對象以便釋放所有關聯的系統
		資源. 關閉對象并非將它從內存中刪除, 可以更改它的屬性設置并且在此后
		再次打開. 要將對象從內存中完全刪除, 可將對象變量設置為 NULL.
			如果正在立即更新模式下進行編輯, 調用Close方法將產生錯誤,應首先
		調用 Update 或 CancelUpdat 方法. 如果在批更新期間關閉 Recordset 對
		象, 則自上次 UpdateBatch 調用以來所做的修改將全部丟失.
			如果使用 Clone 方法創建已打開的 Recordset 對象的副本, 關閉原始
		Recordset或其副本將不影響任何其他副本.
==========================================================================*/
void CAdoRecordSet::Close()
{
	try
	{
		if (m_pRecordset != NULL && m_pRecordset->State != adStateClosed)
		{
			if (GetEditMode() == adEditNone) CancelUpdate();
			m_pRecordset->Close();
		}
	}
	catch (const _com_error& e)
	{
		TRACE(_T("Warning: 關閉記錄集發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
	}
}

/*========================================================================
	Name:	關閉連接并釋放對象.
	-----------------------------------------------------
	Remarks: 關閉連接并釋放CAdoRecordSet對象, 這樣基本上從內容中完全清除了
		CAdoRecordSet對象.
==========================================================================*/
void CAdoRecordSet::Release()
{
	if (IsOpen()) Close();
	m_pRecordset.Release();
	m_pRecordset = NULL;
}


/*########################################################################
			  ------------------------------------------------
							   記錄集更新操作
			  ------------------------------------------------
  ########################################################################*/

/*========================================================================
	Remarks:	開始添加新的紀錄. 
==========================================================================*/
BOOL CAdoRecordSet::AddNew()
{
	ASSERT(m_pRecordset != NULL);
	try
	{
		if (m_pRecordset != NULL) 
		{
			if (m_pRecordset->AddNew() == S_OK)
			{
				return TRUE;
			}
		}
	}
	catch (_com_error e)
	{
		TRACE(_T("Warning: AddNew 方法發生異常. 錯誤信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
		return FALSE;
	} 
	return	FALSE;
}

/*========================================================================
	Remarks:	在調用 AddNew 等方法后, 調用此方法完成更新或修改.
==========================================================================*/
BOOL CAdoRecordSet::Update()
{
	ASSERT(m_pRecordset != NULL);
	try
	{
		if (m_pRecordset != NULL) 
		{
			if (m_pRecordset->Update() == S_OK)
			{
				return TRUE;
			}
		}
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91在线看国产| 综合久久久久久| 日日夜夜免费精品| 日韩成人一区二区三区在线观看| 青青草伊人久久| 国产精品资源站在线| 波多野结衣视频一区| 欧美电影影音先锋| 中文字幕va一区二区三区| 亚洲一级片在线观看| 激情偷乱视频一区二区三区| 99久久免费视频.com| 日韩写真欧美这视频| 国产精品免费久久久久| 天天免费综合色| 国产999精品久久久久久| 欧美日产国产精品| 国产亚洲一区二区在线观看| 亚洲一区二区四区蜜桃| 国产一区二区不卡在线| 欧美三级韩国三级日本一级| 99国产精品99久久久久久| 欧美日韩另类一区| 国产欧美精品一区二区三区四区 | 免费在线观看日韩欧美| 成人a免费在线看| 日韩精品资源二区在线| **性色生活片久久毛片| 久久精品国产色蜜蜜麻豆| 色婷婷综合久久久久中文| 26uuu国产电影一区二区| 亚洲综合丁香婷婷六月香| 国产精品538一区二区在线| 欧美日韩精品是欧美日韩精品| 日韩av电影天堂| 欧美日本在线一区| 中文字幕一区二区视频| 日本视频一区二区| 色婷婷久久久久swag精品 | 成人动漫av在线| 91精品在线观看入口| 亚洲精品欧美激情| 婷婷丁香激情综合| 成人h精品动漫一区二区三区| 欧美一区二区三区视频免费| 亚洲免费视频成人| 成人污污视频在线观看| 久久夜色精品国产欧美乱极品| 亚洲国产综合色| 99亚偷拍自图区亚洲| 久久久99免费| 裸体一区二区三区| 69堂亚洲精品首页| 亚洲6080在线| 99国产精品国产精品久久| 亚洲国产岛国毛片在线| 加勒比av一区二区| 欧美变态口味重另类| 男人的天堂亚洲一区| 欧美剧情电影在线观看完整版免费励志电影| 日韩美女视频一区| 国产成人高清在线| 国产欧美日本一区二区三区| 国产精品一区二区久久精品爱涩| 日韩欧美第一区| 久久狠狠亚洲综合| 日韩欧美aaaaaa| 黄色小说综合网站| 精品久久久久久最新网址| 日本女人一区二区三区| 欧美一级二级在线观看| 麻豆精品精品国产自在97香蕉| 制服丝袜中文字幕一区| 五月天视频一区| 日韩一区二区三区视频在线| 日韩精品亚洲专区| 日韩欧美不卡一区| 国产精一品亚洲二区在线视频| 2020国产精品自拍| 国产大陆a不卡| 国产精品伦理一区二区| 91在线观看一区二区| 亚洲丝袜美腿综合| 欧美在线视频你懂得| 亚洲成人av一区二区三区| 欧美三级日韩在线| 五月婷婷欧美视频| 欧美一区二区三区啪啪| 日韩国产一二三区| 欧美大片一区二区| 国产成人精品亚洲日本在线桃色| 中文字幕在线不卡一区二区三区| 一本一道综合狠狠老| 亚洲国产一区在线观看| 国产欧美日韩精品一区| 高清成人免费视频| 亚洲手机成人高清视频| 欧美日本国产视频| 黑人巨大精品欧美一区| 久久伊人中文字幕| 91猫先生在线| 日本欧美加勒比视频| 久久久久九九视频| 色88888久久久久久影院按摩| 无码av免费一区二区三区试看| 欧美成va人片在线观看| 本田岬高潮一区二区三区| 亚洲图片有声小说| 日韩精品在线网站| 成人精品视频一区| 丝袜亚洲另类丝袜在线| 久久一留热品黄| 欧美午夜不卡在线观看免费| 韩国视频一区二区| 亚洲色图欧美在线| 精品久久久久久久久久久久久久久| 成人综合激情网| 视频一区二区三区中文字幕| 欧美国产一区在线| 欧美精品v日韩精品v韩国精品v| 国产精品一区不卡| 亚洲国产一二三| 久久精品视频在线看| 欧美三级中文字幕在线观看| 国产精品一色哟哟哟| 亚洲国产一区二区三区| 国产日韩在线不卡| 欧美理论片在线| av在线不卡网| 六月丁香婷婷久久| 亚洲一区二区三区爽爽爽爽爽| 久久一区二区三区四区| 欧美日韩第一区日日骚| 成人午夜电影小说| 久久国产精品露脸对白| 亚洲午夜免费视频| 中文字幕欧美日本乱码一线二线| 欧美精品18+| 91免费国产在线| 国产精品一二三区在线| 日韩精品免费专区| 亚洲欧美日韩国产综合在线| 26uuu国产电影一区二区| 欧美日韩高清一区二区| av亚洲精华国产精华| 国产一区二区不卡| 奇米在线7777在线精品| 一区二区三区四区亚洲| 国产精品久久久久久久浪潮网站 | 免费精品99久久国产综合精品| ...av二区三区久久精品| 久久久久国色av免费看影院| 91精品婷婷国产综合久久性色| 色综合 综合色| 波多野结衣在线一区| 久久精品国产免费| 日韩国产精品久久| 亚洲一区自拍偷拍| 亚洲天堂精品在线观看| 国产精品免费网站在线观看| 日韩免费高清视频| 欧美一级高清片| 欧美一区二区三区精品| 欧美亚洲一区三区| 欧洲一区在线电影| 在线免费亚洲电影| 色综合久久88色综合天天6| 99精品在线免费| 99久久综合99久久综合网站| 成人午夜电影久久影院| 国产成人av影院| 国产伦精一区二区三区| 韩国欧美国产1区| 久99久精品视频免费观看| 久久99精品久久久久久动态图| 午夜欧美大尺度福利影院在线看| 亚洲五码中文字幕| 亚洲高清免费视频| 亚洲图片欧美一区| 婷婷久久综合九色综合伊人色| 婷婷激情综合网| 免费看日韩精品| 美洲天堂一区二卡三卡四卡视频| 日韩av电影天堂| 久久精品国产成人一区二区三区| 美女一区二区在线观看| 久88久久88久久久| 国产91精品露脸国语对白| 成人午夜av电影| 色婷婷av一区二区三区大白胸| 在线观看日韩毛片| 911精品产国品一二三产区| 91精品国产综合久久精品图片| 91精品国产91久久综合桃花| 激情深爱一区二区| 天堂午夜影视日韩欧美一区二区| 午夜欧美电影在线观看| 美女尤物国产一区| 国产一区二区在线影院| 成人一区二区三区视频|