亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国产精品全国免费观看高清| 日韩久久一区二区| 激情综合亚洲精品| 国产精品初高中害羞小美女文| 99久久夜色精品国产网站| 亚洲欧洲综合另类在线| 欧美高清激情brazzers| 成人亚洲一区二区一| 一区二区三区精密机械公司| 91精品在线观看入口| 成人午夜av电影| 丝袜亚洲另类丝袜在线| 国产日韩欧美制服另类| 在线观看不卡视频| 国产69精品久久777的优势| 亚洲成人av资源| 最新久久zyz资源站| 欧美精品一区二区蜜臀亚洲| 在线观看www91| 欧美大片日本大片免费观看| 国产精品久久夜| 一区二区三区欧美在线观看| 国产精品久久久久久久岛一牛影视 | 丁香一区二区三区| 久久亚洲二区三区| 91亚洲午夜精品久久久久久| 中文字幕第一页久久| 69精品人人人人| 欧美性极品少妇| 欧美日本国产视频| 欧美日韩一区二区欧美激情| 日本高清无吗v一区| 91蜜桃免费观看视频| av网站一区二区三区| 99精品欧美一区二区三区综合在线| 国产精品一区二区黑丝| 国产91丝袜在线播放九色| 国产99一区视频免费| 99久久精品一区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 一个色在线综合| 免费在线观看一区二区三区| 日本欧美加勒比视频| 国产乱子轮精品视频| 成人激情动漫在线观看| 在线亚洲一区观看| 欧美精品在线视频| 久久综合色之久久综合| 亚洲欧洲制服丝袜| 日韩国产一二三区| av一区二区三区| 欧美成人一区二区三区| 一区二区三区视频在线看| 激情偷乱视频一区二区三区| 99精品久久只有精品| 国产激情视频一区二区在线观看| 国产91精品久久久久久久网曝门 | 波多野结衣中文一区| 欧美人xxxx| 午夜精品久久久| 91美女在线观看| 欧美国产综合色视频| 免费高清在线一区| 欧美日韩免费观看一区三区| 136国产福利精品导航| 精品综合久久久久久8888| 国产99久久久国产精品潘金网站| 欧美日韩国产一区| 欧美日韩一二区| 国产精品久久毛片a| 国产乱码精品一区二区三区av | 精品在线一区二区三区| 制服丝袜亚洲精品中文字幕| 亚州成人在线电影| 欧美体内she精高潮| 亚洲第一搞黄网站| 欧美男男青年gay1069videost| 婷婷成人激情在线网| 91精品国产全国免费观看 | 久久99精品国产.久久久久 | 99久久综合国产精品| 国产日韩影视精品| 在线视频一区二区三| 日韩国产欧美在线播放| 精品动漫一区二区三区在线观看| 狠狠色2019综合网| 国产精品久久毛片a| 欧美日韩一区成人| 不卡av免费在线观看| 亚洲精品日产精品乱码不卡| 欧美一区二区三区成人| 99久久精品一区二区| 日韩av电影免费观看高清完整版 | 2022国产精品视频| 色乱码一区二区三区88| 国产一区二区三区免费播放| 亚洲制服欧美中文字幕中文字幕| 久久蜜臀精品av| 在线综合视频播放| 色婷婷狠狠综合| 国产酒店精品激情| 日韩影视精彩在线| 亚洲成人在线观看视频| 国产精品久久久久久久久免费丝袜| 在线综合视频播放| 欧美午夜精品电影| 91亚洲大成网污www| 成人性生交大片免费看在线播放| 日韩国产欧美三级| 日韩av电影免费观看高清完整版 | 国产精品理伦片| 久久精品视频免费观看| 久久久久9999亚洲精品| 日韩免费视频一区| 日韩精品自拍偷拍| 日韩精品中文字幕一区二区三区 | 国产精品77777| 成人三级在线视频| 色就色 综合激情| 91黄色免费网站| 在线综合亚洲欧美在线视频| 91精品福利在线一区二区三区| 欧美理论电影在线| 精品国产一二三区| 国产精品久久久久婷婷二区次| 国产精品色呦呦| 亚洲伊人色欲综合网| 久久 天天综合| 色悠久久久久综合欧美99| 欧美电影在线免费观看| 中文字幕成人网| 亚洲国产精品欧美一二99| 久久疯狂做爰流白浆xx| 一本大道久久精品懂色aⅴ| 3d动漫精品啪啪一区二区竹菊| 久久久亚洲精华液精华液精华液| 国产精品入口麻豆九色| 看国产成人h片视频| 91亚洲国产成人精品一区二区三 | 国产精品福利一区| 国产在线国偷精品产拍免费yy| 欧美亚洲高清一区二区三区不卡| 欧美精品一区二| 日本亚洲免费观看| 欧美专区日韩专区| 亚洲欧美影音先锋| 高清shemale亚洲人妖| 成人欧美一区二区三区视频网页 | 色婷婷综合视频在线观看| 国产福利91精品一区二区三区| 中文字幕在线观看不卡视频| 综合色中文字幕| 婷婷国产v国产偷v亚洲高清| 国产婷婷色一区二区三区四区| 亚洲成人自拍偷拍| 在线观看日韩av先锋影音电影院| 国产精品国产a| 国产91清纯白嫩初高中在线观看| 日韩久久久久久| 激情综合网天天干| 久久久蜜臀国产一区二区| 久久成人免费电影| 欧美激情在线看| av不卡在线播放| 亚洲成人av电影| 精品国精品国产尤物美女| 国产最新精品免费| 欧美激情综合在线| 欧美午夜电影一区| 亚洲欧美综合网| 91精品国产综合久久国产大片| 久久精品国产精品亚洲综合| 国产亚洲精品7777| 欧美巨大另类极品videosbest | 欧美一区二区不卡视频| 国产精品一卡二卡| 午夜激情久久久| 国产亚洲欧美日韩日本| 欧美高清www午色夜在线视频| 久久99国产乱子伦精品免费| 一区二区三区四区中文字幕| 久久精品亚洲国产奇米99| 在线播放日韩导航| 在线国产电影不卡| 99国产精品一区| 国产成人精品免费| 极品尤物av久久免费看| 亚洲成人免费视| 亚洲乱码一区二区三区在线观看| 久久午夜色播影院免费高清| 欧美一级夜夜爽| 日韩免费看的电影| 欧美一级黄色大片| 欧美xxxx老人做受| 欧美va亚洲va| 欧美大胆人体bbbb| 久久综合色鬼综合色| 国产欧美日本一区二区三区| 国产丝袜美腿一区二区三区| 欧美激情一区在线观看|