免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1306 | 回复: 2
打印 上一主题 下一主题

[C++] 一个查询对象赋参数打开的问题。高手请进。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-30 10:38 |只看该作者 |倒序浏览
strcpy(strSql,"SELECT
                COLUMN_NAME,   
                DATA_TYPE,   
                DATA_LENGTH,   
                NULLABLE,   
                DATA_DEFAULT,   
                decode((select count(*)   from   USER_CONS_COLUMNS   cons_col, USER_CONSTRAINTS   cons ,
                Entity b ,gen_code_info c
                where
                     b.entity_id=c.entity_id
                     and c.entity_id=:entityId
                     and c.version=:version
                     and cons.table_name=b.name  AND   cons.CONSTRAINT_TYPE='P'   
                     and   cons_col.constraint_name=cons.constraint_name   
                     and   cons_col.column_name=col.column_name), 0, 'N','Y')   PK_COL,
                     
                b.table_type_id as tableTypeId,
                c.service_name as serviceName,
                c.db_access as dbAccess,
                c.version as version
      
          FROM   USER_TAB_COLUMNS   col ,Entity b ,gen_code_info c
          where
                     b.entity_id=c.entity_id
                     and c.entity_id=:entityId
                     and c.version=:version
                     and col.TABLE_NAME=b.name");
    DEFINE_OCICMDPOINT(m_pSelect);

                m_pSelect->setSQL(strSql);
                userlog(" sqlStr = %s",strSql);
               
                 m_pSelect->setParameter("entityId",entityId);
                 m_pSelect->setParameter("version",version);
                 //m_pSelect->setParameter("entityId",entityId);
                 //m_pSelect->setParameter("version",version);
                
                 userlog(" entityId chen =%s",entityId);
                 userlog(" version chen=%s",version);
                
    m_pSelect->open();
    1.以上的代码是在一个查询对象中赋上sql语句,语句中要用到两个参数:entityId,:version.这两个参数要
    出现在两个位置上,为了你对这个两个参数有直观的认识,entityId是NUMBER(12)类型,version是VARCHAR2(6)
   
   2.我的问题很简单,在上面的查询语句中,要用到两个参数,:entityId和:version,这个两个参数
   要出现在两个位置中, 原先以为编译器找不到对应的参数,因为第一处出现的entityId和第二个
   出现的entityId是一样的,采用了不同名的方法,例如: 在语句出现的位置都改成 :entityId1,
   :version1,entityId2,:version2.这样他们的参数就不一样了,发现还是不能打开查询对象.
                    m_pSelect->setParameter("entityId1",entityId);
                   m_pSelect->setParameter("version1",version);
                 //m_pSelect->setParameter("entityId2",entityId);
                 //m_pSelect->setParameter("version2",version);
         3.有些奇怪的是,当我去掉最上面的位置的一组参数而直接取默认值时.而保留最下面的一组参数并
           赋值后,查询的对象是可以打开的.我试验过....
          
         4.我说的第2种情况就不能打开查询对象.
           很迷惑,请高手指点.....不胜感激.....

论坛徽章:
0
2 [报告]
发表于 2008-05-30 10:44 |只看该作者

回复 #1 chenzhihui 的帖子

难道没有回解答的人马?

论坛徽章:
0
3 [报告]
发表于 2008-05-30 10:58 |只看该作者
也许我说的太费解了。就是sql语句有两处要用到参数:entityId和:version,怎么给它赋值,把这个查询语句打开就可以了。。。呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP