Как исправить эту ошибку компиляции: «Ожидается: выражение» - PullRequest
0 голосов
/ 17 февраля 2011

Когда пользователь обновляет статус отдельного дела, это изменение должно быть отмечено во всех случаях под номером счета.В VB я пытаюсь использовать следующий SQL для обновления таблицы информацией, которую пользователь ввел в форму.

DoCmd.RunSQL "UPDATE [Main Details] " & _

"SET [Main Details].[Status] = '" & Status & "' " & _

"AND [Main Details].[On Hold] = '" & On Hold & "' " & _

"WHERE   [Main Details].[Account] = '" & Account & "';"

Однако, я получаю ошибку компиляции, и я подозреваю, что эточто-то делать с «на удержании».Как я могу это исправить?Любая помощь с этим будет принята с благодарностью.

Для контекста, я смотрю на поле со списком «ReportSelection» в форме «Основные сведения».В процедуре события «После обновления» есть следующий код:

Private Sub
 ReportSelection_AfterUpdate()

     If ReportSelection = "Enforcement Letter" Or ReportSelection = "Fees
 Letter" Or ReportSelection = "Follow
 On Letter" Or ReportSelection =
 "Reminder Letter BO" Or
 ReportSelection = "Reminder Letter CR"
 Or ReportSelection = "Reminder Letter
 CT" Or ReportSelection = "Reminder
 Letter NNDR" Or ReportSelection =
 "Reminder Letter RTD" Or
 ReportSelection = "Reminder Letter SD"
 Then
                 CmbStatus = "HOLD Until"
                 [On Hold] = Date + 5
             End If

     DoCmd.RunSQL "UPDATE [Main Details] " & _
       "SET [Main Details].[Status] = '" & Status & "' " & _
       "AND [Main Details].[On Hold] = '" & On Hold & "' " & _
       "WHERE   [Main Details].[Account] = '" & Account &
 "';"

     DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, ,
 acMenuVer70

     Select Case Me!ReportSelection

     Case "Write Email"

         DoCmd.OpenForm "CaseEmail", acNormal, , , acFormEdit,
 acWindowNormal

         Exit Sub

     Case "Arrangement Letter"

         Set dbs = CurrentDb

        DoCmd.RunSQL "SELECT * FROM [Arrangements] " & _
             "WHERE [Client]  = '" & Me!Client & "' " & _
             "AND   [Account] = '" & Me!Account & "' " & _
             "AND   [Status]  = 'Made';"

         Set rst = dbs.OpenRecordset(SQL)

         On Error GoTo ArrangementNotFound

         rst.MoveFirst

         ' rst!PaymentCode

         rst.Close
         Set dbs = Nothing

         GoTo RunReport
          ArrangementNotFound:

         rst.Close
         Set dbs = Nothing

         MsgBox "No arrangement has been made for this account"

         Exit Sub

     Case "Reminder Letter", _
         "Reminder Letter BO", _
         "Reminder Letter CR", _
         "Reminder Letter CT", _
         "Reminder Letter NNDR", _
         "Reminder Letter RTD", _
         "Reminder Letter SD", _
         "Enforcement Letter", "Commital Letter"

         If [Status] = "HOLD" Then
             MsgBox "Order is on HOLD", vbExclamation
             Exit Sub
         End If

         If Me![Bailiff Name] <> "" Then
             MsgBox "Order is with " & Me![Bailiff Name], vbExclamation
             Exit Sub
         End If

         If [First Letter] <> 0 Then
             GoTo RunReport
         Else
             MsgBox "Order has not yet been 1st Noticed", vbExclamation
             Exit Sub
         End If

     End Select
      RunReport:

     Select Case Me!ReportSelection

     Case "Details - Account", "Nulla Bona - All Cases", "Arrangement
 Letter"

         WhereCondition = "[Client]='" & Me!Client & "' AND [Account]='" &
 Me!Account & "'"

     Case Else

         WhereCondition = "[Reference]=" & Forms![Main
 Details]!Reference

     End Select

     On Error GoTo InvalidReport

     DoCmd.OpenReport Me![ReportSelection], acViewPreview, ,
 WhereCondition, acWindowNormal

     Select Case Me!ReportSelection

     Case "Council Tax Seizure"

         '*** DO NOTHING ***

     Case "Details"

         If Me!Return Then

             Sleep 1000

             SendKeys "%(fp)v{ENTER}Z:\Returns\" & Me!Client
 & "\" & Trim(Me!Account) & "_" &
 Trim(Me!Summons) & ".pdf{ENTER}", True

             Sleep 500

             DoCmd.Close acReport, Me!ReportSelection, acSaveNo

         End If

     Case "Details - Account"

         If Me!Return Then

             Sleep 1000

             SendKeys "%(fp)v{ENTER}Z:\Returns\" & Me!Client
 & "\" & Trim(Me!Account) &
 ".pdf{ENTER}", True

             Sleep 500

             DoCmd.Close acReport, Me!ReportSelection, acSaveNo

         End If

     Case "Nulla Bona"

         If Me!Return Then

             Sleep 1000

             SendKeys "%(fp)v{ENTER}Z:\Returns\" & Me!Client
 & "\" & Trim(Me!Account) & "_" &
 Trim(Me!Summons) & "NB.pdf{ENTER}",
 True

             Sleep 500

             DoCmd.Close acReport, Me!ReportSelection, acSaveNo

         End If

         DoCmd.OpenReport "Details", acViewPreview, , "[Reference]=" &
 Forms![Main Details]!Reference,
 acWindowNormal

         If Me!Return Then

             Sleep 1000

             SendKeys "%(fp)v{ENTER}Z:\Returns\" & Me!Client
 & "\" & Trim(Me!Account) & "_" &
 Trim(Me!Summons) & ".pdf{ENTER}", True

             Sleep 500

             DoCmd.Close acReport, "Details", acSaveNo

         End If

     Case "Nulla Bona - All Cases"

         If Me!Return Then

             Sleep 1000

             SendKeys "%(fp)v{ENTER}Z:\Returns\" & Me!Client
 & "\" & Trim(Me!Account) &
 "NB.pdf{ENTER}", True

             Sleep 500

             DoCmd.Close acReport, Me!ReportSelection, acSaveNo

         End If

         DoCmd.OpenReport "Details - Account", acViewPreview, ,
 "[Client]='" & Me!Client & "' AND
 [Account]='" & Me!Account & "'",
 acWindowNormal

         If Me!Return Then

             Sleep 1000

             SendKeys "%(fp)v{ENTER}Z:\Returns\" & Me!Client
 & "\" & Trim(Me!Account) &
 ".pdf{ENTER}", True

             Sleep 500

             DoCmd.Close acReport, "Details - Account", acSaveNo

         End If

     Case Else

         '------------------------------------------+
         ' STAMP EACH CASE WITH TYPE OF LETTER SENT |
         '------------------------------------------+

         Set con = Application.CurrentProject.Connection

         SQL = "INSERT INTO [Free Type] ( Reference, [Text], Username ) " & _
             "SELECT DISTINCTROW Reference, '" & _
             ReportSelection & " Sent', '" & _
             [Forms]![Current User]![Initials] & "' " & _
             "FROM [Main Details] " & _
             "WHERE Client  = '" & [Forms]![Main Details]![Client] & "' "
 & _
             "AND   Account = '" & [Forms]![Main Details]![Account] &
 "';"

         con.Execute SQL

     End Select

     Exit Sub

 InvalidReport:

     MsgBox "This report is currently unavailable, please try again later."

