我有一个奇怪的问题,这个代码有效,但是当它达到10的值时它会停止递增它应该能够+1并使其成为11但它会停止。我不知道是什么导致了这一点,现在真的很困惑。
这是我的代码:
Dim i As Integer
i = Integer.Parse(TextBox1.Text) + 1
TextBox1.Text = i.toString()
可能有什么东西导致了这个吗?任何帮助或建议都会很乐意接受。提前致谢
答案 0 :(得分:2)
如果该代码是other recent question的修订版,则相关代码为:
Private Sub LoadValue( )
Dim i As Integer
Dim cmd As OleDbCommand = New OleDbCommand
With cmd
.CommandText = "SELECT MAX(Guard_ID) FROM Guard"
.CommandType = CommandType.Text
.Connection = Conn
.ExecuteNonQuery()
Dim reader As OleDbDataReader = cmd.ExecuteReader
If reader.Read Then
' posted code seems to be a
' revision of this:
TextBox1.Text = reader.GetString(0)
i = TextBox1.Text + 1
TextBox1.Text = i
reader.Close()
End If
End With
End With
问题不在于递增,而是在TEXT列上运行MAX查询。考虑ID为{"0", "1", "2", "10", "11"}
的表。该系列的MAX值是多少?由于该列是TEXT,因此完成了文本比较,答案不是" 11"但是" 2",因为字符2的值高于字符1,后者是"11"
和"10"
中的第一个数字("10"
<> 10
<> "ten"
)。
一旦有10条记录,您的MAX查询将只返回" 9"因为这是任何数字串的第一个字符的最大值。
在代码和数据库中,您希望视为数字的内容必须是数字类型。对于Date类型来说更是如此,将它们转换为字符串并没有帮助。解决方案是将数据库列类型从Text更改为Integer,也许是一个AutoNumber,让DB为您完成所有工作。
答案 1 :(得分:1)
我试过这个
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim i As Integer
Dim itb As Integer
'make sure the number in the tb is valid
If Integer.TryParse(TextBox1.Text, itb) Then
i = itb + 1
TextBox1.Text = i.ToString()
Else
'not a number
Stop
End If
End Sub
它的效果与预期一致。