⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ado.cpp

📁 ADO使用和封装的例子
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	}
	catch (_com_error e)
	{
		TRACE(_T(":( MovePrevious发生异常: %s\n"), e.ErrorMessage());
		return FALSE;
	}
	return FALSE;	
}

BOOL CAdoRecordSet::MoveNext()
{
	ASSERT(m_pRecordset != NULL);
	try
	{
		if (m_pRecordset != NULL) 
		{
			return SUCCEEDED(m_pRecordset->MoveNext());
		}
	}
	catch (_com_error e)
	{
		TRACE(_T(":( MoveNext发生异常: %s\n"), e.ErrorMessage());
		return FALSE;
	}
	return FALSE;
}

/*========================================================================
	Name:		移动 Recordset 对象中当前记录的位置。
    ----------------------------------------------------------
	Params:		
		- lRecords    带符号长整型表达式,指定当前记录位置移动的记录数。
		- Start    可选,字符串或变体型,用于计算书签。也可为下列 BookmarkEnum 值之一:
		常量				说明 
		adBookmarkCurrent	默认。从当前记录开始。 
		adBookmarkFirst		从首记录开始。 
		AdBookmarkLast		从尾记录开始。 
==========================================================================*/
BOOL CAdoRecordSet::Move(long lRecords, long Start)
{
	ASSERT(m_pRecordset != NULL);
	try
	{
		if (m_pRecordset != NULL) 
		{
			return SUCCEEDED(m_pRecordset->Move(lRecords, _variant_t(Start)));
		}
	}
	catch (_com_error e)
	{
		TRACE(_T(":( Move发生异常: %s\n"), e.ErrorMessage());
		return FALSE;
	} 
	return	FALSE;
}

/*########################################################################
			  ------------------------------------------------
								  记录集属性
			  ------------------------------------------------
  ########################################################################*/

/*========================================================================
	Name:		对所有可应用对象,说明其对象状态是打开或是关闭.对执行
	异步方法的 Recordset 对象,说明当前的对象状态是连接、执行或是获取.
	-----------------------------------------------------
	returns:	返回下列常量之一的长整型值.
		常量				说明 
		----------------------------------
		adStateClosed		指示对象是关闭的. 
		adStateOpen			指示对象是打开的. 
		adStateConnecting	指示 Recordset 对象正在连接. 
		adStateExecuting	指示 Recordset 对象正在执行命令. 
		adStateFetching		指示 Recordset 对象的行正在被读取. 
	-----------------------------------------------------
	Remarks:		可以随时使用 State 属性确定指定对象的当前状态.该
	属性是只读的.Recordset 对象的 State 属性可以是组合值.例如,如果
	正在执行语句,该属性将是 adStateOpen 和 adStateExecuting 的组合值.
==========================================================================*/
long CAdoRecordSet::GetState()
{
	ASSERT(m_pRecordset != NULL);
	long lState = 0;
	try
	{
		if (SUCCEEDED(m_pRecordset->get_State(&lState)))
		{
			return lState;
		}
	}
	catch (_com_error e)
	{
		TRACE(_T(":( GetState发生异常: %s\n"), e.ErrorMessage());
		return NULL;
	} 
	return NULL;
}

