2011-11-16 31 views
1

我必须做一个计算,以在传统的ASP整数值,但我不断收到“类型不匹配”的错误在这条线:X = tempID + 1如何在Classic ASP中对数据库值进行计算?

这是我的代码:

Set TheRS = Conn.Execute("select top 1 xx from W_TABLE order by IDX desc") 
    tempID = TheRS("xx") 
    X = tempID + 1 
    TheRS.Close 
    Set TheRS = nothing 

tempX的类型是“用户自定义类型”...我假设这就是为什么它不会让我给它添加1 ...我怎么能做到这一点?

+0

不应该是'X = tempID + 1'吗? –

+1

请多关注您的标签选择,特别是在“asp”标签的弹出帮助文本中的大“不使用”消息。 –

+1

他们说什么+你可以添加如果不是TheRS.eof然后......结束,如果围绕tempID = RS(“xx”),以确保您的记录集得到结果 –

回答

0

通过改变选择使它工作。

select top 1 xx+1 from W_TABLE order by IDX desc 

谢谢大家!

0

如果你不想打扰你的数据库查询返回这应该做的伎俩:

X = CInt("0" & tempID) + 1 
+0

连接“0”不会影响转换为数值。 – Dee

+0

确定它不会影响转换 - 但正如明确表示的那样:如果他不在意数据库查询是否返回任何内容,则+1仍然可以工作。这不是解决如何正确处理数据库查询结果,但一个简单的技巧,我不明白为什么我的答案值得downvote。 – Filburt

1
  1. 检查记录是文件的末尾第一。 (If TheRS.Eof Then
  2. 在我看来,“xx”,不管那是什么,实际上并不是一个整数。你确定你的查询返回一个数字答案吗?
  3. 有可能是因为你不能给它添加1。尝试将它转换为整数第一:X = CInt(tempID) + 1
  4. 的Response.Write(tempID)加1之前,看看看重它具有

不粗鲁,但这些代码是难以辨认! W_TABLE? IDX? XX?这些都是可怕的变量和模式名称。我真诚地希望你刚刚清理了你的真实的,适当命名的变量,以便更抽象,更令人困惑的变量。

3

我有这个问题的数字/十进制列。 ADO将该值作为十进制类型返回,但VBScript不支持十进制类型。关于您可以使用包含Decimal类型值的变量做的唯一事情是使用CInt,CDbl或任何其他转换函数对其进行转换。我的猜测是,如果你要检查VarType(tempID)的值,你会看到14,这对应于vbDecimal

要解决此问题,您应该使用CDbl(或CInt,如果您不关心小数部分)转换该值。

相关问题