我碰到了这样的问题,想请大家帮忙我用ADO进行读取操作比如表中有1,2,3条记录。第1条中的字段A为空,条2条中的字段A非空,第3条中的记录为空我的问题是:读第1条和第2条记录A字段正确,但到第3条时这个字段只要为空就会被第2条的A字段值覆盖。也就是说如果一条记录中有空值的字段,我读到本地时得到的都是上一条记录非空字段的值
比如表中:
第一条记录:a 空
第二条记录:a 1
第三条记录:a 空
我读到本地时:
第一条记录:a 空
第二条记录:a 1
第三条记录:a 1
我是这样读取的:
_bstr_t strSQL("SELECT * FROM FormName");
m_pRecordset->Open(strSQL, _variant_t((IDispatch *) m_pConnection,
true), adOpenStatic, adLockOptimistic, adCmdText);CMyRecordSet set; // 这个类继承自CADORecordBinding
IADORecordBindingPtr picRs(m_pRecordset);
HRESULT hr = picRs->BindToRecordset(&set);// 开始读返回的记录集
while (!m_pRecordset->adoEOF)
{
// 这里读取值
int a = set.a;
m_pRecordset->MoveNext();
}
绑定记录集用的是BEGIN_ADO_BINDING() END_ADO_BINDING()我尝试过这样做:
用m_pRecordset->Fields->GetItem(_variant_t("a"))->Value这种方式得到的都是正确的值,空值是空值,非空值是非空值。不会出现空值被非空值覆盖的情况。请问这种情况应该怎么处理。非常感谢!!!!
比如表中:
第一条记录:a 空
第二条记录:a 1
第三条记录:a 空
我读到本地时:
第一条记录:a 空
第二条记录:a 1
第三条记录:a 1
我是这样读取的:
_bstr_t strSQL("SELECT * FROM FormName");
m_pRecordset->Open(strSQL, _variant_t((IDispatch *) m_pConnection,
true), adOpenStatic, adLockOptimistic, adCmdText);CMyRecordSet set; // 这个类继承自CADORecordBinding
IADORecordBindingPtr picRs(m_pRecordset);
HRESULT hr = picRs->BindToRecordset(&set);// 开始读返回的记录集
while (!m_pRecordset->adoEOF)
{
// 这里读取值
int a = set.a;
m_pRecordset->MoveNext();
}
绑定记录集用的是BEGIN_ADO_BINDING() END_ADO_BINDING()我尝试过这样做:
用m_pRecordset->Fields->GetItem(_variant_t("a"))->Value这种方式得到的都是正确的值,空值是空值,非空值是非空值。不会出现空值被非空值覆盖的情况。请问这种情况应该怎么处理。非常感谢!!!!
解决方案 »
- 存储过程嵌套游标替换表中的值
- 存储过程有点问题请大神帮忙看看
- 高手看看这段SQL有啥错误,切莫见笑第一次用Oralce
- 送六个Gmail 求教是什么原因造成Connection refused的
- select name from v$database 中的v$database 是什么意思??
- 请教高手,一个使用java添加记录到oracle数据库中的问题
- 如何设定查询时间格式为yyyy-mm-dd的纪录?
- oracle9i通过什么工具对表和字段进行操作?应该有图形界面工具吧?
- 单位上网要计流量了,郁闷中,散分!!!
- 为什么我在9i客户端的企业管理器用表数据编辑器看到的中文是乱码,而用sql explorer和pl/sql developer中文都能正常显示?
- 请大家帮一下!Oracle联合查询的问题!
- ORA-09925
覆盖是你的代码问题,就算是一次取出来,也不会出现结果集中数据乱覆盖的情况。你那个覆盖应该是你的代码中的临时变量没有清空。你在while里面把结果集对应的字段值打出来看看?
我在while里下断点时,看绑定后的CADORecordBinding时就是被覆盖了的while中大概是这样:
while (!m_pRecordset->adoEOF)
{
SSomeStruct *pLocal = new SSomeStruct; // 在这里下断点,看set.a时表中如果是空值就被覆盖了 pLocal->a = set.a
list.AddTail(pLocal); // list是一个CTypedPtrList<CPtrList, SSomeStruct*>
m_pRecordset->MoveNext();
}
CMyRecordSet
里面的问题啊,你继承了那个类,但里面重写了方法没有对数据进行清除?
我觉得应该ADO不会出这种问题的。
{
public:
CSet(); // 构造函数里就是初始化所有成员变量,没有其它的操作
virtual ~CSet(){};
BEGIN_ADO_BINDING(CSet)
ADO_FIXED_LENGTH_ENTRY2(1, adDate, m_a, FALSE)
// 还有很多字段,但应该不重要,因为我试过每个字段都有这种问题
END_ADO_BINDING() COleDateTime m_a;
}希望大家能帮忙