CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  数据库

SQLBindParameter 绑定时间类型时出问题,在线等高手回

楼主oldliu(老刘)2006-11-03 11:36:56 在 VC/MFC / 数据库 提问

谁知道用ODBC时时间类型怎么转换,在Oracle数据库里面是date型(有时分秒),我用SQL_TYPE_TIMESTAMP   来绑定怎么会错呢?高手请回,在线等!  
  retcode   =   SQLBindParameter(hstmt1,   2,   SQL_PARAM_INPUT,   SQL_C_TYPE_TIMESTAMP,  
                      SQL_TYPE_TIMESTAMP,   0,   0,   &dsRecTime,   0,   &cbRecTime); 问题点数:20、回复次数:4Top

1 楼119365374(砖头)回复于 2006-11-03 16:24:13 得分 0

嗯....oracle里的时间实质上是float型,timestamp实质上是二进制数据,当然绑不上.试试绑float看.Top

2 楼oldliu(老刘)回复于 2006-11-06 10:44:52 得分 0

楼上的大哥,不行啊,还是出错  
  执行的时候返回-1  
  而且用SQLGetDiagRec()也得不到错误信息  
   
  同时还发现另一个问题  
  retcode   =SQLBindParameter(hstmt1,   5,   SQL_PARAM_INPUT,   SQL_C_FLOAT,  
                      SQL_REAL,   0,   0,   &sValue,   0,   &cbValue);  
  不指定精度,插入数据库的只有0.0,指定后后返回“大于列指定的精度”的错误  
  数据库里面是number[4,1]类型Top

3 楼oldliu(老刘)回复于 2006-11-06 10:46:19 得分 0

全程序如下:  
  void   BindTest()  
  {  
  SQLSMALLINT       sTimeWgt;  
  SQLSMALLINT       sFreqWgt;  
  SQLFLOAT         sValue;  
  TIMESTAMP_STRUCT   dsRecTime   ;  
  SQLCHAR       szDeviceId[14];  
  char     szState[200];  
  char     szErrorMsg[1024];  
  long   cbNativeError,pcbEMsg;  
  //SQLCHAR       sz[30];  
  SQLINTEGER     cbTimeWgt   =   0,   cbFreqWgt   =   0,   cbRecTime   =   0,   cbDeviceId   =   SQL_NTS,  
          cbValue   =   0;  
  SQLRETURN   retcode;  
   
  retcode   =   SQLPrepare(hstmt1,   (unsigned   char   *)"INSERT   INTO   clrt_ns_102_2006(DEVICEID,RECTIME,FREQWGT,TIMEWGT,LVALUE)   VALUES   (?,?,   ?,   ?,   ?)",   SQL_NTS);  
   
  if   (retcode   ==   SQL_SUCCESS   ||   retcode   ==   SQL_SUCCESS_WITH_INFO)   {  
   
  retcode   =   SQLBindParameter(hstmt1,   1,   SQL_PARAM_INPUT,   SQL_C_CHAR,  
                      SQL_CHAR,   14,   0,   &szDeviceId,   0,   &cbDeviceId);    
        retcode   =   SQLBindParameter(hstmt1,   2,   SQL_PARAM_INPUT,   SQL_C_TYPE_TIMESTAMP,  
                      SQL_FLOAT,   0,   0,   &dsRecTime,   0,   &cbRecTime);        
        retcode   =   SQLBindParameter(hstmt1,   3,   SQL_PARAM_INPUT,   SQL_C_SSHORT,  
                      SQL_INTEGER,   0,   0,   &sFreqWgt,   0,   &cbFreqWgt);    
        retcode   =   SQLBindParameter(hstmt1,   4,   SQL_PARAM_INPUT,   SQL_C_SSHORT,  
                      SQL_INTEGER,   0,   0,   &sTimeWgt,   0,   &cbTimeWgt);  
        retcode   =SQLBindParameter(hstmt1,   5,   SQL_PARAM_INPUT,   SQL_C_FLOAT,  
                      SQL_REAL,   0,   0,   &sValue,   0,   &cbValue);  
   
        strcpy((char   *)szDeviceId   ,   "100004");      
        dsRecTime.year   =   2006;  
        dsRecTime.month   =   12;  
        dsRecTime.day   =   20;  
        dsRecTime.hour   =   10;  
        dsRecTime.minute   =   10;  
        dsRecTime.second   =   50;  
        sTimeWgt   =   1;  
        sFreqWgt   =   1;  
        sValue   =   2.1;      
   
        retcode   =   SQLExecute(hstmt1);      
        char     szState[200];  
        char     szErrorMsg[1024];  
        long   cbNativeError,pcbEMsg;  
        ::SQLGetDiagRec(SQL_HANDLE_STMT,hstmt1,1,(unsigned   char   *)szState,&cbNativeError,(unsigned   char   *)szErrorMsg,1024,(short   *)&pcbEMsg);  
       
  }Top

4 楼oldliu(老刘)回复于 2006-11-06 10:49:21 得分 0

create   table   CLRT_NS_102_2006  
  (  
      DEVICEID   VARCHAR2(14),  
      RECTIME     DATE,  
      FREQWGT     NUMBER(1),  
      TIMEWGT     NUMBER(1),  
      LVALUE       NUMBER(4,1),  
      SPARE         VARCHAR2(10)  
  )Top

相关问题

关键词

得分解答快速导航

  • 帖主:oldliu

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo