2016-05-23 4 views
0

Ich bin ein einfaches Stück SQL-Abfrage zu schreiben, eine Tabelle in meiner Testdatenbank zu aktualisieren, aber ich bin die Begegnung Probleme:Zugang VB Fehler 3061: Zu wenige Parameter, erwarteten 1

Public Sub UpdateStatus(TypeName As String) 
Dim DBase As Database 
Dim SQLCommand As String 
Dim qdfChange As QueryDef 
SQLCommand = "Update Case SET Status = 1 WHERE TypeName = '" & TypeName & "';" 
Debug.Print SQLCommand 

Set DBase = OpenDatabase("C:\TestDatabase\CaseSet.accdb") 
Set qdfChange = DBase.CreateQueryDef("", SQLCommand) 
qdfChange.Execute 
End Sub 

die Feldnamen in der Tabelle Fall stimmt mit denen in meiner SQL-Abfrage überein.

(Wenn dies von Wert ist, gehört diese Funktion in eine Form)

+0

Können Sie Ihre SQL direkt ausführen? Sind Ihre tatsächlichen Spalten-/Tabellennamen in Access ein reserviertes Wort? Welcher Datentyp ist 'bar' und' foo'? – JNevill

+0

foo ist Nummer, Bar ist Kurztext – Eddy

+0

Wird 'bar' richtig eingestellt? Kannst du einen Breakpoint auf die 'SQLCommand =' Zeile setzen und verifizieren, dass 'bar' einen Wert hat? – JNevill

Antwort

1

Case is a reserved word and TypeName is a VBA Function. die sie eine schlechte Wahl für Datenbank-Objektnamen macht.

Wenn Sie sie nicht umbenennen können, klammern Sie diese Namen in Ihrer SQL-Anweisung ein, damit die db-Engine sie als Objektnamen erkennt.

SQLCommand = "Update [Case] SET Status = 1 WHERE [TypeName] = '" & TypeName & "';" 
Verwandte Themen