Comment puis-je corriger cette erreur de compilation: “Attendu: l'Expression”

Lorsqu'un utilisateur met à jour l'état d'un cas particulier, que le changement doit être apposé dans tous les cas, sous le numéro de compte. Au sein de la VB, je suis en train d'utiliser la requête SQL suivante pour mettre à jour le tableau avec les informations que l'utilisateur a mis dans la forme.

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

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

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

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

Cependant, j'obtiens une erreur de compilation, et je soupçonne que c'est quelque chose à faire avec "en attente". Comment puis-je corriger cela? Toute aide à ce sera grandement apprécié.

Pour le contexte, je suis à la recherche à une zone de liste modifiable appelée "ReportSelection" sur un formulaire intitulé "Principaux Détails". Au sein de la "Après mise à Jour" procédure d'événement, il y a le code suivant:

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

Aussi, il vaut la peine de mentionner que d'un autre morceau de code qui fonctionne pour une autre zone de liste déroulante, sans aucun type de déclarations pertinentes dans le code.

D'excuses pour ne pas fournir beaucoup de contexte avant, c'est ma première incursion dans VB, SQL et Access.

  • Avez-vous de la variable On Hold littéralement de cette façon dans votre code ? Je ne pense pas que visual basic autoriser les espaces dans les noms de variables.
  • Oui, je le fais. On Hold est le nom du champ. J'ai essayé d'utiliser Me![On Hold] aussi, mais il ne fonctionne pas. Tf le nom du champ est formaté de cette manière, est-ce que je peux faire si vb ne le permet pas?
  • Il n'y a pas de VB variable déclarée dans votre code "en attente". Ce sera peut-être possible de l'Accès, mais il n'est PAS possible en VB. Publier vos VB déclarations de variables et je suis sûr que quelqu'un peut vous aider à résoudre votre code.
  • Dim Client_Save, Type_Save, Response As String Dim Received_Save As Long Dim OriginalDue As Double Dim con As Object Dim SQL, WhereCondition, BailiffNameSave As String Dim dbs As Database, rst, rstFLA As Recordset Ce sont les déclarations. Merci.
  • Edit ton post et ajouter la totalité du bloc de code avec plein de contexte. Vous n'êtes pas fournir suffisamment d'informations pour quiconque de vous aider. Par exemple, je ne vois pas de variables d'État ou un Compte auquel l'original de votre message semble indiquer existent.
  • J'ai editted mon post original. Je vous remercie pour votre temps.
  • En plus de la réponse par mwolfe02, il y a quelque chose d'autre dans le besoin d'être corrigés dès que possible: Vos déclarations ne font pas ce que vous pensez sans doute qu'ils sont. VB(A) exige que le type de chaque variable dans un groupe de déclaration, et silencieusement affecte le type de Variant à toutes celles qui ne l'ont pas fait. Prendre juste une partie, vous souhaitez: Dim Client_Save As String, Type_Save As String, Response As String au lieu de ce que vous avez.

InformationsquelleAutor teens | 2011-02-17