VB .NET - Acessando Relatórios do Microsoft Access


Um desenvolvedor pode trabalhar com um banco de dados do Microsoft Access no Visual Basic .NET usando duas tecnologias separadas:

  1. Automação OLE;
  2. Objetos de dados ActiveX da Microsoft (ADO.NET);

A automação é uma tecnologia COM. A automação permite que aplicativos que são escritos em linguagens como Visual Basic .NET controle via código outros aplicativos. Quando você automatizar um aplicativo do Microsoft Office, você realmente executa uma instância do aplicativo na memória e, em seguida, recorre ao modelo de objetos do aplicativo para executar várias tarefas no aplicativo. Com o Access e outros aplicativos do Microsoft Office, praticamente todas as ações que você pode executar manualmente através da interface do usuário também podem ser executadas por meio de programação usando automação.

Visual Studio Tools for Office (VSTO)

O VSTO se apresenta como uma ferramenta através da qual você vai poder desenvolver aplicações para o Office usando o Visual Studio e qualquer uma das linguagens que a plataforma suporta; dessa forma você poderá usar a plataforma .NET e a linguagem Visual Basic para criar aplicações Office sem a necessidade de usar o bom e velho VBA.

Com isso você vai poder criar aplicações dos tipos suportados pela plataforma .NET e usando as linguagens VB .NET e C#  e os recursos do Visual Studio como LINQ, WPF, WCF, suporte ao ClickOnce, enfim, todos os recursos da .NET Framework 3.5 com código gerenciado, ou seja o VSTO pretende unir o útil (Visual Studio) ao agradável(a interface Office).

Abrir um banco de dados no Access

Ao automatizar o Microsoft Access, você deve abrir um banco de dados antes de executar tarefas úteis, como impressão de relatórios. Para abrir um banco de dados na instância do Access que você estiver automatizando, você pode usar os métodos OpenCurrentDatabase ou OpenAccessProject do objeto Application . Você pode ter apenas um banco de dados aberto no Access ao mesmo tempo. Para trabalhar com um banco de dados diferente, você pode usar o método CloseCurrentDatabase antes de abrir outro.

Imprimir ou visualizar um relatório do Access

Para visualizar ou imprimir um relatório do Access, você chama o método OpenReport do objeto DoCmd . Quando você chama OpenReport (AbrirRelatório), um dos argumentos que você passar determina se o relatório é visualizado na tela ou se é enviado para a impressora:

Observe que o argumento Exibir determina se o relatório é exibido no Access ou se é enviado para a impressora. O método OpenReport tem outros argumentos úteis, como WhereCondition que permite que você limite o conjunto de registros do relatório usando uma cláusula SQL WHERE válida (sem a palavra onde.)

Se você estiver visualizando um relatório, certifique-se de definir a propriedade Visible do objeto Application , de modo que o acesso seja visível na tela. Dessa forma, o usuário pode visualizar o relatório na janela do Access.

Nota: Se você estiver abrindo um banco de dados foi protegido com uma senha, você pode evitar a caixa de diálogo, fornecendo a senha para o método OpenCurrentDatabase :

'Abrir um banco de dados protegido com senha no modeo shared ( O argumento bstrPassword é case-sensitive)
 oAccess.OpenCurrentDatabase(filepath:="c:\macdb.mdb", Exclusive:=False, bstrPassword:="MyPassword")
 

Criando o projeto exemplo no Visual Basic .NET

recursos necessários:

Abra o Visual Studio 2012 Express for desktop e no menu File clique em New Project;

A seguir selecione a linguagem VB .NET e o template Windows Forms Application informando o nome AcessandoRelatoriosMsAccess;

No formulário form1.vb inclua os controles :

Defina os controles no formulário conforme o leiaute abaixo:

Agora vamos incluir referências a primary interop assembly (PIA) em nosso projeto.

No menu PROJECT clique em Add Reference e na guia COM selecione Microsoft Access 12.0 Object Library;

Noamente no menu PROJECT clique em Add Reference e na guia COM selecione Microsoft Office 12.0 Object Library;

Estamos usando as duas referências pois vamos precisar de objetos do Core e do Access.

Agora no formulário form1.vb declare o namespace:

Imports Microsoft.Office.Interop.Access

No evento Load do formulário defina o código a seguir:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    cboRelatorios.SelectedIndex = 0
End Sub

A seguir no evento Click do botão de comando inclua o código abaixo:

Private Sub btnExecutar_Click(sender As Object, e As EventArgs) Handles btnExecutar.Click


If
cboRelatorios.SelectedIndex = -1 Then

    MessageBox.Show("Selecione um relatório", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Information)

    Return

End If
 

Try

   Dim MSA As New Microsoft.Office.Interop.Access.Application

   MSA.Application.Visible = False

   MSA.OpenCurrentDatabase("c:\dados\Northwind.mdb", False)

   If rdbVisualizar.Checked Then

       MSA.Application.DoCmd.OpenReport(cboRelatorios.Text, AcView.acViewPreview)

     'maximiza a janela

       MSA.Application.DoCmd.Maximize()

       'oculta a barra de menu

       MSA.Application.CommandBars("Menu Bar").Enabled = False

     'oculta a barra de menu Print Preview

       MSA.Application.CommandBars("Print Preview").Enabled = False

     'Oculta o menu popup do relatorio

      MSA.Application.CommandBars("Print Preview Popup").Enabled = False

   Else

       MSA.Application.DoCmd.OpenReport(cboRelatorios.Text, AcView.acViewNormal)

   End If

Catch ex As Exception

    MessageBox.Show("Erro : " & ex.Message, "Erro ao acessar o objeto", MessageBoxButtons.OK, MessageBoxIcon.Information)

End Try

End Sub

 

Agora basta executar o projeto, definir o relatório , escolher se deseja visualizar ou imprimir e executar o código:

O relatório será exibido conforme figura abaixo:

Pegue o projeto completo aqui: AcessandoRelatoriosMsAccess.zip

Prv 10:1 Provérbios de Salomão. Um filho sábio alegra a seu pai; mas um filho insensato é a tristeza de sua mae.

Prv 10:2 Os tesouros da impiedade de nada aproveitam; mas a justiça livra da morte.

Prv 10:3 O Senhor não deixa o justo passar fome; mas o desejo dos ímpios ele rechaça.

Prv 10:4 O que trabalha com mão remissa empobrece; mas a mão do diligente enriquece.

Referências:


José Carlos Macoratti