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 が返されます。番号の前にゼロが必要です。2 番目のリクエスト番号は 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.ParsetryをCInt(YOUR_STRING)、サポートしていない場合はobject.ToStringtryCStr(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

補足として、古いリクエスト番号を string ではなく整数として保存してみませんか?

"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

コードを見ると、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 に答える
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 番目の引数は、関数が正しく解析できるように先頭に何文字あるかです。

于 2013-09-20T20:49:39.080 に答える