MS Access 2003 - Pergunta sobre a passagem de informações de um formulário não ligado para um relatório
-
20-09-2019 - |
Pergunta
Eu uso algo como abaixo para passar as informações de um formulário não ligado para outro (desculpe a verificação sem erro):
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, então eu posso usar esse tipo de coisa para transferir informações de formulários para relatórios também? Veja, eu uso muitas formas cheias de caixas de texto como painéis, onde as caixas de texto não servem a fins de entrada, mas exibir informações rápidas.
O usuário navega por diferentes formulários para criar os formulários "do tipo painel" para o seu gosto e, em algum momento, desejam imprimir. Então, eu queria criar relatórios parecidos com aparência (em termos de dados oferecidos) em cada ponto para que eles possam imprimir a página de informações que construíram através desses formulários.
Então eu tentei fazer isso com um relatório:
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
Assim como um palpite, e não funcionou. Sem erros, ou qualquer coisa. Apenas não exibirá nenhuma informação dessa maneira. nem aprovará o número de identificação.
Portanto, estou pensando que abrir o relatório no AcviewPreview significa que não posso adicionar informações a essas caixas de texto após o fato, mas não tenho certeza. Portanto, qualquer conselho sobre isso é muito apreciado. obrigado!
Solução
Você tem poucas opções. Você pode criar uma consulta e passar os valores de controle do formulário para os valores lá, criando assim uma consulta de 1 registro, sobre a qual você pode basear seu relatório.
Cada coluna será assim: Dados: Forms! [MyForm]! [MyControl
Ou você pode apenas vincular os controles do formulário diretamente aos controles do relatório.
Você precisará deixar o formulário aberto contendo os valores enquanto o relatório for aberto, se você optar por uma dessas rotas. Nenhum código complexo é necessário.
Outras dicas
Acho que estou perdendo alguma coisa. Por que você não faria apenas o Recordsource do relatório o mesmo que o Recordsource do formulário e, em seguida, filtrar em tempo de execução para um específico MainID no argumento do Docmd.OpenReport onde Em seguida, você pode executar o relatório sem precisar ter o formulário aberto.
A menos que o formulário não esteja ligado ou tenha campos caros para calcular em tempo real, não consigo ver nenhuma vantagem em vincular o relatório ao formulário.