Impossible de trouver l'objet dans la collection correspondant au nom demandé ou ordinale
Le code ci-dessous ne fonctionne pas sur cette procédure stockée. Il fonctionne sur les requêtes, et d'une autre procédure stockée.
Il ne sera pas de débogage.imprimer les valeurs de cette procédure stockée, et retourne un message d'erreur "impossible de trouver l'objet dans la collection correspondant au nom demandé ou ordinal"
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
- Ajouter une alerte sur
y
et faire un peu de débogage. Le eror message indique peut-être que le jeu n'a pas au moins 4 champs... - Quelle est la valeur de y.Champs.Le comte quand il arrive à la ligne de débogage??
- zéro. il doit être de 10...
- Ensuite, il me semble que le problème est dans la procédure stockée et non pas de ce code.
- la procédure stockée fonctionne très bien dans SSMS. j'ai aussi testé une autre procédure stockée paramétrée qui fonctionne..
- Et cette procédure stockée en interne renvoie un tableau de la même manière que "un autre procédure stockée" que vous avez testé?
- oui.
- qu'est ce qu'une montre, et comment puis-je ajouter?
- Une montre affiche la valeur d'une formule ou d'une expression tout en vous déboguer votre code. Il peut également être définie sur arrêt lorsque l'expression est vraie. Debug --> Ajouter un espion
- Lorsque vous l'exécutez dans SSMS êtes-vous de vous connecter avec les mêmes informations d'identification Windows Accès à l'aide pour ouvrir une session dans le domaine actuel de l'utilisateur?
- oui. Je pense que le problème peut être dans les paramètres... IDK si VBA aime le " 0 " en tant que paramètre, bien qu'il s'en est très bien avec les autres storedproc que j'ai testé. J'ai lu que vous êtes censé utiliser les objets de Commande pour parametized requêtes. Est-ce la question?
- J'utilise des objets de Commande quand je le fais alors que je pense que la façon dont vous le faites, il doit travailler, je ne peux pas dire pour sûr que nous pouvons le faire fonctionner sans un objet de Commande. Semble comme il faut mais je ne pense pas que j'ai jamais fait de cette façon.
Vous devez vous connecter pour publier un commentaire.
Assurez-vous que la procédure stockée est inclus dans les éléments sécurisables pour l'utilisateur, vous accédez à la base de données avec. Pour cela:
Sur votre SSMS en vertu de sécurité --> sous utilisateurs --> clic droit sur l'utilisateur, vous accédez --> Cliquez sur Propriétés --> cliquez sur l'onglet éléments Sécurisables et regardez la liste et assurez-vous que la procédure stockée est inclus. Sinon, cliquez sur le bouton "recherche" --> cocher la case "objets spécifiques" radio --> cliquez sur OK --> cliquez sur "type d'Objet" bouton sur le nouveau popup --> Vérifiez les procédures Stockées case --> cliquez sur OK --> assurez-vous que la procédure stockée est sur la liste et cliquez sur OK --> Maintenant, après il est répertorié sous le sécurisables --> Sous Explicite onglet rechercher pour "Exécuter" dans la colonne Autorisation --> Trouver celui qui a "dbo" sous Mandant de la Colonne et de vérifier la Subvention de case à cocher et cliquez sur OK.
Ce qui devrait résoudre le problème.
dbo
dans le Concédant de la colonne de la procédure stockée je vais avoir un problème avec. Tous les conseils?assurez-vous que votre jeu de données n'est pas filtré. jeu votre jeu de données du filtre à false, alors le fermer, puis l'utiliser. Ou mieux, utilisez un chiffon propre jeu de données.
votre procédure stockée possible d'avoir une version de débogage, sélectionnez-t-il? Vous souhaitez peut-être la sélection de la valeur d'une variable comme une instruction de débogage. Cela aurait pour effet de remettre les deux tables. votre jeu de données sera à la première, sauf si indiqué autrement.
Ce faire, dans SSMS et assurez-vous qu'il est de retour que vous pensez qu'il est de retour.
Aussi, à décomposer le problème, faire 4 de débogage.imprimer les relevés de compte et de voir lequel(s) pause.
De l'examen de votre déclaration de @MarkBalhoff la colonne count zero, l'autre possibilité est que vous avez tout simplement oublié de retourner vos résultats à la fin de la requête. Êtes-vous la construction d'une table temporaire?
le dernier (ou pratiquement) déclaration dans votre sp doit être
similaire pour le calcul de la valeur correcte dans une fonction , puis oublier de le retourner.