/*========================================================================
	Name:		指示有关批更新或其他大量操作的当前记录的状态.
	-----------------------------------------------------
	returns:	返回下列一个或多个 RecordStatusEnum 值之和.
		常量						说明 
		-------------------------------------------------
		adRecOK						成功地更新记录. 
		adRecNew					记录是新建的. 
		adRecModified				记录被修改. 
		adRecDeleted				记录被删除. 
		adRecUnmodified				记录没有修改. 
		adRecInvalid				由于书签无效,记录没有保存. 
		adRecMultipleChanges		由于影响多个记录,因此记录未被保存. 
		adRecPendingChanges			由于记录引用挂起的插入,因此未被保存. 
		adRecCanceled				由于操作被取消,未保存记录. 
		adRecCantRelease			由于现有记录锁定,没有保存新记录. 
		adRecConcurrencyViolation	由于开放式并发在使用中,记录未被保存. 
		adRecIntegrityViolation		由于用户违反完整性约束,记录未被保存. 
		adRecMaxChangesExceeded		由于存在过多挂起更改,记录未被保存. 
		adRecObjectOpen				由于与打开的储存对象冲突,记录未被保存. 
		adRecOutOfMemory			由于计算机内存不足,记录未被保存. 
		adRecPermissionDenied		由于用户没有足够的权限,记录未被保存. 
		adRecSchemaViolation		由于记录违反基本数据库的结构,因此未被保存. 
		adRecDBDeleted				记录已经从数据源中删除. 
	-----------------------------------------------------
	Remarks:	使用 Status 属性查看在批更新中被修改的记录有哪些更改被
	挂起.也可使用 Status 属性查看大量操作时失败记录的状态.例如,调用 
	Recordset 对象的 Resync、UpdateBatch 或 CancelBatch 方法,或者设置 
	Recordset 对象的 Filter 属性为书签数组.使用该属性,可检查指定记录
	为何失败并将问题解决.
==========================================================================*/
long CAdoRecordSet::GetStatus()
{
	ASSERT(m_pRecordset != NULL);
	long lStatus = 0;
	try
	{
		if (SUCCEEDED(m_pRecordset->get_Status(&lStatus)))
		{
			return lStatus;
		}
	}
	catch (_com_error e)
	{
		TRACE(_T(":( GetStatus发生异常: %s\n"), e.ErrorMessage());
		return NULL;
	} 
	return NULL;
}

/*========================================================================
	Name:		获取当前记录集中记录数目
==========================================================================*/
long CAdoRecordSet::GetRecordCount()
{
	ASSERT(m_pRecordset != NULL);
	long lcount;
	try
	{
		m_pRecordset->get_RecordCount(&lcount);
		return lcount;
	}
	catch(_com_error e)
	{
		TRACE(_T(":( GetRecordCount发生异常: %s\n"), e.ErrorMessage());
		return NULL;
	} 
}

/*========================================================================
	Name:		获取当前记录集中字段数目
==========================================================================*/
long CAdoRecordSet::GetFieldsCount()
{
	ASSERT(m_pRecordset != NULL);
	try
	{
		return GetFields()->Count;
	}
	catch(_com_error e)
	{
		TRACE(_T(":( GetFieldsCount发生异常: %s\n"), e.ErrorMessage());
		return -1;
	} 
}

/*========================================================================
	Name:		指针是否在在记录集头
==========================================================================*/
BOOL CAdoRecordSet::IsBOF()
{
	ASSERT(m_pRecordset != NULL);
	try
	{
		return m_pRecordset->adoBOF;
	}
	catch(_com_error e)
	{
		TRACE(_T(":( IsBOF发生异常: %s\n"), e.ErrorMessage());
		return FALSE;
	} 
	return FALSE;
}

/*========================================================================
	Name:		指针是否在在记录集尾
==========================================================================*/
BOOL CAdoRecordSet::IsEOF()
{
	ASSERT(m_pRecordset != NULL);
	try
	{
		return m_pRecordset->adoEOF;
	}
	catch (_com_error e)
	{
		TRACE(_T(":( IsEOF发生异常: %s\n"), e.ErrorMessage());
		return FALSE;
	}
}

void CAdoRecordSet::SetAdoConnection(CAdoConnection *pConnection)
{
	m_pConnection = pConnection;
}

/*===================================================================
	Remarks:	Recordset 对象包括 Field 对象组成的 Fields 集合.每个 
	Field 对象对应 Recordset 集中的一列.
=====================================================================*/
Fields* CAdoRecordSet::GetFields()
{
	ASSERT(m_pRecordset != NULL);
	FieldsPtr pFields;
	try
	{
		if (SUCCEEDED(m_pRecordset->get_Fields(&pFields)))
		{
			return pFields;
		}
	}
	catch (_com_error e)
	{
		TRACE(_T(":( GetFields发生异常: %s\n"), e.ErrorMessage());
		return NULL;
	} 
	return NULL;
}

