【求助】获取表里所有字段的值,感谢!

freshow 2008-10-12 08:50:57
现有一个表 Table 里面的字段有 数字、字符、时间类型
怎么做能够把 table里指定的一个记录集中所有的字段值都得到,并赋值给一个CString的数组?

下面是我自己写的,但是当获取,字符型 字段内容时就出错,怎样才能一气呵成的获取出来呢?

CString *str = new CString[nLen]; // nLen是字段的个数
for (int j = 0; j < nLen; j++)
{
str[j] = (CHAR*)_bstr_t(m_pRecordset->GetCollect(_bstr_t(strFields[j])));
}
delete []str;

...全文
78 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
shakaqrj 2008-10-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhoujianhei 的回复:]
FieldsPtr fds = m_pRecordset->Fields;
for (int j = 0; j < fds->Count; j++)
{
  DataTypeEnum type = fds->GetItem(_variant_t(j))->GetType();
switch(type)
{
/*========================================================================
returns: 返回下列值之一. 相应的 OLE DB 类型标识符在下表的说明栏的括
号中给出.
  [常量] [说明]
  ---------------------------------------------------------
  a…
[/Quote]
scq2099yt 2008-10-13
  • 打赏
  • 举报
回复
读取记录集数据,然后将数据转化成CString类型,然后添加到CString 中。
内存泄漏 2008-10-13
  • 打赏
  • 举报
回复
你记录集中的每个字段、字段类型都定了的吗? 定了的话用case语句根据不同的字段类型进行分别处理。。
freshow 2008-10-13
  • 打赏
  • 举报
回复
【更简单的方法】

// strFields[]字段集合, nLen字段的个数
GetFieldsValue(CString strFields[], int nLen, CString strRetValue[])
{
if (m_pRecordset->adoEOF)
{
return;
}

for (int j = 0; j < nLen; j++)
{
strRetValue[j] = (const char *)_bstr_t(m_pRecordset->GetCollect(_variant_t(strFields[j])));
}
}
freshow 2008-10-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tabby 的回复:]
你记录集中的每个字段、字段类型都定了的吗? 定了的话用case语句根据不同的字段类型进行分别处理。。
[/Quote]

又是您~哈哈
感谢下
freshow 2008-10-13
  • 打赏
  • 举报
回复
【解决了】最终试用版~哈哈
CStringArray* pArray = new CStringArray;
pArray->SetSize(500);
CString strInfo;
_variant_t varIndex;
_variant_t strVal;

if (m_pRecordset->adoEOF)
{
return;
}

for (int j = 0; j < nLen; j++)
{
varIndex = _variant_t((long)(j));
strVal= m_pRecordset->GetCollect(&varIndex);
strInfo.Format("%s", (const char *)_bstr_t(strVal));
pArray->SetAt(j, strInfo);
strRetValue[j] = pArray->GetAt(j);
}
freshow 2008-10-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhoujianhei 的回复:]
这是ADO.
[/Quote]

m_pRecordset->Fields 表示什么意思?是指一条记录集的所有字段个数吗?
因为编译不过,自己也没调出来。。。

zhoujianhei 2008-10-12
  • 打赏
  • 举报
回复
这是ADO.

freshow 2008-10-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhoujianhei 的回复:]
FieldsPtr fds = m_pRecordset->Fields;
for (int j = 0; j < fds->Count; j++)
{
  DataTypeEnum type = fds->GetItem(_variant_t(j))->GetType();
switch(type)
{
/*========================================================================
returns: 返回下列值之一. 相应的 OLE DB 类型标识符在下表的说明栏的括
号中给出.
  [常量] [说明]
  ---------------------------------------------------------
  a…
[/Quote]

这个是OLE DB吗?我不太懂
我是ADO的,我有点无知……请耐心
zhoujianhei 2008-10-12
  • 打赏
  • 举报
回复
FieldsPtr fds = m_pRecordset->Fields;
for (int j = 0; j < fds->Count; j++)
{
DataTypeEnum type = fds->GetItem(_variant_t(j))->GetType();
switch(type)
{
/*========================================================================
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: 返回指定字段的数据类型.
==========================================================================*/
}
}

根据相应类型调用 GetCollect() 。

freshow 2008-10-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dirdirdir3 的回复:]
其他类型的需要转换一下,用ChangeType(.......).........
[/Quote]

那在for循环中,怎么知道下一个字段是什么类型的呢?
dirdirdir3 2008-10-12
  • 打赏
  • 举报
回复
其他类型的需要转换一下,用ChangeType(.......).........

4,012

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