1

我正在尝试制作一个小型请求管理应用程序,我需要为每个请求生成一个请求号。

请求编号应采用以下格式: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做的事情

4

3 回答 3

1

怎么样:

txtTransID="R" & i.ToString().PadLeft(8, "0"c)

编辑:

您需要将 i 声明为您的新请求编号。

这里是示例代码。

   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 
于 2013-09-19T16:09:13.333 回答
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),第二个参数是开头有多少个字母,以便函数可以正确解析它。

于 2013-09-20T20:49:39.080 回答
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
于 2013-09-21T17:33:18.863 回答