/*========================================================================
	Remarks:	取得指定列字段的字段名.
==========================================================================*/
CString CAdoRecordSet::GetFieldName(long lIndex)
{
	ASSERT(m_pRecordset != NULL);
	CString strFieldName;
	try
	{
		FieldPtr field = GetFields()->GetItem(_variant_t(lIndex));
		strFieldName = LPCTSTR(_bstr_t(field->GetName()));
		return strFieldName;
		field->GetType();
	}
	catch (_com_error e)
	{
		TRACE(_T(":( GetFieldName发生异常: %s\n"), e.ErrorMessage());
		return strFieldName;
	}
}

/*========================================================================
	returns:	对于 Field 对象,Attributes 属性为只读,其值可能为以下任意一个或多个 FieldAttributeEnum 值的和。
	  常量				说明 
	  adFldMayDefer			指示字段被延迟,即不从拥有整个记录的数据源检索
						字段值,仅在显式访问这些字段时才进行检索。 
	  adFldUpdatable		指示可以写入该字段。 
	  adFldUnknownUpdatable 指示提供者无法确定是否可以写入该字段。 
	  adFldFixed			指示该字段包含定长数据。 
	  adFldIsNullable		指示该字段接受 Null 值。 
	  adFldMayBeNull		指示可以从该字段读取 Null 值。 
	  adFldLong				指示该字段为长二进制字段。并指示可以使用 AppendChunk 和 GetChunk 方法。 
	  adFldRowID			指示字段包含持久的行标识符,该标识符无法被写入
						并且除了对行进行标识(如记录号、唯一标识符等)外不
						存在有意义的值。 
	  adFldRowVersion		指示该字段包含用来跟踪更新的某种时间或日期标记。 
	  adFldCacheDeferred	指示提供者缓存了字段值,并已完成随后对缓存的读取。 
    ----------------------------------------------------------
	Remarks:	取得 Field 对象一项或多项属性。
==========================================================================*/
long CAdoRecordSet::GetFieldAttributes(long lIndex)
{
	ASSERT(m_pRecordset != NULL);
	long lAttributes;
	try
	{
		FieldPtr field = GetFields()->GetItem(_variant_t(lIndex));
		field->get_Attributes(&lAttributes);
		return lAttributes;
	}
	catch (_com_error e)
	{
		TRACE(_T(":( GetFieldAttributes发生异常: %s\n"), e.ErrorMessage());
		return -1;
	}
}
/*========================================================================
	Name:		指示 Field 对象所定义的长度。
    ----------------------------------------------------------
	returns:	返回某个字段定义的长度(按字节数)的长整型值。
    ----------------------------------------------------------
	Remarks:	使用 DefinedSize 属性可确定 Field 对象的数据容量。
==========================================================================*/

long CAdoRecordSet::GetFieldDefineSize(long lIndex)
{
	ASSERT(m_pRecordset != NULL);
	try
	{
		FieldPtr field = GetFields()->GetItem(_variant_t(lIndex));
		return field->GetDefinedSize();
	}
	catch (_com_error e)
	{
		TRACE(_T(":( GetDefineSize发生异常: %s\n"), e.ErrorMessage());
		return -1;
	}
}

/*========================================================================
	Name:	取得字段的值的实际长度。
    ----------------------------------------------------------
	returns:	返回长整型值。某些提供者允许设置该属性以便为 BLOB 数据预留
			空间,在此情况下默认值为 0。
    ----------------------------------------------------------
	Remarks:	使用 ActualSize 属性可返回 Field 对象值的实际长度.对于所有
			字段,ActualSize 属性为只读。如果 ADO 无法确定 Field 对象值的实
			际长度,ActualSize 属性将返回 adUnknown。
				如以下范例所示,ActualSize 和  DefinedSize 属性有所不同:
			adVarChar 声明类型且最大长度为 50 个字符的 Field 对象将返回为 
			50 的 DefinedSize 属性值,但是返回的 ActualSize 属性值是当前记
			录的字段中存储的数据的长度。
==========================================================================*/
long CAdoRecordSet::GetFieldActualSize(long lIndex)
{
	ASSERT(m_pRecordset != NULL);
	try
	{
		FieldPtr field = GetFields()->GetItem(_variant_t(lIndex));
		return field->GetActualSize();
	}
	catch (_com_error e)
	{
		TRACE(_T(":( GetFieldActualSize发生异常: %s\n"), e.ErrorMessage());
		return -1;
	}	
}

