您的位置:程序门 -> ms-sql server -> 应用实例



将varchar值"newid"转换为数据类型为int的列时发生语法错误,晕死我了


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


将varchar值'newid'转换为数据类型为int的列时发生语法错误,晕死我了[已结贴,结贴人:arm7tdmi]
发表于:2007-10-02 18:05:48 楼主
连接一个数据库,查询一条记录
表sys_sequenceinfo里有两个字段id,seqtime,当然还有其它字段.id为int类型,seqtime为datetime类型

crecordset   rs(&m_db);
int   newid   =   -1;
cdbvariant   var;
rs.open(crecordset::dynaset,"select   max(id)   from   sys_sequenceinfo");
if(var.m_dwtype!=dbvt_null)
        newid   =   var.m_ival;
rs.close();

rs.open(crecordset::dynaset,"select   seqtime   from   sys_sequenceinfo   where   id   =   'newid'");
rs.close();


前面一条查询语句没出问题,后一条查询语句老出现"将varchar值'newid'转换为数据类型为int的列时发生语法错误",这是怎么搞的???
急死我了,请各位解答一下,谢谢。
发表于:2007-10-02 18:21:591楼 得分:10
--try:

rs.open(crecordset::dynaset,"select   seqtime   from   sys_sequenceinfo   where   id   ="+newid);  
发表于:2007-10-02 20:57:212楼 得分:0
还是不行呀,没有出现上述错误了,但会出现"debug   assertion   failed"错误
发表于:2007-10-02 21:15:573楼 得分:5
id为int类型

id   =     'newid'
数值型和字符串能等吗?
发表于:2007-10-03 10:29:024楼 得分:0
那么这条查询语句该怎么写啊??help   me!
发表于:2007-10-03 10:58:295楼 得分:35
rs.open(crecordset::dynaset,"select   seqtime   from   sys_sequenceinfo   where   id   =     'newid'");  

--------------------------------------------------

这句中,newid相对于sql语句而言,是外部变量,不能直接放在单引号内。

应该通过连接字符串的方式连接到sql语句中。

newid是整型,需要先转换为字符型,如:

rs.open(crecordset::dynaset,"select   seqtime   from   sys_sequenceinfo   where   id   =   '   +   转换为字符型后的newid   );  

关于vc中如何转换,你应该知道吧
发表于:2007-10-03 11:30:436楼 得分:0
楼上说的似乎接近答案了,但好像还不行呀。
char   newchar;
newchar=(char)newid;
rs.open(crecordset::dynaset,"select   seqtime   from   sys_sequenceinfo   where   id="+newchar);

出现"debug   assertion   failed"错误


cstring   newchar;
newchar.format("%d",newid);
rs.open(crecordset::dynaset,"select   seqtime   from   sys_sequenceinfo   where   id="+newchar);

出现"无效的字段名或字段索引"错误

发表于:2007-10-03 11:53:457楼 得分:0
--直接用

rs.open(crecordset::dynaset,"select   seqtime   from   sys_sequenceinfo   where   id   =   (select   max(id)  
from   sys_sequenceinfo)");  


--或

rs.open(crecordset::dynaset,"select   top   1   seqtime   from   sys_sequenceinfo   order   by   id   desc");
发表于:2007-10-03 17:15:208楼 得分:0
上面的语句没有报错,
出现"无效的字段名或字段索引"错误是由于
rs.getfieldvalue(8,newtime);

导致的,

cstring   newtime;

newtime是cstring类型的,8对应的一个datetime类型的字段。

也就是用rs.getfieldvalue(8,newtime)把一个datetime类型的记录存储到newtime里会出错。

能有办法将datetime型的记录保存在变量里吗?是哪种变量?
谢谢。
发表于:2007-10-03 22:04:549楼 得分:0
用我上面给出的两个sql语句都可以获得你要的值。

但是关于获得值如何赋给c++中的变量,这个问题最好到c++版去问一下。
发表于:2007-10-04 15:07:2910楼 得分:0
thank   you.
今天搞了搞,
应该用rs.getfieldvalue((short)0,var,slq_c_long);
newtime=var;
就可以把sql数据保存在newtime里,但newtime要选个合适的类型,
这个类型就是搞不定呀.


快速检索

最新资讯
热门点击