2015-05-14 4 views
0

Я застрял в этой инструкции SQL в своем кодировании VBA. Я пытаюсь выполнить запрос на обновление с помощью DLookUp, но я, возможно, неправильно написал код. В основном я хочу, чтобы WorkerID и Workername пришли из DLookUp из идентификатора пользователя, используемого для получения данных здесь GetNextAssignee("program", "Language", "username"). Я получаю сообщение об ошибке необходимого объекта здесь:Объект Обязательная ошибка MS Access SQL

"UPDATE CFRRR,attendance SET assignedto = " & GetNextAssignee("program", "Language", "username") & ", assignedby = " & Forms!Supervisor!NavigationSubform!assignedby.Value & ", Dateassigned = #" & Now & "#, actiondate = #" & Now & "#, Workername = " & DLookup(attendance.username, "attendance", "username = UserID") & ", WorkerID = " & DLookup(attendance.userID, "attendance", "WorkerID = UserID") & " WHERE CFRRRID = " & rs!CFRRRID 

Вот полный код для контекста:

Set db = CurrentDb 
    strSQL = "SELECT CFRRRID, [program], [language] FROM CFRRR WHERE assignedto Is Null" 
    Set rs = db.OpenRecordset(strSQL, dbOpenDynaset) 
    If Not rs.BOF And Not rs.EOF Then 
     While Not rs.EOF 

      strSQL = "UPDATE CFRRR,attendance SET assignedto = " & GetNextAssignee("program", "Language", "username") & ", assignedby = " & Forms!Supervisor!NavigationSubform!assignedby.Value & ", Dateassigned = #" & Now & "#, actiondate = #" & Now & "#, Workername = " & _ 
           DLookup(attendance.username, "attendance", "username = UserID") & ", WorkerID = " & DLookup(attendance.userID, "attendance", "WorkerID = UserID") & " WHERE CFRRRID = " & rs!CFRRRID 
      Debug.Print strSQL 
      db.Execute strSQL, dbFailOnError 
      rs.MoveNext 
     Wend 
    End If 

Спасибо!

+0

Каковы типы данных 'assignto',' assignby', 'Workername',' username', 'WorkerID'. Можете ли вы отредактировать сообщение, чтобы включить метод «GetNextAssignee» – PaulFrancis

ответ

0

Неверные выражения DLookup. Целевое поле DLookup также является строковым выражением. Таким образом, это должно быть:

... & DLookup("username", "attendance", "username = UserID") & ... 

В вашей SQL имеется несколько случаев возникновения этой ошибки.

В дополнение к этому, вы должны проверить выражение критериев, а также:

..."username = UserID"... 

Это выглядит подозрительно ко мне. Но я не могу сказать, правильно это или нет, не зная таблицу и структуру данных.

+0

Возможно, вы здесь ... «username = UserID» ... потому что я пытался сказать в кодировке, что имя пользователя получено из UserID, поэтому в таблице посещаемость UserID - это первичный ключ, а '[имя_пользователя] - это просто поле в' 'посещаемость' '. UserID будет по существу связан с UserID, однако я уверен, что не написал это правильно. Все еще изучаю SQL. Также, когда я внес изменения, которые вы предложили, я получил несоответствие типов данных в выражении критериев. Благодаря! – Lilly

+0

Возможно, вы используете что-то вроде ... & DLookup («имя пользователя», «посещаемость», «UserID =» & Me! FormControlWithUserId.Value) и ... для достижения того, что вы пытаетесь сделать здесь. – PhilS

+0

Я действительно получил ответ в другом месте. Мне нужно было изменить свой код на '& DLookup (« имя пользователя »,« посещаемость »,« userID = »и« GetNextAssignee »(« программа »,« язык »,« имя пользователя »)). Спасибо. – Lilly