2016-09-28 10 views
-2

Я работал над следующим кодом, когда пользователь нажимает на кнопку, чтобы сохранить и перейти к новой записи, в которой Access определяет самый высокий идентификатор клиента, используемый для установки местоположения, а затем добавляет к нему 1. Перед сохранением записи и перехода к новой записи. Во время работы с другими ошибками, но я не могу пройти мимо объекта ошибки, требуемого в этой строке. "Me.ClientID = IIf (DMax (" [ClientID] "," tClientinfo "," [CorpsName] = "&" 'defaultcorps' ") Является Null, 0, DMax (" [ClientID] "," tClientinfo "," [CorpsName] = "&" 'defaultcorps' ")) + 1"Ошибка времени выполнения 424 Требуемый объект

Чем больше я смотрю на подобные вопросы, тем больше смущает, я понимаю, что не так с кодом. Заранее спасибо за любые предложения Давида

Private Sub Save_Record_Click() 

'declare variables for default values 
Dim defaultinterviewr As String 
Dim defaultcorps As String 


'Variables get their values 
defaultinterviewr = Me.Interviewer.Value 
defaultcorps = Me.Corps.Value 

'Check to see if ClientID field is Blank. 
If IsNull(Me.ClientID) Then 

'Check that Corps field is filled in 

If IsNull(Me.Corps) Then 
    MsgBox "Corps must be entered before saving record.", vbOKOnly 
    Me.Corps.SetFocus 
'set client id base on corps by finding the highest id and adding 1 to that number 
Else 
Me.ClientID = IIf(DMax("[ClientID]", "tClientinfo", "[CorpsName]=" & "'defaultcorps'") Is Null, 0, DMax("[ClientID]", "tClientinfo", "[CorpsName]=" & "'defaultcorps'")) + 1 
End If 
End If 
MsgBox "Done", vbOKOnly 

'save record 
'DoCmd.RunCommand acCmdSaveRecord 
'Me.stateidnum1 = "" 
'open new record 
'DoCmd.GoToRecord , , acNewRec 

'set field default value 
'Me.Interviewer.Value = defaultinterviewr 
'Me.Corps.Value = defaultcorps 

'Me.Child_Subform.Form.AllowAdditions = True 

End Sub 

ответ

0

Я думаю, вам нужно начать с выяснения, если ваш DMAX заявление() правильно продуцирующие результаты. Следующее, что я вижу и которое, вероятно, является вашим главным виновником, заключается в том, что вы используете Expression IIf() внутри VBA. Выражение IIf(), которое вы используете, будет работать внутри запроса или в текстовом поле, но VBA имеет собственный блок оператора If, который вы правильно используете в строках, предшествующих ему.

Я бы на самом деле использовать функцию Nz, чтобы упростить его еще следующим образом:

ОБНОВЛЕНО Основе вашего комментария ниже Я снова посмотрел на свой общий код и заметил, что «defaultcorps» является переменной и не значение, которое я изначально думал, что вы пытаетесь фильтровать. Вы переносили переменную в кавычки. Мой обновленный ответ должен сработать для вас.

Me.ClientID = (Nz(DMax("[ClientID]", "tClientinfo", "[CorpsName]= '" & defaultcorps & "'"),0)+1) 
+0

Anthony Спасибо, что указав, что функция DMAX не работает, это моя проблема. Хотя я не могу понять правильный синтаксис для поля, таблицы и критерия. – DavidR

+0

См. Мой обновленный ответ выше. Я пропустил тот факт, что defaultcorps - это переменная, а не значение данных. Это обновление должно производить то, что вы ищете. –

+0

Anthony Спасибо, что работает код. – DavidR

Смежные вопросы