ACCESS 获取字段数据类型(DATA_TYPE)时出现的问题

本文探讨了在C++中使用SAFEARRAY和_variant_t数据结构处理不同类型数据的方法。通过实例展示了如何创建SAFEARRAY,填充不同类型的元素,如数字和字符串,并将其用于数据库操作。深入解析了代码中涉及的内存管理、数据类型转换等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数字类型得到的是3

长文本得到的是130

有知道的吗,谢谢

SAFEARRAY FAR* psa = NULL;
	SAFEARRAYBOUND rgsabound;
	_variant_t  var;
	_variant_t  Array;

	rgsabound.lLbound = 0;
	rgsabound.cElements = 4;
	psa = SafeArrayCreate(VT_VARIANT, 1, &rgsabound);

	var.vt = VT_EMPTY;

	long ix;
	ix = 0;
	SafeArrayPutElement(psa, &ix, &var);

	ix = 1;
	SafeArrayPutElement(psa, &ix, &var);

	ix = 2;
	var.vt = VT_BSTR;
	char * s1 = "";
	_bstr_t str = table.GetBuffer(0);
	var.bstrVal = str;
	SafeArrayPutElement(psa, &ix, &var);	

	var.vt = VT_EMPTY;
	ix = 3;
	SafeArrayPutElement(psa, &ix, &var);

	Array.vt = VT_ARRAY | VT_VARIANT;
	Array.parray = psa;

	_RecordsetPtr _adSchemaColumns = m_conn->OpenSchema(adSchemaColumns, Array);
	while ((!_adSchemaColumns->adoEOF) )
	{
		_bstr_t table_name = _adSchemaColumns->Fields->GetItem("TABLE_NAME")->Value;
		
		{
			_adodb_field field;
			_bstr_t column_name = _adSchemaColumns->Fields->GetItem("COLUMN_NAME")->Value;
			field.name = _com_util::ConvertBSTRToString(column_name);
			VT_I2;
			_variant_t vt_data_type = _adSchemaColumns->Fields->GetItem("DATA_TYPE")->Value;
			_bstr_t data_type = vt_data_type;
			field.type = _com_util::ConvertBSTRToString(data_type);

			printf("Column Name: %s\n", (LPCSTR)data_type);

			//同一个表的列在一起
			_adSchemaColumns->MoveNext();
		}
	}
	return FALSE;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值