VC++程序中执行SQL语句,在oracle中查询,语句如下:SELECT A5.*,A10.ZKWHBEF,A10.ZKWARBEF FROM 
(SELECT A3.GIS,A3.RECORDTIME,
to_number(A3.RTIA)/100*A4.BIANBI RTIA,
to_number(A3.RTIB)/100*A4.BIANBI RTIB,
to_number(A3.RTIC)/100*A4.BIANBI RTIC,
A3.RTUA,
A3.RTUB,
A3.RTUC,
to_number(A3.RTPA)/10000*A4.BIANBI RTPA,
to_number(A3.RTPB)/10000*A4.BIANBI RTPB,
to_number(A3.RTPC)/10000*A4.BIANBI RTPC,
to_number(A3.RTQA)/100*A4.BIANBI RTQA,
to_number(A3.RTQB)/100*A4.BIANBI RTQB,
to_number(A3.RTQC)/100*A4.BIANBI RTQC,
to_number(A3.ZKWH)/100*A4.BIANBI ZKWH,
to_number(A3.ZKWAR)/100*A4.BIANBI ZKWAR,
to_number(A3.FKWAR)/100*A4.BIANBI FKWAR
FROM
(SELECT * FROM 
(SELECT * FROM MOBITEXA.AE_DB_RTUTABLE 
WHERE RECORDTIME=to_date('2008-09-10 23:00:00','yyyy-mm-dd hh24:mi:ss') 
AND RTIA<>'FFFF' AND RTPA<>'FFFFFF' AND ZKWH<>'FFFFFFFF') A1
LEFT JOIN MOBITEXA.AE_DB_RTINFO A2 ON A1.RTUID=A2.MAN) A3 
LEFT JOIN MOBITEXA.AS_BYQ_BB A4 ON A3.GIS=A4.GIS_ID) A5
LEFT JOIN 
(SELECT A8.GIS,
to_number(A8.ZKWH)/100*A9.BIANBI ZKWHBEF,
to_number(A8.ZKWAR)/100*A9.BIANBI ZKWARBEF
FROM
(SELECT * FROM 
(SELECT * FROM MOBITEXA.AE_DB_RTUTABLE 
WHERE RECORDTIME=to_date('2008-09-11 00:00:00','yyyy-mm-dd hh24:mi:ss') 
AND RTIA<>'FFFF' AND RTPA<>'FFFFFF' AND ZKWH<>'FFFFFFFF') A6
LEFT JOIN MOBITEXA.AE_DB_RTINFO A7 ON A6.RTUID=A7.MAN) A8 
LEFT JOIN MOBITEXA.AS_BYQ_BB A9 ON A8.GIS=A9.GIS_ID) A10 ON A5.GIS=A10.GIS调试执行完毕之后,HRESULT结果为S_OK,查询结果也正确。(将这句直接拿到orcale中运行,验证没有问题)
但是VC调试框内会显示:0x7c812a5b 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0012d710 处的 long请问:这是由于什么原因引起的呢?会不会对以后的运行产生影响?如何解决这个异常?盼高人解答,多谢!

解决方案 »

  1.   

    你用的什么方法访问的数据库?? 应当对你的程序进行异常的捕获与处理。
    如果你是用的ADO的话,用下面代码把你的代码包起来,看看提示什么异常信息?
    try
    {
      //你的代码
    }
    catch(_com_error &e)
    {
      AfxMessageBox(e.Description());
    }
      

  2.   

    用的OLEDB问题已经找到了,调用时用的Open()函数中多了个&propSet参数,用默认的就对了……谢谢!