Создайте код, подобный «50VIABC001», и если значение «ABC» появится снова, тогда добавьте «002», «003» и т. Д.? - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть сетка со многими именами, когда пользователь нажимает на любое имя, которое связывает детали этого имени с текстовыми полями, раскрывающимся списком и т. Д.,

В этом у меня есть текстовое поле, которое генерирует код для этого имени.

Я генерирую код примерно так.Первые 4 цифры «50VI» останутся одинаковыми для всех, за которыми следуют 1 буква от каждого «firstName», «MiddleName» и «LastName».Наконец, он должен иметь трехзначное число, начинающееся с «001», «002» и т. Д.

Эта последняя 3-значная цифра должна определяться на основе 3 букв из имени, отчества и фамилии.

Пример: 50VI FMS 001, где F = F irstName M = M iddleName S = S irName .. Если другой человек имеет подобноеформат имени, тогда код должен быть «50VIFMS002» и т. д.

Я написал код в Vb.NET, но теперь получаю значение «50VIFMS000», где «000» везде одинаково.Так что я застрял с последней 3-значной частью.

Public Function GenNewCode()

    Dim code As String = "50VI" & String.Concat(txtFName.Text.Trim, 
          txtMName.Text.Trim, txtLName.Text.Trim).ToUpper().Substring(0, 3)

    Dim exec As New ExecuteQuery

    Dim CNT As String = exec.ExecuteScalar("SELECT COUNT(*) FROM ADMDOCTMST WHERE DOCTCODE LIKE '" & code & "%'")

    txtNewCode.Text = code & CNT.PadLeft(2, "0")

    Return code

End Function

1 Ответ

0 голосов
/ 25 апреля 2018

Сначала включите Option Strict.

Public Function GenNewCode()

Функции имеют тип возврата.

Dim code As String = "50VI" & String.Concat(txtFName.Text.Trim,  txtMName.Text.Trim, txtLName.Text.Trim).ToUpper().Substring(0, 3)

Проверьте скобки..ToUpper и .Substring действуют на объединенную строку;не каждая строка в отдельности, поэтому вы получаете первые три символа в имени.

txtNewCode.Text = code & CNT.PadLeft(2, "0")

Вы начинаете свою последовательность с 001, поэтому, если ваш запрос возвращает количество 3. Это будет 001, 002, 003. Вам нужно увеличить счетчик, чтобы получить новое значение.Кроме того, .PadLeft будет работать только до 9. Проверьте длину увеличенного значения, затем добавьте соответственно.

Return code

Вы не изменили значение кода, так как ваш исходный код DIM, так что вы не получитезначение, которое вы ожидаете.Установка кода & ... в текстовое поле не меняет значение кода.

Public Function GenNewCode() As String
        Dim FName As String = "Mary"
        Dim MName As String = "ruth"
        Dim LName As String = "Smith"
        Dim FInitial As String = FName.Substring(0, 1).ToUpper
        Dim MInitial As String = MName.Substring(0, 1).ToUpper
        Dim LInitial As String = LName.Substring(0, 1).ToUpper
        Dim code As String = "50VI" & FInitial & MInitial & LInitial
        Dim exec As New ExecuteQuery
        Dim CNT As Integer = CInt(exec.ExecuteScalar("SELECT COUNT(*) FROM ADMDOCTMST WHERE DOCTCODE LIKE '" & code & "%'"))
        CNT += 1
        Dim cntStr As String = CStr(CNT)
        Dim Padding As Integer = 3 - cntStr.Length 'You want a total length of 3 so subtract existing length from 3
        code &= cntStr.PadLeft(Padding, CChar("0"))
        Return code
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...