Element kann nicht gefunden werden in der Auflistung entsprechenden auf den angeforderten Namen oder Ordinalzahl
Den code unten funktioniert nicht auf diese gespeicherte Prozedur. Es funktioniert auf Abfragen, und andere gespeicherte Prozedur.
Wird es nicht Debuggen.drucken Sie die Werte für diese gespeicherte Prozedur, und wieder die Fehlermeldung "Element kann nicht gefunden werden in der Auflistung entsprechenden auf den angeforderten Namen oder Ordinalzahl"
Dim x As ADODB.Connection
Set x = New ADODB.Connection
x.ConnectionString = "Provider=a;Server=b;Database=c;Trusted_Connection=yes;"
x.Open
Dim y As ADODB.Recordset
Set y = New ADODB.Recordset
x.CommandTimeout = 0
Set y = x.Execute("exec SP_storedprocedure 0")
Debug.Print y(0), y(1), y(2), y(3)**--the problem is here**
y.Close
Set y = Nothing
x.Close
Set x = Nothing
- Fügen Sie eine Uhr auf
y
und einige debugging. Die eror Nachricht vielleicht zeigt an, dass das recordset nicht mindestens 4 Felder... - Was ist der Wert von y.Felder.Zählen, wenn es um die debug-Zeile??
- null. es sollten 10 sein...
- Dann klingt es für mich so, das problem ist in der gespeicherten Prozedur und nicht diesen code.
- die gespeicherte Prozedur funktioniert gut in SSMS. ich habe auch getestet, eine weitere parametrisierte gespeicherte Prozedur, die funktioniert..
- Und diese gespeicherte Prozedur, die intern gibt eine Tabelle in der gleichen Weise wie "eine andere gespeicherte Prozedur", die Sie getestet?
- ja.
- was ist eine Uhr, und wie kann ich es hinzufügen?
- Eine Uhr zeigt den Wert einer Formel oder einem Ausdruck, während Sie den code Debuggen. Es kann auch festgelegt werden, zu brechen, wenn der Ausdruck true ist. Debug --> Hinzufügen-Uhr
- Wenn Sie führen Sie es in SSMS werden Sie sich mit der gleichen Windows-Anmeldeinformationen Zugriff auf log-in, wie der aktuelle domain-Benutzer?
- ja. Ich denke, das problem kann in den Parametern... IDK, wenn VBA mag die '0' als parameter, obwohl es gut mit dem anderen storedproc habe ich getestet. Ich habe gelesen, Sie sind wirklich verwenden sollte Command-Objekten für parametized Abfragen. Ist das das Problem?
- Ich verwende Command-Objekte, wenn ich es tun, also während ich denke, die Art und Weise Sie es tun sollten funktioniert, kann ich nicht sicher sagen, ob wir es machen können, ohne ein Command-Objekt. Scheint, wie es sollte, aber ich glaube nicht, dass ich je gemacht habe, das es so ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stellen Sie sicher, dass die gespeicherte Prozedur enthalten ist, in sicherungsfähige Elemente für den Benutzer, den Sie Zugriff auf die Datenbank mit. Für diese:
Auf Ihre SSMS unter Sicherheit --> unter Benutzer --> rechts-klicken Sie auf den Benutzer, den Sie Zugriff auf --> Klicken Sie auf Eigenschaften --> klicken Sie auf sicherungsfähige Elemente-Registerkarte, und überprüfen Sie die Liste und stellen Sie sicher, dass die gespeicherte Prozedur enthalten ist, die es gibt. Wenn nicht, klicken Sie auf "suchen" Taste --> überprüfen Sie die "spezifischen Objekte" radio --> klicken Sie auf OK --> klicken Sie auf "Objekt-Typ" - Taste auf neues popup --> Check Gespeicherte Prozeduren checkbox --> klicken Sie auf OK --> Stellen Sie sicher, dass die gespeicherte Prozedur aufgeführt ist, und klicken Sie auf OK --> Jetzt, nachdem es aufgeführt ist unter sicherungsfähige Elemente --> Unter der Registerkarte Explizit die Suche nach "Excute" in die Erlaubnis Spalte --> Finden Sie die eine, die "dbo" unter Grantor-Spalte und überprüfen Sie die Grant-checkbox und klicken Sie auf OK.
Dieser sollte das problem lösen.
dbo
in die Grantor-Spalte für die gespeicherte Prozedur, ich habe da ein problem mit. Irgendwelche Ratschläge?stellen Sie sicher, dass Ihr Datensatz wird nicht gefiltert. legen Sie das dataset-filter auf false, dann schließen Sie es dann verwenden Sie es. Oder besser, verwenden Sie ein sauberes dataset.
tut Ihr gespeicherte Prozedur möglich, einen debug-wählen Sie in der it? Möglicherweise sind Sie der Auswahl den Wert von einigen Variablen wie eine debug-Anweisung. Dies hätte den Effekt, der Rückkehr zwei Tabellen. Ihr Datenbestand wird auf die erste, wenn nichts anderes gesagt wird.
Tun dies in SSMS und stellen Sie sicher, es ist das zurück, was Sie denken, es wird zurückkehren.
Auch, zu brechen ist das problem, machen 4 debug.print-Anweisungen und sehen, welche(s) brechen.
Anbetracht Ihrer Aussage zu @MarkBalhoff über die Anzahl der Spalten null ist, die andere Möglichkeit ist, dass Sie einfach vergessen, zurückzukehren, Ihre Ergebnisse am Ende der Abfrage. Bauen Sie eine temp-Tabelle?
den letzten (oder in der Nähe der letzten) Anweisung in der sp werden sollte
ähnlich der Berechnung den richtigen Wert in einer Funktion , dann vergessen Sie es zurückgeben.