我编写了一点代码,是数据库的,连接Oracle,一点代码如下:
CString str;
if(m_pSet->IsOpen())
m_pSet->Close();
m_pSet->Open(CRecordset::forwardOnly,"select 列1 from 表1");
while(!m_pSet->IsEOF())
{
m_pSet->GetFieldValue("列1",str);
组合框1.AddString(str);
m_pSet->MoveNext();
}
m_pSet->Close();
在组合框里显示记录。我用的是Oracle做后台,编译没有问题,可是一运行,出现一个窗口“Invalid Column number <1>",我又用相同的代码连接到Access,但是没有一点的错误,我怀疑是不是Oracle哪里出了问题,请问各位大佬,欢迎指正!!!
CString str;
if(m_pSet->IsOpen())
m_pSet->Close();
m_pSet->Open(CRecordset::forwardOnly,"select 列1 from 表1");
while(!m_pSet->IsEOF())
{
m_pSet->GetFieldValue("列1",str);
组合框1.AddString(str);
m_pSet->MoveNext();
}
m_pSet->Close();
在组合框里显示记录。我用的是Oracle做后台,编译没有问题,可是一运行,出现一个窗口“Invalid Column number <1>",我又用相同的代码连接到Access,但是没有一点的错误,我怀疑是不是Oracle哪里出了问题,请问各位大佬,欢迎指正!!!
这一句 m_pSet->Open(CRecordset::forwardOnly,"select 列1 from 表1"); 要改成
m_pSet->Open(CRecordset::forwardOnly,"select '表1'.'列1' from '表1'" )
试一下,ORACLE对SQL语句书写比较严格,我也碰到类似的问题
我觉得应该是52001314(没有过节费:() 地回答m_pSet->GetFieldValue((short)0,str);
(shoret)0是什么意思?
我的表在和我用户名相同的案例中。表名和字段名不能家",只能加',否则出现错误.各种方法我都用了,不行啊。
如果只选一个字段:如select cjsl from table或select count(*)或select sum(cjsl)
对生成的CRecordSet的派生类(就是对应的表)作如下修改:
在.h中,删除其他的变量,只保留m_cjsl
在.cpp中,构造函数中变量的初值同样只保留m_cjsl,同时修改m_nFields = 1;
在DoFieldExchange(CFieldExchange* pFX),同样也只保留一个即可.
编译运行.
如果是count(*),定义一个long的变量,参照上面的修改进行修改.
如果是select count(*),sum(cjsl) from tb这种两个以上的,同样保留2个变量就可以了,m_nFields = n.
这种方法其实很麻烦,相当一个SQL语句要对应一个类,没办法.
产生这种现象的原因,我想应该是CRecoedSet的问题,因为一次SQL查询如果只返回一个列,那其他的列在进行DoFieldExchange(CFieldExchange* pFX)时势必出错.
这也是本人初学CRecordSet时百思不得其解的问题.
希望我上面说的对你有用.