MS ACCESS 2003 - Question sur la transmission d'informations d'une forme non liée à un rapport

StackOverflow https://stackoverflow.com/questions/2065214

Question

J'utilise quelque chose comme ci-dessous pour transmettre des informations d'une forme non liée à un autre (excusez le pas de contrôle d'erreur):

Sub Button_Click()
Dim db as DAO.database
Dim rs as DAO.recordset
Dim sql as string

docmd.openform "NextFormIamAbouttoUse"

sql = "SELECT * FROM tblMain WHERE MainID = " & Me.As_MainID & ";"

' usually debug here

set db = currentdb
set rs = db.openrecordset(sql)

if rs.eof then
   msgbox "oops message"
else
     rs.movefirst
          [Forms]![NextFormIamAbouttoUse].as_mainID = rs![MainID]
          [forms]![NextFormIamAbouttoUse].value1 = rs![value1]
          ' etc

     rs.close
     set db = nothing
     set rs = nothing
     sql = ""
 end if

 'error stuff
  end sub

ok donc je peux utiliser ce genre de chose pour transférer des informations à partir de formulaires aux rapports ainsi? voir que j'utilise beaucoup de formes pleines de zones de texte comme des tableaux de bord, où les zones de texte ne servent pas d'entrée, affiche plutôt des informations rapides plutôt.

utilisateur de naviguer à travers différentes formes pour construire le « tableau de bord comme » formes à leur goût alors à un moment donné à imprimer. donc je voulais construire Sosie semblable (en fonction des données offertes) des rapports à chaque point afin qu'ils puissent imprimer la page d'information qu'ils ont construit à travers ces formes.

donc j'ai essayé de le faire avec un rapport:

Sub Button_Click()
Dim db as DAO.database
Dim rs as DAO.recordset
Dim sql as string

docmd.openreport "ReportTester", acViewPreview

sql = "SELECT * FROM tblMain WHERE MainID = " & Me.As_MainID & ";"

' usually debug here

set db = currentdb
set rs = db.openrecordset(sql)

if rs.eof then
   msgbox "oops message"
else
     rs.movefirst
          [reports]![ReportTester].as_mainID = rs![MainID]
          [reports]![ReportTester].value1 = rs![value1]
          ' etc

     rs.close
     set db = nothing
     set rs = nothing
     sql = ""
 end if

 'error stuff
  end sub

comme une supposition, et il ne fonctionne pas. aucune erreur, ou quoi que ce soit. juste n'affichera aucune information de cette façon. ne passera pas même le numéro d'identification.

Je pense que l'ouverture du rapport acViewPreview signifie que je ne peux pas ajouter de l'information à ces zones de texte après le fait, mais je ne suis pas certain jsut. Donc, des conseils à ce sujet est très apprécié. merci!

Était-ce utile?

La solution

Vous avez quelques options. Vous pouvez créer une requête, et transmettre les valeurs de contrôle de forme dans les valeurs là-bas, créant ainsi une 1 requête d'enregistrement, que vous pouvez baser votre rapport sur.

Chaque colonne ressemblera à ceci: Données: Forms! [MyForm] [MyControl]

Ou vous pouvez simplement lier les contrôles du formulaire directement aux commandes du rapport.

Vous devrez laisser la forme ouverte contenant les valeurs alors que le rapport est ouvert, si vous optez pour l'une de ces routes. Aucun code complexe nécessaire.

Autres conseils

Je pense que je manque quelque chose. Pourquoi ne pas vous suffit Recordsource du rapport soit le même que celui Recordsource du formulaire, puis filtrer à l'exécution à un MainID particulier dans l'argument WhereCondition du DoCmd.OpenReport? Ensuite, vous pouvez exécuter le rapport sans avoir besoin de la forme ouverte.

A moins que la forme est non liée, ou a des champs qui sont coûteux à calculer à la volée, je ne vois aucun avantage à lier le rapport à la forme du tout.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top