这是我的程序,报错是 "因为结果集是由一个连接条件生成的,导致不能执行定位请求."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();
}
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();
}
需要查询两个相关表中的数据.
查询语句类似于
select * from table1,table2 where table1.column1=table2.column1
这样没有什么问题,但如果其中有一个表要用到 Oracle 的 blob 类型,就会报错:
"因为结果集是由一个连接生成的,导致不能产生定位请求".
如果不是查两个表,而单独查某一有 blob 类型的表,又正常.请问这个问题应该如何解决?
我在用OCI函数的时候,也有同样的问题,通过执行SQL语句,得到结果集,Fetch的时候,如果存在BLOB类型的数据,就出错,后来查找相关资料知道,在取BLOB类型(OCI_DTYPE_LOB)的数据时,与普通的fetch不同,是通过OCILobRead()来实现。我们所使用的方式不一样,我是通过接口来操作数据库,你是使用类来操作,我建议使用接口,难度大一些,但比较灵活,继续关注