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

📄 ado.cpp

📁 在开发MIS时,你是否常常为了取得某些汉字拼音而感到烦琐?本代码实现了输入一段代码,你就可以取得这些汉字的拼音,自带了二万多汉字的拼音库.
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	{
		FieldPtr field = GetFields()->GetItem(_variant_t(lIndex));
		field->get_Attributes(&dwAttributes);
		return dwAttributes;
	}
	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:	返回下列 DataTypeEnum 值之一。相应的 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 
	{
		FieldPtr field = GetFields()->GetItem(_variant_t(lIndex));
		return field->GetType();
	}
	catch (_com_error e)
	{
		TRACE(_T(":( GetField发生错误: %s\n"), e.ErrorMessage());
		return NULL;
	}	
}

/*========================================================================
	Name:	取得指定列的字段对象的指针.	
==========================================================================*/
FieldPtr CAdoRecordSet::GetField(long lIndex)
{
	try
	{
		return GetFields()->GetItem(_variant_t(lIndex));
	}
	catch (_com_error e)
	{
		TRACE(_T(":( GetField发生错误: %s\n"), e.ErrorMessage());
		return NULL;
	}
}

const _RecordsetPtr& CAdoRecordSet::GetRecordset()
{
	return m_pRecordset;
}

CString CAdoRecordSet::GetLastError()
{
	ASSERT(m_pConnection != NULL);
	return m_pConnection->GetLastError();
}

/*========================================================================
	Name:		取消执行挂起的异步 Execute 或 Open 方法的调用.
	-----------------------------------------------------
	Remarks:	使用 Cancel 方法终止执行异步 Execute 或 Open 方法调用(即通
		过 adAsyncConnect、adAsyncExecute 或 adAsyncFetch 参数调用的方法).
		如果在试图终止的方法中没有使用 adAsyncExecute,则 Cancel 将返回运行
		时错误.
			下表显示在特定类型对象上使用 Cancel 方法时将终止的任务.
		如果对象为		将终止对该方法的上一次异步调用 
		-------------------------------------------------
		Command			Execute 
		Connection		Execute 或 Open 
		Recordset		Open 
==========================================================================*/
BOOL CAdoRecordSet::Cancel()
{
	ASSERT(m_pRecordset != NULL);
	try
	{
		return m_pRecordset->Cancel();
	}
	catch (_com_error e)
	{
		TRACE(_T(":( Cancel发生错误: %s\n"), e.ErrorMessage());
		return FALSE;
	} 
	return FALSE;
}

_RecordsetPtr CAdoRecordSet::operator =(_RecordsetPtr &pRecordSet)
{
	Close();
	m_pRecordset = pRecordSet;
	return m_pRecordset;
}

/*########################################################################
			  ------------------------------------------------
								   其他方法
			  ------------------------------------------------
  ########################################################################*/

/*========================================================================
	Remarks:	取得当前记录中指定字段的值并转换成字符串
==========================================================================*/
BOOL CAdoRecordSet::GetValueString(CString& strValue, long lFieldIndex)
{
	ASSERT(m_pRecordset != NULL);
	if (lFieldIndex < 0 || lFieldIndex >= GetFieldsCount())
	{
		return FALSE;
	}
	try
	{
		if (m_pRecordset == NULL || m_pRecordset->State == adStateClosed)
		{
			MessageBox(NULL,"数据库可能已经断开,\r\n请重新连接、然后重试.","提示",MB_ICONINFORMATION);
			return FALSE;
		} 
		if (m_pRecordset->adoEOF)
		{
			return FALSE;
		}
		_variant_t value = m_pRecordset->GetCollect(_variant_t(lFieldIndex));
		strValue = Format(value);
		return TRUE;
	}
	catch (_com_error e)
	{
		TRACE(_T(":( 字段访问失败: %s\n"), e.ErrorMessage());
		return FALSE;
	}

	return FALSE;
}

BOOL CAdoRecordSet::GetValueString(CString &strValue, CString strFieldName)
{
	ASSERT(m_pRecordset != NULL);
	try
	{
		if (m_pRecordset == NULL || m_pRecordset->State == adStateClosed)
		{
			MessageBox(NULL,"数据库可能已经断开,\r\n请重新连接、然后重试.","提示",MB_ICONINFORMATION);
			return FALSE;
		} 
		if (m_pRecordset->adoEOF)
		{
			return FALSE;
		}
		_variant_t value = m_pRecordset->GetCollect(_variant_t(LPCTSTR(strFieldName)));
		strValue = Format(value);
		return TRUE;	
	}
	catch (_com_error e)
	{
		TRACE(_T(":( 字段访问失败: %s\n"), e.ErrorMessage());
		return FALSE;
	}

	return FALSE/**/;
}

BOOL CAdoRecordSet::PutCollect(long index, const _variant_t &pver)
{
	ASSERT(m_pRecordset != NULL);
	try
	{
		if (m_pRecordset != NULL) 
		{
			m_pRecordset->PutCollect(index, pver);
		}
	}
	catch (_com_error e)
	{
		return FALSE;
	} 
	return	FALSE;
}

/*========================================================================
	Remarks:	把_variant_t型变量格式化成CString型字符串.
==========================================================================*/
CString CAdoRecordSet::Format(_variant_t var)
{
	DATE dt;
	COleDateTime da;
	CString strValue;
	
	switch (var.vt)
	{
	case VT_BSTR://字符串
	case VT_LPSTR://字符串
	case VT_LPWSTR://字符串
		strValue = (LPCTSTR)(_bstr_t)var;
		break;
	case VT_I2://短整型
		strValue.Format("%d", var.iVal);
		break;
	case VT_UI2://无符号短整型
		strValue.Format("%d", var.uiVal);
		break;
	case VT_VOID://
	case VT_INT://整型
	case VT_I4://整型
		strValue.Format("%d", var.intVal);
		break;
	case VT_I8://长整型
		strValue.Format("%d", var.lVal);
		break;
	case VT_UINT://无符号整型
	case VT_UI4://无符号整型
		strValue.Format("%d", var.uintVal);
		break;
	case VT_UI8://无符号长整型
		strValue.Format("%d", var.ulVal);
		break;
	case VT_R4://浮点型
		strValue.Format("%.4f", var.fltVal);
		break;
	case VT_R8://双精度型
		strValue.Format("%.8f", var.dblVal);
		break;
	case VT_DECIMAL: //小数
		strValue.Format("%.4f", var.decVal);
		break;
	case VT_BOOL://布尔型
		strValue = var.lVal ? "TRUE" : "FALSE";
		break;
	case VT_DATE: //日期型
		dt = var.date;
		da = COleDateTime(dt); 
		strValue = da.Format("%Y-%m-%d %H:%M:%S");
		break;
	case VT_NULL://NULL值
		strValue = "NULL";
		break;
	case VT_EMPTY://空
		strValue = "";
		break;
	case VT_UNKNOWN://未知类型
	default:
		strValue = "UN_KNOW";
		break;
	}
	return strValue;
}




⌨️ 快捷键说明

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