请求编号生成 - ASP

时间:2013-09-19 15:20:09

标签: sql asp-classic vbscript

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

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

3 个答案:

答案 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