MS Access 2003 - Domanda sul passaggio di informazioni da una maschera non associata a un report
-
20-09-2019 - |
Domanda
Io uso qualcosa di simile di seguito per passare le informazioni da una forma non legata ad un altro (scusate il non controllo degli errori):
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 così posso usare questo genere di cose per il trasferimento di informazioni da moduli a rapporti così? vedo io uso un sacco di forme piene di caselle di testo come cruscotti, dove le caselle di testo non servono entrata, piuttosto visualizzare informazioni rapide piuttosto.
all'utente di navigare attraverso forme diverse per costruire le forme "cruscotto-like" a loro piacimento poi ad un certo punto da stampare. così ho voluto costruire look-un-come (in termini di dati offerti) riferisce ad ogni punto in modo da poter stampare la pagina delle informazioni hanno costruito attraverso queste forme.
Così ho provato a farlo con un rapporto:
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
come una supposizione, e non ha funzionato. nessun errore, o qualsiasi cosa. solo che non visualizzerà alcuna informazione in questo modo. non sarà nemmeno passare il numero ID.
Così sto pensando che l'apertura del rapporto nel acViewPreview significa che non posso aggiungere le informazioni a quelle caselle di testo dopo il fatto, ma sono finite, non certo. Quindi, qualche consiglio su questo è molto apprezzato. grazie!
Soluzione
Hai alcune opzioni. Si sia possibile creare una query, e passare i valori di controllo sotto forma nei valori là, creando così una query 1 record, che è possibile basare il report.
Ogni colonna sarà simile a questa: dati: Forms! [MyForm] [MyControl]
Oppure si può semplicemente associare i controlli dal modulo direttamente ai controlli di report.
Sarà necessario lasciare la forma aperta che contiene i valori mentre il report viene aperto, se si opta per uno di questi percorsi. Nessun codice complesso aveva bisogno.
Altri suggerimenti
Credo che mi manca qualcosa. Perché non si basta Recordsource del rapporto sia lo stesso Recordsource del modulo e quindi filtrare in fase di esecuzione per un particolare MainID in argomento CondizioneWHERE della DoCmd.OpenReport? Quindi è possibile eseguire il report senza bisogno di avere la forma aperta.
A meno che la forma è non legata, o ha i campi che sono costosi per calcolare al volo, non vedo alcun vantaggio al legame della relazione alla forma a tutti.