Como usar o Excel para ler e gravar um banco de dados externo

Compartilhe agora:

O Excel pode fazer praticamente qualquer coisa; se deve ser feito para fazer tudo é outra questão. Embora a planilha seja muito poderosa na manipulação de dados, ela não é muito boa para armazenar dados normalizados. Aproveitando o Excel para um banco de dados relacional como SQL Server aumenta o poder do aplicativo.

Para começar, você precisará do MS Access ou de uma versão mais estável e gratuita – SQL Server Expressar. Supõe-se que o leitor tenha a faixa Excel Developer exibida e esteja familiarizado com o Editor VBA e a Linguagem de Consulta Estruturada (SQL). Este artigo usa SQL Server cadeias de conexão. Para MS-Access, consulte o Google.

Embora o Excel tenha suas próprias rotinas internas para obter informações de SQL Server em (digamos) uma tabela dinâmica, nosso exemplo dará mais flexibilidade na seleção de dados.

String de conexão

Estarei usando um banco de dados privado; insira suas próprias informações de driver no lugar das minhas na sub-rotina ConnectDatabase. Nós então usamos connDB como um canal de comunicação para nosso banco de dados – no meu caso, para retornar resultados de um procedimento armazenado. Você pode usar instruções SQL mais padrão, como “Selecionar * de…”

Ordem do Dia

Primeiro, carregaremos as opções da caixa de combinação de SQL Server Ao abrir a pasta de trabalho, utiliza-se uma macro Auto_open e o conteúdo é salvo na planilha “ComboData”. Independentemente de o servidor estar na nuvem ou localmente, não haverá atraso perceptível na inicialização do Excel, desde que o banco de dados esteja acessível a partir da estação de trabalho.

Em seguida, vamos extrair os dados filtrados do banco de dados e soltá-los no Excel, colunas F a K.

A interface

O meu tem caixas suspensas para filtrar informações do banco de dados. O Tipo caixa de combinação aciona uma pesquisa para preencher a tabela à direita.A caixa de combinação de função aciona uma pesquisa para preencher a tabela

Renomeie “Sheet1” como “Main”. Adicione pelo menos uma caixa de combinação.

O código

Public connDB As New ADODB.Connection
Public rstNew As New ADODB.Recordset
Public rs As New ADODB.Recordset
Public strSQL As String
Public nID As Integer

Sub auto_Open()
    Call PopulateComboData     'kicks off the first process  on Open
End Sub

Sub PopulateComboData()
    Sheets("ComboData").Range("A3:C100").ClearContents
    Call ConnectDatabase      'use the ConnectDatabase routine
    strSQL = "Select DeptID, Department, Phase from tblDept Order by Department"
    Set rs = connDB.Execute(strSQL)
    ActiveSheet.Range("A3").CopyFromRecordset rs      'copies the recordset in bulk
End Sub

Sub ReadData()
    intRole = Sheets("main").Range("D7")
    Sheets("Main").Range("F4:L100").ClearContents
    Call ConnectDatabase
    strSQL = "EXEC DBTest " & intRole    'calls a stored proc with parameter
    Set rs = connDB.Execute(strSQL)
    ActiveSheet.Range("F4").CopyFromRecordset rs      'copies the recordset in bulk
End Sub

Sub ConnectDatabase()
    On Error GoTo ErrConnect
    If connDB.State = 1 Then connDB.Close     'closes connection if already open
    strServer = "197.200.28.164" 
    strDBase = "Qcrew_sql"
    strUser = "joesoap_sql"
    strPWD = "frU6ra!@"
    If strPWD > "" Then 
        strConnectionstring = "DRIVER={SQL Server};Server=" & strServer & _
        ";Database=" & strDBase & ";Uid=" & strUser & ";Pwd=" & strPWD & _
        ";Connection Timeout=30;"
    Else        'Use windows authentication
        strConnectionstring = "DRIVER={SQL Server};SERVER=" & strServer & _
        ";Trusted_Connection=yes;DATABASE=" & strDBase
    End If
    connDB.Open strConnectionstring
Exit Sub
ErrConnect:
    MsgBox Err.Description
End Sub

Formate o controle da caixa de combinação para ler as planilhas “ComboData”. Em seguida, clique com o botão direito do mouse na caixa de combinação para atribuir o subprocedimento ReadData a ela. Quando um item for selecionado no combobox, escreva sua chave na planilha “Principal”, célula D7. O código VBA usará essa chave como um filtro (consulte intRole, acima).

Referências à biblioteca dll

Na janela de código, utilize Ferramentas > Referências para referenciar a biblioteca Microsoft Active X Data Objects. Isso permitirá que o Excel utilize os objetos ADODB declarados no código.Consulte a Biblioteca de Objetos de Dados ActiveX da Microsoft.

A sub-rotina ReadData acima usa uma estrutura de dados relacional, mostrada abaixo, que é difícil de conseguir apenas no Excel.A sub-rotina ReadData usa uma estrutura de dados relacional

Outras alterações de dados podem acionar um write-back no banco de dados, com a instrução SQL Update apropriada seguida por connDB.execute(strSQL).

Finalmente, proteja seu código de ser visualizado ou alterado:  Ferramentas>Propriedades>Proteção.

Lidar com problemas do Excel:

De vez em quando, especialmente quando contém programas complexos, o Excel pode travar e não conseguir recuperar o arquivo corretamente. No caso de um danificado xlsx Ter um arquivo compactado e uma ferramenta de recuperação eficaz à mão resolverá a maioria dos problemas.

Introdução do autor:

Felix Hooker é um especialista em recuperação de dados em DataNumen, Inc., líder mundial em tecnologias de recuperação de dados, incluindo reparar rar erro e produtos de software de recuperação SQL. Para mais informações visite www.datanumen.com

Compartilhe agora:

Comentários estão fechados.