我编写了一点代码,是数据库的,连接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哪里出了问题,请问各位大佬,欢迎指正!!!

解决方案 »

  1.   

    m_pSet->GetFieldValue((short)0,str);
      

  2.   

    这个为什么在access可以运行,在oracle不行呢?好象没有问题。
      

  3.   

    Invalid  Column  number  
    这一句 m_pSet->Open(CRecordset::forwardOnly,"select  列1  from  表1");  要改成
    m_pSet->Open(CRecordset::forwardOnly,"select '表1'.'列1' from '表1'" )
    试一下,ORACLE对SQL语句书写比较严格,我也碰到类似的问题
      

  4.   

    to CQP(CQP)不是的吧?
    我觉得应该是52001314(没有过节费:() 地回答m_pSet->GetFieldValue((short)0,str);
      

  5.   

    请详细介绍一下m_pSet->GetFieldValue((short)0,str);
    (shoret)0是什么意思?
      

  6.   

    都不正确呀,我调了一个晚上,也没有结果,我感觉是sql语句的问题,但是怎么改都也不对。
      

  7.   

    这不是连接出错,你用下面SQL语句试试:select sysdate from dual(Oracle语句),可能是表名或列名的问题。
      

  8.   

    你用try{} catch()来套一下看呀,看具体是什么错???
      

  9.   

    在ORACLE中你的那个表是不是在和你的用户名同名的那个案例中呀?如果不是就要用CQP(CQP)所写的,还有去看看你的表定义,在表名,字段名上面有没有加"",如果有就要区分大小写。
      

  10.   

    我套过了,提示Invalid column number<1>.或则中文:无效的列或索引。
    我的表在和我用户名相同的案例中。表名和字段名不能家",只能加',否则出现错误.各种方法我都用了,不行啊。
      

  11.   

    我的表,列定义在Oracle里面都是大写的,系统自认的,没有“”。
      

  12.   

    告诉大家我的办法:
    如果只选一个字段:如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时百思不得其解的问题.
      

  13.   

    但是用Access可以运行的,什么缘故?
      

  14.   

    本人用的数据库是SQL SERVER,对Access没认真研究过,不过有些SQL语句与SQL SERVER是不同的,如SQL SERVER上update customer set ldate='2003-1-1',在Access上就会出错,需要将单引号去掉(好象是这样的).
    希望我上面说的对你有用.