2016-01-19 4 views
0

Для моей формы почти все бумажные формы должны иметь идентификатор, который вы вводите в одно поле. Однако в нескольких формах будут отсутствовать идентификаторы, и я хочу сгенерировать в другое поле идентификационный номер на основе ввода пользователем информации.Не могу понять, как исправить ошибку нуля

Что я хочу сделать, это создать 4-значное число, где первая цифра взята из поля usernum, а последние 3 цифры просто подсчитываются.

В первый раз, когда они нажимают кнопку, в поле usernum ничего еще нет, и я думаю, что это может быть причиной ошибки моего времени выполнения 94?

ниже мой код и линия ошибки

Private Sub Command100_Click() 
'on click of button InsightId is generated 
Me.idnum = NewInsightID() 
End Sub 

Public Function NewInsightID() As Long 


Dim lngNextID As Long 

'Find highest ID in the test table and add 1 
lngNextID = (Me.usernum * 1000) + DMax([idnum], "test", "usernum=" & Me.usernum) + 1 
'ABOVE IS THE LINE WITH ERRORS 

'Assign function the value of the Next ID 
NewInsightID = lngNextID 

End Function 

Я пробовал различные обходные пути, но ни один из них работал

ниже того, что я пытался и не работал:

lngNextID = (Me.usernum * 1000) + 1 + NZ(DMax([idnum], "test", "usernum=" & Me.usernum),0) 

lngNextID = (Me.usernum * 1000) + 1 + Nz(DMax([idnum], "test", "usernum=" & Nz(Me.usernum, 0)), 0) 

lngNextID = (Me.usernum * 1000) + 1 + DMax([idnum], "test", "usernum=" & Nz(Me.usernum, 0)) 

EDIT 2: Хорошо, сделали процесс. Вроде бы это работает, за исключением двух вещей - по какой-то причине она не начнется с 001, только 002. После этого она постепенно увеличивается на единицу. Главное - ошибка, если usernum пуст. Опять же, я не ожидаю, что это когда-либо будет, но когда дело доходит до ввода данных, я думаю, что лучше всего предположить самых тупых возможных пользователей, и поскольку я буду в отпуске, когда эта база данных будет использована, я не хотите получать сообщения об ошибках. Я пытаюсь сделать это, чтобы, если usernum пуст, они получают сообщение, которое сообщает им об ошибке и отменяет суб, но по какой-то причине оно не работает, а затем в коде появляется сообщение об ошибке Run ошибка 3075 отсутствует в выражении запроса 'usernum ='. Я предположил, что для создания этой проблемы необходимо создать окно сообщения, но я не могу заставить окно сообщения работать.

Private Sub Command100_Click() 
'on click of button InsightId is generated 
If usernum = Null Then 
    Beep 
    MsgBox ("you cannot leave usernum blank") 
    Cancel = True 
Else: Me.idnum = NewInsightID() 
End If 
End Sub 

Public Function NewInsightID() As Long 


Dim lngNextID As Long 


'Find highest ID in the test table and add 1 

    If DMax("idnum", "test", "usernum=" & Me.usernum) = Null Then 
     lngNextID = (Me.usernum * 1000 + 1) 
    Else: 
     lngNextID = 1 + Nz(DMax("idnum", "test", "usernum=" & Me.usernum), Me.usernum * 1000 + 1) 
    End If 

'Assign function the value of the Next ID 
NewInsightID = lngNextID 

End Function 

EDIT3: ааа Я решил это невероятно !!

Private Sub Command100_Click() 
'on click of button InsightId is generated 
If IsNull(Me.usernum) Then 
    Beep 
    MsgBox ("you cannot leave usernum blank") 
    Cancel = True 
Else: Me.idnum = NewInsightID() 
End If 
End Sub 

Public Function NewInsightID() As Long 


Dim lngNextID As Long 


'Find highest ID in the test table and add 1 

    If DMax("idnum", "test", "usernum=" & Me.usernum) = Null Then 
    lngNextID = (Me.usernum * 1000 + 1) 
    Else: 
    lngNextID = 1 + Nz(DMax("idnum", "test", "usernum=" & Me.usernum), Me.usernum * 1000) 
    End If 

    'Assign function the value of the Next ID 
    NewInsightID = lngNextID 

End Function 
+0

ли вы имеете в виду, что пользователь Безразлично» t есть какие-либо записи в тестовой таблице, но они сами имеют идентификатор? То, что вы хотите сделать, это что-то вроде «Если DMax (.....) Is Null Then lngNextID = Me.usernum * 1000) + 1 Else lngNextID = Right (DMax (....), 3) + 1" Однако , если есть идентификаторы, введенные пользователем, которые больше, чем созданные этим процессом, вы можете столкнуться с некоторыми проблемами. – OpiesDad

+0

Что такое usernum? – justkrys

+0

В основном каждому пользователю (человеку, вводящему данные) присваивается однозначное число, которое является usernum. Usernum - это первая цифра для расчетного идентификатора, который является idnum. idnum будет пустым для всех пользователей до тех пор, пока первый раз они не нажмут кнопку, чтобы указать, что они должны их генерировать. Я попробую решение OpiesDad и посмотрю, как это работает – eee333

ответ

0

Это один близко:

lngNextID = (Me.usernum * 1000) + 1 + NZ(DMax([idnum], "test", "usernum=" & Me.usernum), 0) 

но первый параметр DMax (название поля или выражение) является строка тоже:

lngNextID = (Me.usernum * 1000) + 1 + NZ(DMax("idnum", "test", "usernum=" & Me.usernum), 0) 
Смежные вопросы