MS Access 2003 - Pergunta sobre a passagem de informações de um formulário não ligado para um relatório

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

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!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top