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

📄 ado.cpp

📁 在开发MIS时,你是否常常为了取得某些汉字拼音而感到烦琐?本代码实现了输入一段代码,你就可以取得这些汉字的拼音,自带了二万多汉字的拼音库.
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	Recordset(BOF为True)的首记录之前.而BOF属性为True时向后移动将产生错
	误. 如果Recordset对象不支持书签或向后游标移动,则MovePrevious方法将
	产生错误.
		如果记录集是仅向前的,但是用户希望支持向前和向后滚动,则可以使用
	CacheSize 属性创建记录缓存,通过 Move方法支持向后游标移动.由于
	缓存记录是加载到内存中的,所以应避免不必要地缓存太多记录.可以调用
	仅向前 Recordset 对象的 MoveFirst 方法;这样做可使提供者重新执行生
	成 Recordset 对象的命令.
  ########################################################################*/

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

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

BOOL CAdoRecordSet::MovePrevious()
{
	ASSERT(m_pRecordset != NULL);
	try
	{
		if (m_pRecordset != NULL) 
		{
			return SUCCEEDED(m_pRecordset->MovePrevious());
		}
	}
	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		从首记录开始。 
==========================================================================*/
BOOL CAdoRecordSet::Move(long lRecords, BookmarkEnum Start)
{
	ASSERT(m_pRecordset != NULL);
	try
	{
		if (m_pRecordset != NULL) 
		{
			if (Start == adBookmarkFirst)
			{
				MoveFirst();
			}
			return SUCCEEDED(m_pRecordset->Move(lRecords));
		}
	}
	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->BOF;
	}
	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 对象一项或多项属性。
==========================================================================*/
DWORD CAdoRecordSet::GetFieldAttributes(long lIndex)
{
	ASSERT(m_pRecordset != NULL);
	long dwAttributes;
	try

⌨️ 快捷键说明

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