web-dev-qa-db-fra.com

Comment passer un paramètre dans un rapport d'accès par programme?

J'ai un accès existant MDB. J'ajoute un bouton de commande à un formulaire existant qui exécute un rapport existant. Le changement en cours est que ce bouton doit passer dans un paramètre contenant l'ID de l'enregistrement étant signalé sur - actuellement, le rapport fonctionne sur chaque enregistrement de la MDB.

J'ai modifié la requête que le rapport fonctionne pour utiliser un paramètre pour la valeur d'identification, de sorte que maintenant lorsque le bouton a cliqué sur l'accès aux invites d'accès à l'enregistrement à signaler et que le rapport s'affiche comme si cela devrait être utilisé.

Cependant, je ne peux pas que la vie de moi comprendre comment transmettre un paramètre dans le rapport de la requête à utiliser. Comment puis-je faire ceci?

15
Electrons_Ahoy

La méthode Docmd.OpenReport a divers arguments, dont l'un est un énoncé:

DoCmd.OpenReport"rptReport", acViewPreview,,"ID=" & Me.ID

C'est-à-dire

expression.OpenReport(ReportName, View, FilterName, WhereCondition, WindowMode, OpenArgs)
22
Fionnuala

Mon approche générale de ce type de problème consiste à enregistrer les critères de la base de données, généralement une table de contrôle qui a une ligne. Ensuite, pour référencer vos critères, vous mettez une requête en paranthèse qui renvoie une valeur, des critères souhaités. Dans votre cas, ce serait quelque chose comme:

(select reportID from control)

L'avantage de cette technologie est que la table de contrôle se souvient des paramètres pour la prochaine fois que vous exécutez le rapport. Bien entendu, reporterid serait liée à un champ sous une forme. J'aime aussi le fait que vos requêtes sont isolées des formes; Ils peuvent être exécutés indépendamment des formes.

3
Knox

La clause WHERE de la DOCMD.OPENREPORTE est une chaîne qui utilise le même format que la clause WHERE dans une instruction SQL.

La raison de mettre les paramétrage que vous interrogez sur la DOCMD au lieu de l'enregistrement du rapport est la flexibilité. Vous avez peut-être besoin d'ouvrir le rapport sans parmiemètre/retournez tous les enregistrements ou avoir la possibilité de filtrer sur différents champs.

2
JeffO

Je sais que c'est un ancien post mais cela m'a pris un peu. Une erreur était "Utilisation non valide des ParRen", mais le problème était l'espace sur le nom de champ. Je créais un rapport d'une DB que quelqu'un a fait l'erreur commune, les espaces.

Pour passer un paramètre paramètre à une requête via la clause WHERE lorsque le champ Database a un espace, utilisez cet exemple:

DoCmd.OpenReport "rptByRegionalOffice", acViewPreview, , "[" & "Regional Office" & "]" & "=" & "'" & cmboOffices.Value & "'"

Si vous pensez à cela, vous pouvez voir que cela produira where [Regional Office]='string value' Comme vous l'attendez dans l'accès SQL.

1
john

Pourquoi tout le monde veut faire cela si compliqué, je ne sais pas.

  1. enregistrez les records de votre rapport sans paramètres.

  2. comme suggéré par Remou, transmettez les critères de l'argument approprié de DOCMD.OPENREPORTE.

Essayer de le faire toute autre manière consiste à résister aux méthodes naturelles pour accomplir des tâches dans l'accès.

1
David-W-Fenton