这是我的程序,报错是 "因为结果集是由一个连接条件生成的,导致不能执行定位请求."CDatabase *db=new CDatabase();
db->Open(NULL,FALSE,FALSE,"ODBC;DSN=xxx;UID=xxx;PWD=xxx");
Cnewrs rs(db);     //Cnewrs是我从CRecordset生成的,选了TABLE1和TABLE2,
rs.m_strFilter = "[TABLE1].[CAR_ID]=[TABLE2].[CAR_ID]";
rs.Open();
rs.MoveFirst();
while( !rs.IsEOF() )
{
         AfxMessageBox( rs.m_CAR_DRIVER );
rs.MoveNext();
}

解决方案 »

  1.   

    建议使用Oracle的专用接口OCI,我曾经用过,很好用!
      

  2.   

    好像不是odbc的问题,因为单表查询是好的
      

  3.   

    提示的错误信息我觉得你的查询可能是复合查询,而你所写的程序语句是没有错误,你具体的没有说清楚,gzing
      

  4.   

    我遇到过类似的问题,错误出现在不能进行复合查询,如:select * from tab1 where tab1.a in select b from tab2;我使用的是OCI,操作ORACLE,同理,你的问题出现在:rs.m_strFilter = "[TABLE1].[CAR_ID]=[TABLE2].[CAR_ID]";这里
      

  5.   

    我已经找到错误原因了,是oracle的NUMBER类型vc默认转成了CString,但实际无法识别,不知道怎么解决,郁闷。
      

  6.   

    详细情况是这样的:我是用vc++6.0通过odbc连oracle8i,
    需要查询两个相关表中的数据.
    查询语句类似于
    select * from table1,table2 where table1.column1=table2.column1
    这样没有什么问题,但如果其中有一个表要用到 Oracle 的 blob 类型,就会报错:
    "因为结果集是由一个连接生成的,导致不能产生定位请求".
    如果不是查两个表,而单独查某一有 blob 类型的表,又正常.请问这个问题应该如何解决?
      

  7.   

    如果涉及到blob类型的数据,直接等,是不正确的,table1.column1=table2.column1,具体怎么解决我也不知道,帮你UP
      

  8.   

    我既不需要比较blob类型数据,也不需要提取blob数据,而是只要两个表中有一个包含blob数据就会出错.
      

  9.   

    哦,我明白你的意思了
    我在用OCI函数的时候,也有同样的问题,通过执行SQL语句,得到结果集,Fetch的时候,如果存在BLOB类型的数据,就出错,后来查找相关资料知道,在取BLOB类型(OCI_DTYPE_LOB)的数据时,与普通的fetch不同,是通过OCILobRead()来实现。我们所使用的方式不一样,我是通过接口来操作数据库,你是使用类来操作,我建议使用接口,难度大一些,但比较灵活,继续关注