End Sub

Также стоит упомянуть, что подобный фрагмент кода работает для другого поля со списком, без каких-либо соответствующих объявлений вкод.

Прошу прощения за то, что не предоставил много контекста раньше, это мой первый опыт в VB, SQL и Access.

1 Ответ

3 голосов
/ 17 февраля 2011

Краткий ответ: Не используйте пробелы в именах полей или таблиц.

Ясно, что вы остро нуждаетесь в улучшенном понимании основ Access, носейчас я просто сконцентрируюсь на том, чтобы преодолеть ваши нынешние препятствия.

Когда вы добавляете поле в форму в доступе с пробелами в имени поля, Access автоматически заменяет пробелы подчеркиванием.Таким образом, следующий код должен работать с вашей базой данных в том виде, в котором она в настоящее время разработана:

CurrentDb.Execute "UPDATE [Main Details] " & _
"SET [Main Details].[Status] = '" & Status & "' " & _
", [Main Details].[On Hold] = '" & On_Hold & "' " & _
"WHERE   [Main Details].[Account] = '" & Account & "';", dbFailOnError

Я также изменил AND на запятую в вашем выражении UPDATE, заменил DoCmd.RunSQL на CurrentDb.Execute на dbFailOnError, чтобы ваш запрос не вызывал диалоговых окон и не завершался сбоем (если вы отключаете предупреждения, как это делают большинство людей с DoCmd.RunSQL).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...