Visual Basic - Gravando os dados de uma planilha Excel no Access (Criando a tabela usando ADOX)


Suponha que você tenha uma planilha Excel e que precise copiar os dados desta planilha em uma tabela de um banco de dados Access.

Como você faria ??

Quer uma sugestão ?? Use SQL . Sim , com uma linha de comando você grava os dados da planilha na tabela do seu banco de dados Access.

Esta pagando para ver ??   Então veja :

Primeiro você deve escolher a planilha que cujos dados deseja gravar. Eu vou usar uma planilha muito simples criada no Excel com o nome de teste.xls e salva na pasta c:\teste.

Abaixo vemos a planilha.

A seguir você precisa saber em qual banco de dados vai gravar os dados e o nome da tabela na qual os dados vão ser gravados.

Vamos usar um código  para verificar se o banco de dados que você informou existe , se ele não existir , vamos criar o banco de dados e quando da gravação dos dados da planilha a tabela também será criada.

- Inicie um novo projeto no VB e no formulário padrão insira os seguintes controles :
  • três Labels - label1, label2 e label3
  • três caixas de texto - txtorigem , txtdestino, txtTabela
  • dois botões de comando - command1 e command2
  • um controle ListBox.- List1

Conforme figura ao lado.

Vamos ao código :

1- Antes de mais nada faça a referência no seu projeto as livrarias - ADO e ADOX ,conforme abaixo :

- Vamos usar a ADOX para criar o banco de dados caso seja necessário usando o objeto Catalog.

  Obs : Para sabe mais leia o artigo - ADOX - Gerenciando o seu banco de dados.

2- Na seção General Declarations vamos declarar as variáveis visíveis em todo o formulário :

Dim Origem As String
Dim Destino As String
Dim oCon As ADODB.Connection
Dim rst As ADODB.Recordset

3- No evento Click do botão - command1 - Gravar no BD - insira o código abaixo.

Private Sub Command1_Click()
Dim cSQL As String

On Error GoTo trata_erro

'verifica se a planilha existe
If Dir(Origem) = "" Then
   MsgBox "O arquivo origem " & Origem & " Não existe !!! ", vbCritical, "Erro"
   Exit Sub
End If

'verifica se o banco de dados existe , se não existir , cria-o
If Dir(Destino) = "" Then
  Dim oCat As ADOX.Catalog
  Set oCat = New ADOX.Catalog
  oCat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Destino
End If

'abre uma conexão com a planilha do Excel
Set oCon = New ADODB.Connection
With oCon
  .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
  & "Data Source=" & Origem & ";" & "Extended Properties=Excel 8.0"

  .Open

  'monta a instrução SQL que irá gravar os dados na tabela
  cSQL = "SELECT * INTO [" & txtTabela.Text & "] " & _
  "IN '" & Destino & "' " & " FROM [Plan1$]"
   
  .Execute cSQL

  MsgBox "Dados gravados com Sucesso em - " & Destino & " - na Tabela : " & txtTabela.Text
  .Close
End With
Exit Sub
trata_erro:
  MsgBox Err.Description & " - " & Err.Number
  Exit Sub
End Sub

4- No evento Click do botão de comando - command2 - Ver Dados >> - insira o código abaixo :

Private Sub Command2_Click()

'expande o formulário para exibir os dados
With Command2
 If .Caption = "&Ver Dados >>" Then
    Me.Width = 4800
    Me.Height = 4425
    .Caption = "<< &Ver Dados"
 Else
    Me.Width = 4800
    Me.Height = 2115
    .Caption = "&Ver Dados >>"
 End If
End With

'abre uma conexao e o recordset
Set oCon = New ADODB.Connection
Set rst = New ADODB.Recordset

oCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Destino

List1.Clear
rst.CursorLocation = adUseClient
rst.Open "Select * from " & txtTabela.Text, oCon, adOpenStatic, adLockBatchOptimistic, adCmdText
'exibe os dados - dois campos - no controle listbox
Do Until rst.EOF
  List1.AddItem rst(0) & "  " & rst(1)
  rst.MoveNext
  Loop
rst.Close

End Sub

5- No evento Load do formulário digite o código abaixo :

Private Sub Form_Load()
  'atribui os nomes da origem e do destino as variáveis
  Origem = txtOrigem.Text
  Destino = txtDestino.Text
End Sub

Quando você executar o projeto e clicar no botão - Gravar no BD - vai ver o formulário da figura 11 ; quando clicar no botão - Ver Dados>> - vai ver o formulário da figura 2 :

Figura 1 Figura 2

A instrução SQL que faz todo o serviço é a seguinte :

SELECT * INTO [" & txtTabela.Text & "] " & "IN '" & Destino & "' " & " FROM [Plan1$]

Onde temos :

  1. txtTabela.text - o nome da tabela onde os dados serão gravados
  2. Destino - o nome do banco de dados
  3. Plan1$ - o nome da planilha onde estão os dados
Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti