2017-08-09 2 views
0

Ich weiß, dass dies eine redundante Frage ist, konnte aber kein ähnliches Szenario für mich finden.Zugriff: "Zu wenige Parameter."

Ich habe eine gespeicherte Abfrage, die, wenn sie ausgeführt wird, Werte aus den Filtern eines geöffneten Formulars auswählt und Ergebnisse anzeigt. Alles funktioniert.

Hier ist, wie die Abfrage aufgerufen wird:

cmd.CommandType = adCmdStoredProc 
cmd.CommandText = "qry" 
Dim rsReport As New ADODB.Recordset 
rsReport.CursorType = adOpenKeyset 
rsReport.CursorLocation = adUseClient 
rsReport.Open cmd 

Ich versuche, die gleiche Abfrage von VBA zu verwenden, um Excel-Dateien zu erstellen, die heruntergeladen oder per E-Mail werden können, und ich bin immer ein „zu wenige Parameter“ Fehler jetzt (während das Formular noch offen ist). Kann mir jemand in die richtige Richtung weisen, warum das so ist?

+0

Ich kann verstehen, dass Sie ein Problem haben, aber wir können nicht ohne Code helfen. – Prisoner

+0

@Prisoner Warten Ich werde es aktualisieren, danke – Babar

Antwort

1

Wenn Sie eine Abfrage mit VBA ausführen, können Sie keine offenen Formulare referenzieren. Sie müssen alle Parameter explizit angeben. Wenn Sie die Abfrage mit DoCmd.RunQuery ausführen, können Sie Parameter unter Verwendung von DoCmd.SetParameter festlegen. Wenn Sie die Abfrage mit QueryDef.Execute ausführen, können Sie Parameter mit der QueryDef.Parameters Sammlung festlegen.

Wenn Sie die Abfrage sind die Ausführung eines ADODB.Command verwenden, können Sie Parameter festlegen, indem Parameter an die Command.Parameters Sammlung, in der folgenden Art und Weise angehängt:

Command.Parameters.Append Command.CreateParameter ("MyParameterName", adInteger, adParamInput) wo adInteger ist der Typ. Danach müssen Sie den Parameter noch auf einen Wert setzen, indem Sie Command.Parameters("MyParameterName").Value = MyValue

einstellen. Weitere Informationen zu ADODB-Parametern finden Sie unter this question. Sie sind ein bisschen komplizierter.

Alle Parameter müssen vor dem Ausführen der Abfrage ausgefüllt werden.

+0

die in Frage stehende cmd ist ADODB.Command Objekt. Welche Methode wird verwendet? – Babar

+0

Noch eine Frage, ich verweise die Felder direkt in der Abfrage. Also erstelle ich die Parameter mit der gleichen Namenskonvention? Das ist "Forms! Form1! Textfeld" – Babar

+1

Normalerweise können Sie nur Parameter in der Reihenfolge hinzufügen, und es wird funktionieren, aber für 'ADODB' bin ich mir nicht ganz sicher. Ich gehe normalerweise nur für '?' Platzhalter für Parameter in der Abfrage. –

Verwandte Themen