【发布时间】:2017-06-20 05:37:44
【问题描述】:
我想从 VB6 迁移到 VB.NET,但还是菜鸟。如何使自动编号程序像 VB.NET (VB2012) 中的 VB6 中的代码,目前在我的代码下方。
在我之前的VB6代码下面,这个代码在addbutton_click时会起作用,它会显示CDEUSR005,因为之前的表中有4条记录,CDEUSR001,CDEUSR002,CDEUSR003,CDEUSR004。 Image sample that works in VB6
Sub autoNumber()
Rs_User.Requery
Set Rs_User = New ADODB.Recordset
strSQL = "SELECT userCode FROM tblUser ORDER BY userCode"
Rs_User.Open strSQL, Conn, adOpenDynamic, adLockBatchOptimistic
If Rs_User.BOF Then
NewCode = "CDEUSR001"
Exit Sub
Else
Rs_User.MoveLast
NewCode = Rs_User!userCode
userCode = Right(userCode, 3)
userCode = Val(userCode) + 1
If Len(userCode) > 5 Then
Exit Sub
End If
End If
userCode = "CDEUSR" & Format(NewCode, "000")
End Sub
这是我的VB.NET(VB2012)代码,当添加按钮时,会显示CDEUSER001,不显示CDEUSR005.Image sample that wont' works in VB.NET
Sub autoNumber()
sql = New Odbc.OdbcCommand("SELECT userCode FROM tblUser ORDER BY userCode", conn)
dr = sql.ExecuteReader
dr.Read()
If (xxxx which has same function with Rs_User.BOF) Then
NewCode = "CDEUSR001"
Exit Sub
Else
NewCode = Microsoft.VisualBasic.Right(dr.GetString(0), 3)
NewCode = Val(NewCode) + 1
If Len(NewCode) > 5 Then
Exit Sub
End If
End If
NewCode = "CDEUSR" & Format(NewCode, "000")
End Sub
【问题讨论】:
-
如果你有一个数据库,那你为什么不让它生成数字呢?
-
你的代码应该可以工作,显然条件
If (xxxx which has same function with Rs_User.BOF) Then在你的情况下总是返回true。 -
@jmcilhinney:我不知道怎么做......
-
@Fabio: hihi...VB.NET 的细微差别.....
-
看起来这是一个包含单行的表,您想查看查询是否返回了任何内容(意思是从 CDEUSR001 开始),否则将 1 添加到现有的数值数字。在这种情况下,您只需检查阅读器 .hasrows 是否使用您的起始编号,如果为 false,则分解并增加编号。如果我的假设不正确,请考虑从表中查询 LAST userCode 并从那里开始工作。