/*========================================================================
	returns:	返回下列值之一。相应的 OLE DB 类型标识符在下表的说明栏的括号中给出。
	  常量				说明 
	  ---------------------------------------------------------
	  adArray			与其他类型一起加入逻辑 OR 以指示该数据是那种类型的
					安全数组 (DBTYPE_ARRAY)。 
	  adBigInt			8 字节带符号的整数 (DBTYPE_I8)。 
	  adBinary			二进制值 (DBTYPE_BYTES)。 
	  adBoolean			布尔型值 (DBTYPE_BOOL)。 
	  adByRef			与其他类型一起加入逻辑 OR 以指示该数据是其他类型数
					据的指针 (DBTYPE_BYREF)。 
	  adBSTR			以空结尾的字符串 (Unicode) (DBTYPE_BSTR)。 
	  adChar			字符串值 (DBTYPE_STR)。 
	  adCurrency		货币值 (DBTYPE_CY)。货币数字的小数点位置固定、小数
					点右侧有四位数字。该值保存为 8 字节范围为10,000 的带符
					号整型值。 
	  adDate			日期值 (DBTYPE_DATE)。日期按双精度型数值来保存,数
					字全部表示从 1899 年 12 月 30 开始的日期数。小数部分是
					一天当中的片段时间。 
	  adDBDate			日期值 (yyyymmdd) (DBTYPE_DBDATE)。 
	  adDBTime			时间值 (hhmmss) (DBTYPE_DBTIME)。 
	  adDBTimeStamp		时间戳 (yyyymmddhhmmss 加 10 亿分之一的小数)(DBTYPE_DBTIMESTAMP). 
	  adDecimal			具有固定精度和范围的精确数字值 (DBTYPE_DECIMAL)。 
	  adDouble			双精度浮点值 (DBTYPE_R8)。 
	  adEmpty			未指定值 (DBTYPE_EMPTY)。 
	  adError			32 - 位错误代码 (DBTYPE_ERROR)。 
	  adGUID			全局唯一的标识符 (GUID) (DBTYPE_GUID)。 
	  adIDispatch		OLE 对象上 Idispatch 接口的指针 (DBTYPE_IDISPATCH)。 
	  adInteger			4 字节的带符号整型 (DBTYPE_I4)。 
	  adIUnknown		OLE 对象上 IUnknown 接口的指针 (DBTYPE_IUNKNOWN)。
	  adLongVarBinary	长二进制值。 
	  adLongVarChar		长字符串值。 
	  adLongVarWChar	以空结尾的长字符串值。 
	  adNumeric			具有固定精度和范围的精确数字值 (DBTYPE_NUMERIC)。 
	  adSingle			单精度浮点值 (DBTYPE_R4)。 
	  adSmallInt		2 字节带符号整型 (DBTYPE_I2)。 
	  adTinyInt			1 字节带符号整型 (DBTYPE_I1)。 
	  adUnsignedBigInt	8 字节不带符号整型 (DBTYPE_UI8)。 
	  adUnsignedInt		4 字节不带符号整型 (DBTYPE_UI4)。 
	  adUnsignedSmallInt 2 字节不带符号整型 (DBTYPE_UI2)。 
	  adUnsignedTinyInt 1 字节不带符号整型 (DBTYPE_UI1)。 
	  adUserDefined		用户定义的变量 (DBTYPE_UDT)。 
	  adVarBinary		二进制值。 
	  adVarChar			字符串值。 
	  adVariant			自动变体型 (DBTYPE_VARIANT)。 
	  adVector			与其他类型一起加入逻辑 OR 中,指示数据是 DBVECTOR 
					结构(由 OLE DB 定义)。该结构含有元素的计数和其他类型 
					(DBTYPE_VECTOR) 数据的指针。 
	  adVarWChar		以空结尾的 Unicode 字符串。 
	  adWChar			以空结尾的 Unicode 字符串 (DBTYPE_WSTR)。 
    ----------------------------------------------------------
	Remarks:	返回指定列的数据类型。
==========================================================================*/
DWORD CAdoRecordSet::GetFieldType(long lIndex)
{
	ASSERT(m_pRecordset != NULL);
	try 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -