我正在尝试创建一个小型请求管理应用程序,我需要为每个请求生成一个请求编号。
请求编号应采用以下格式:R00000001,后跟R00000002,依此类推。以下是我写的代码。
If oRs.EOF Then
txtTransID="R"&"00000001"
else
segments=Split(oRs.Fields("REQ_ID"),"R")
txtTransID=segments(1)+1
end if
第一个请求正确生成,但下一个请求将返回R2。我需要在数字前有零,第二个请求数应该变为R00000002。
请告知如何做到这一点。如果还有其他方法可以做到这一点,那也没关系。我使用VB作为语言。
我尝试过使用toString函数,但它似乎不起作用,因为我使用VB作为我的语言。请帮助我用VB做的事情
答案 0 :(得分:1)
怎么样:
txtTransID="R" & i.ToString().PadLeft(8, "0"c)
修改强>
您需要将我声明为新的请求编号。
此处为示例代码。
Public Class oRs
Public Shared EOF As Boolean = False
Public Shared Fields As New Dictionary(Of String, Object)
End Class
Protected Overrides Sub Test()
oRs.Fields.Add("REQ_ID", "R00000001")
Dim txtTransID As String = Nothing
' Your code starts here '
If oRs.EOF Then
txtTransID = "R" & "00000001"
Else
Dim strOldRequest As String = System.Convert.ToString(oRs.Fields("REQ_ID"))
Dim iOldRequest As Integer = Int32.Parse(strOldRequest.Split("R"c)(1))
iOldRequest += 1
txtTransID = "R" & iOldRequest.ToString().PadLeft(8, "0"c)
End If
End Sub
如果您的经典ASP未声明Int32.Parse
,请尝试CInt(YOUR_STRING)
,如果它不支持object.ToString
尝试CStr(YOUR_Number)
,如果您没有PadLeft
,将其添加为普通函数:
Function Rpad (sValue, sPadchar, iLength)
Rpad = sValue & string(iLength - Len(sValue), sPadchar)
End Function
Function Lpad (sValue, sPadchar, iLength)
Lpad = string(iLength - Len(sValue),sPadchar) & sValue
End Function
在旁注中,为什么不将旧的请求编号保存为整数而不是字符串?
"R" & (iOldNr + 1).ToString().PadLeft(8, "0"c)
将数据及其演示文稿分开。
如果你仍然需要在数据表中使用R0000xy,你总是可以这样做一个SQL查询:
SELECT
'R' + RIGHT('00000000' + CAST(REQ_ID AS varchar(20)), 8) AS RequestNr
FROM T_Requests
在另一个旁注中,您并不真正需要任何代码,您的问题非常简单,甚至可以完全用SQL完成:
SELECT
'R' + RIGHT('00000000' + CAST(ISNULL(MAX(REQ_ID), 0) + 1 AS varchar(20)), 8) AS NextRequestNr
FROM T_Requests
答案 1 :(得分:0)
您可以使用这样的通用功能:
Function GetNextValue(rawValue, numOfLetters)
Dim strNumericPart, result
If Len(rawValue)<=numOfLetters Then
Err.Raise vbObjectError + 10000, "Illegal value: '" & rawValue & "', must have at least " &_
(numOfLetters + 1) & " characters"
Exit Function
End If
strNumericPart = Right(rawValue, Len(rawValue) - numOfLetters)
If Not(IsNumeric(strNumericPart)) Then
Err.Raise vbObjectError + 10001, "Illegal value: '" & rawValue & "', last " &_
(Len(rawValue) - numOfLetters) & " characters must be numeric"
Exit Function
End If
result = (CLng(strNumericPart) + 1) & ""
Do Until Len(result)=Len(strNumericPart)
result = "0" & result
Loop
result = Left(rawValue, numOfLetters) & result
GetNextValue = result
End Function
这将通过字符串操作生成所需的值。用法示例:
segments = oRs("REQ_ID")
txtTransID = GetNextValue(segments, 1)
第一个参数是原始值(例如R00000001
),第二个参数是您在开头有多少个字母,因此函数可以正确解析它。
答案 2 :(得分:0)
查看您的代码,看起来您只是错过了0填充。你想写一个填充的数字,我相信。
Dim txtTransID, segments, incrementedNumber, paddedNumber
If oRs.EOF Then
txtTransID="R00000001"
Else
segments=Split(oRs.Fields("REQ_ID"),"R")
incrementedNumber = segments(1)+1
paddedNumber = Right(String(8,"0") & incrementedNumber, 8)
txtTransID = "R" & paddedNumber
End If