2014-12-31 2 views
0

Я написал следующую программу, чтобы добавить «1» к коду, который мы назначаем почте, которая приходит в офис. Пользователь вводит ввод в форму, и запрос возвращает последний код, назначенный для государства и компании. Программа должна увеличить это число на 1. Пример TN08801401 (TN - COCODE 0880 Year - 14 - Sequence 01) теперь должен быть TN08801402.Добавление к результатам запроса

Программа работала нормально, пока запрос привел результат. Если ответ был нулевым (это означало, что это было первое состояние/компания/почта, которые у нас были, тогда я хотел, чтобы программа создала код. Пример WA08801501.

Проблема в том, что она дает мне только процедуру errorsub вместо . базовая программа

Спасибо,

Вот код следующим образом:

Private Sub form_load() 
Dim qryrslt As String 
Dim State As String 
Dim num As String 
Dim num1 As Integer 
Dim num2 As Integer 
Dim num3 As String 
Dim total As String 
Dim CoNo As String 
Dim yearseq As String 

On Error GoTo errorsub 


qryrslt = DLookup("[idkey]", "assignment_qry") 
State = Left(qryrslt, 6) 
num = Right(qryrslt, 4) 
If IsNumeric(num) Then 
    num1 = CInt(num) 
Else 
    num1 = 0 
End If 
num2 = num1 + 1 
num3 = CStr(num2) 
total = State + num3 

Me.TxtIdKey = total 


errorsub: 
    State = Forms!assignment_form!CmbState 
    CoNo = Forms!assignment_form!CmbCompany 
    yearseq = 1501 
    total = State + CoNo + yearseq 
    Me.TxtIdKey = total 
+0

не понимаю, что вы спрашиваете, что обратный запрос результат ?? – HaveNoDisplayName

+0

это швы типа несоответствия. Вы уверены, что результатом вашего запроса является строка? также лучше использовать «&» для объединения строки вместо «+» – scraaappy

ответ

0

Я думаю, что вам нужно нужно сделать проверку нулевой, прежде чем назначить государство & Num Сорта, как это.:

if (qryslt is not null) 
{State = Left(qryrslt, 6) 
num = Right(qryrslt, 4) 
If IsNumeric(num) Then 
    num1 = CInt(num) 
Else 
    num1 = 0 
End If 
num2 = num1 + 1 
num3 = CStr(num2) 
total = State + num3 

Me.TxtIdKey = total} 

Извините, если синтаксис не подходит для vb - это было какое-то время, но я надеюсь, что вы получите эту идею.

+0

Я изменил подпункт ошибки на «Нет Null.Now». Я получаю ошибку времени выполнения 424. qryrslt = DLookup («[idkey]» "assignment_qry") Если qryslt не пусто, то State = Left (qryrslt, 6) Num = Right (qryrslt, 4) Если IsNumeric (число) Тогда num1 = CInt (Num) Else num1 = 0 End If num2 = num1 + 1 num3 = CStr (num2) общее = состояние + num3 Me.TxtIdKey = общая Else State = Forms! assignment_for m! CmbState CoNo = Forms! assign_form!CmbCompany yearseq = 1501 total = State + CoNo + yearseq Me.TxtIdKey = всего Конец Если – SarahSedaii

1

Всегда проще объединять поля вместе, а не разделить их на части. Похоже, что ваш «idkey» - это одно поле, состоящее из нескольких значений. Вам было бы лучше использовать отдельное поле для каждого значения и объединить их по мере необходимости. Скажем, ваша таблица - tblPrograms. Полями будут ProgState (текст), ProgCode (текст), ProgYear (целое число), ProgSequence (integer). В любом месте, в котором вы нуждаетесь, вы можете объединить ProgState & "-" & ProgCode & ProgYear & ProgSequence. Получить следующую последовательность - простой поиск.

Dim intNewSequence as Integer 
intNewSequence = Nz(DMax("ProgSequence", "tblPrograms", "ProgState ='" & Forms!assignment_form!CmbState & "' AND ProgCode = '" & Forms!assignment_form!CmbCompany & "' AND ProgYear = " & Forms!assignment_form!ProgYear), 0) + 1 

Кроме того, это делает любые запросы, которые будут использовать любое из этих полей в предложении where, намного эффективнее.

+0

Я все еще очень новичок! Я не понимаю, что делает вышеуказанная программа? Должен ли я создавать новую таблицу с разделом idkey? – SarahSedaii

+0

Нет, вы не создаете новую таблицу. Кажется, что ваша текущая таблица имеет текстовое поле [IDkey], которое содержит такие значения, как TN08801401, которые вы создаете из разных элементов. Вместо этого одного поля вы должны удалить его и иметь отдельное поле для каждого элемента. Затем, где угодно, чтобы отобразить «idkey», вы просто объединяете все элементы вместе. – AVG

0

Я разделил добавление на два шага, чтобы сделать эту работу. Шаг 1 должен был найти последний в последовательности или создать по умолчанию:

Private Sub Command17_Click() 

Dim Qry As String 
Dim State As String 
Dim num As String 
Dim num1 As Integer 
Dim num2 As Integer 
Dim num3 As String 
Dim total As String 
Dim CoNo As String 
Dim yearseq As String 

Qry = "" & DLookup("IDKEY", "Assignment_qry") 

If Qry = "" Then 
    State = Forms!assignment_form!CmbState 
    CoNo = Forms!assignment_form!CmbCompany 
    yearseq = 1500 
    total = State + CoNo + yearseq 
    Me.TxtAssignment = total 
Else 
    Me.TxtAssignment = Qry 
End If 

End Sub 

Затем я добавил один в другой шаг: Private Sub Form_Load()

Dim qryrslt As String 
Dim State As String 
Dim num As String 
Dim num1 As Integer 
Dim num2 As Integer 
Dim num3 As String 
Dim total As String 
Dim CoNo As String 
Dim yearseq As String 

qryrslt = Forms!assignment_form!TxtAssignment 

State = Left(qryrslt, 6) 
num = Right(qryrslt, 4) 
    If IsNumeric(num) Then 
    num1 = CInt(num) 
    Else 
    num1 = 0 
    End If 
num2 = num1 + 1 
num3 = CStr(num2) 
total = State + num3 
Me.TxtIdKey = total 
Me.TxtCompany = Mid(State, 3, 5) 
Me.TxtCoName = DLookup("Name", "Newentry_coname_qry") 
Смежные вопросы