VB6 - Acessando o SQL Server 2005 Express Edition


Já publiquei vários artigos mostrando como acessar via Visual Basic as principais bases de dados usadas atualmente : Access, SQL Server, FireBird, MySQL e PostGree.

Vou incluir nesta lista o SQL Server 2005 Express Edition pois neste artigo eu mostro como você pode efetuar a conexão com uma base de dados SQL Server 2005 Express local e com um banco de dados .mdf em um diretório qualquer usando o novo provedor SQLNCLI.

A primeira coisa que você tem que atentar é que quando você instala o SQL Server 2005 (seja a versão Express ou a completa) é incluído um novo provedor de bases de dados OLE DB chamado SQLNCLI.

Este provedor deve ser usado na string de conexão que é utilizada para efetuar a conexão com o SQL Server 2005. Ele ocupou o lugar do provedor SQLOLEDB que é usado para acessar uma base de dados SQL Server 2000.

Para acompanhar este artigo você vai precisar ter instalado os seguintes itens:

Acessando o SQL Server 2005 Express Local

Vou acessar a tabela Clientes do banco de dados Cadastro que eu criei no SQL Server 2005 Express usando o Management Studio. Se você não sabe como criar um banco de dados usando esta ferramenta leia o artigo: VB.NET  2005 -  Criando Objetos Básicos de dados.

Abaixo eu mostro o meu SQL Server 2005 Express aberto no Management Studio exibindo o banco de dados Cadastro e a tabela Clientes com alguns registros que eu criei diretamente na ferramenta.

Nota:  Se você não conhece o Management Studio leia o artigo:  .NET  2005 - Usando o SQL Server Management Studio

Agora eu vou criar um projeto do tipo STANDARD EXE no Visual Basic 6.0 com o nome de VB_SQL2006.vbp, e, no formulário padrão eu vou usar os seguintes controles:

Para incluir uma referência ao componente MSHFlexGrid , clique no menu Project -> Components e a seguir na aba Controls marque o componente: Microsoft Hierarchical FlexGrid Control 6.0 (SP4) (OLEDB)

Não esqueça também de incluir uma referência a biblioteca ADO - Microsoft ActiveX Data Objects 2.8 Library - para ter acesso aos objetos de acesso a dados ADO.

Abaixo temos o leiaute usado no formulário:

Vamos agora digitar o código no evento Click do botão - Exibir Dados - Clientes - para acessar a tabela Clientes e mostrar os dados no grid.

Private Sub Command1_Click()
   ' A conexão com o banco de dados
    Dim cn As ADODB.Connection
    Set cn = New ADODB.Connection

    ' A cadeia de conexão
    Dim SQL As String

    ' Selecionando os dados da tabela Clientes
    SQL = "SELECT * FROM Clientes"
    cn.Open  "Provider=SQLNCLI; " & _
                  "Initial Catalog=Cadastro; " & _
                  "Data Source=(local)\SQLEXPRESS; " & _
                  "integrated security=SSPI; persist security info=True;"

    ' O recordset para acessar s dados
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
    ' Abrindo o recordset de forma estática pois não vou tratar os dados
    rs.Open SQL, cn, adOpenStatic
    ' Atribuir o recordset ao FlexGrid
    Set MSHFlexGrid1.DataSource = rs   
    'fecha o recordset e a conexao
    rs.Close
    cn.Close
End Sub

Executando o projeto , teclando F5, e clicando no botão iremos obter:

Para exibir os registros da linha selecionada no Grid nas caixas de texto eu criei a seguinte rotina ligada ao evento Click do MSHFlexGrid:

Private Sub MSHFlexGrid1_Click()
 With MSHFlexGrid1
            Text1.Text = .TextMatrix(.Row, 1)   
            Text2.Text = .TextMatrix(.Row, 2)  
            Text3.Text = .TextMatrix(.Row, 3) 
            Text4.Text = .TextMatrix(.Row, 4)   
   End With
End Sub

Acessando um arquivo SQL Server 2005 Express em um diretório

Para poder acessar um banco de dados SQL Server que esta em uma pasta qualquer teremos que indicar a rota (caminho) do arquivo com a extensão .mdf. A string de conexão deverá ser alterada para indicar o caminho , a instância e o provedor SQLNCLI. Veja abaixo:

Provider=SQLNCLI; 
AttachDBFileName= caminho completo do banco de dados .mdf;
Data Source=(local)\SQLEXPRESS;
integrated security=SSPI; persist security info=True;

Vamos então acessar o banco de dados Northwind.mdf que esta na pasta c:\dados em minha máquina local (Veja na sua máquina o local correto), e, vamos exibir os dados da tabela Employees.

O código que deverá ser colocado no evento Click do botão - Exibir dados Employees - é o seguinte:

Private Sub Command2_Click()

    ' A conexão com o banco de dados
    Dim cn As ADODB.Connection
    Set cn = New ADODB.Connection
  
    '  variavel SQL
     Dim SQL As String   
    ' Para usar um arquivo diretamente
    Dim BD As String
    ' Caminho do banco de dados
    BD = "C:\dados\Northwnd.mdf"
    ' comando SQL para selecionar os dados da tabela Employees
    SQL = "SELECT * FROM Employees"
    
    cn.Open "Provider=SQLNCLI; " & _
                 "AttachDBFileName=" & BD & "; " & _
                 "Data Source=(local)\SQLEXPRESS; " & _
                 "integrated security=SSPI; persist security info=True;"

    'recordset para acessar os dados
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
    ' Abrir o recordset de forma estática
    rs.Open SQL, cn, adOpenStatic

     'atribuir o recordset ao grid    
    Set Me.MSHFlexGrid1.DataSource = rs    
    rs.Close
    cn.Close
End Sub

Executando o projeto e clicando no botão - Exibir dados Employees - iremos obter:

Pegue o projeto completo aqui: VB_SQL2005.zip

Eu sei é apenas o velho e bom Visual Basic mas eu gosto...

Referências :

Utilizando o controle MSFlexGrid e MSHFlexGrid com ADO -
VB - Operações com Matrizes
VB6 - DataGrid, MSFlexGrid e alguns conceitos básicos
Imprimindo grades MSFlexGrid - A solução
MSFlexGrid - Classificando e mesclando dados
VB Prático - Tornando o MSFlexGrid Editável
Criando Recordsets Hierárquicos com o MSHFlexGrid.
MSFlexGrid - Alternando as cores das linhas e ordenando pelas colunas
VB - MSFlexGrid - Incluindo colunas em uma determinada posição.
VB6 - gerando um arquivo no formato CVS com o conteúdo de um MSFlexGrid
Preenchendo um MSFlexGrid com ADO
Utilizando o controle MSFlexGrid e MSHFlexGrid com ADO
VB - Carregando dados em um MSFlexGrid e DataGrid .
VB - Editando dados diretamente no MSFlexGrid

José Carlos Macoratti