Criando Linked Server com um DB Access

 

Autor: Nilton Pinheiro

 

Extraído do site: http://www.mcdbabrasil.com.br

 

Uma necessidade bastante comum de muitos usuários está no fato de precisarem acessar dados em um banco de dados Access através do SQL Server. O Microsoft SQL Server permite que você crie links conhecidos como linked servers para fontes de dados OLE DB.

 

Na dica desta semana descrevo os passos necessários para criar um Linked Server entre um servidor SQL Server e uma Banco de Dados Access, permitindo assim, que você trabalhe no banco no Dados Access através de uma aplicação SQL ou pelo Query Analizer.

 

No geral, uma configuração de Linked Server permite que o SQL Server execute comandos sobre a fonte de dados OLE DB em diferentes servidores. Algumas das vantegens oferecidas pelo Linked servers são:

 

- Acesso a um servidor remoto.

 

- Habilidade para disparar consultas distribuídas, tualizações, comandos e transações em fonte de dados heterogêneas.

 

- Passar comandos para a fonte de dados OLE DB e incluir o rowsets resultante como tabelas na instrução Transact-SQL.


Componentes de um Linked Server

 

A definição de linked server especifica um OLE DB provider e um OLE DB data source.

 

Um OLE DB provider é uma biblioteca de link dinâmico, comumente chamada simplesmente de DLL, que gerencia e interage com um data source específico.

 

Um OLE DB data source identifica o banco de dados específico acessível através do OLE DB.


Embora os Data Sources consultados através de um Linked Server seja em sua maioria Banco de Dados, exitem OLE DB providers para uma grande variedade de arquivos e formatos de arquivo como .txt .xls e outros.

 

Para ver uma tabela com os mais comuns OLE DB providers e Data Sources para SQL Server, consulte o Books Online do SQL Server.


Criando um Linked Server com um Banco de Dados Access

 

Bom, dada a introdução sobre Linked Server, vamos ao que interessa. No SQL Server existe duas maneiras básicas de se criar um Linked Server, você pode usar a procedure sp_addlinkedserver no Query Analyzer ou usar o Enterprise Manager.


Neste exemplo estarei usando a procedure sp_addlinkedserver no Query Analyzer. Para criar um linked Server com uma base de dados Access, você deve utilizar o Microsoft OLE DB Provider for Jet.

 

Este exemplo usa o Microsoft OLE DB Provider for Jet para criar um linked server chamada "dbaccess" entre o SQL Server e o banco de dados Access FPNWIND.MDB que está no caminho C:Arquivos de programasMicrosoft OfficeOffice1046. Caso queira fazer o teste com outra base, basta alterar o caminho e o nome da base no momento da criação do Linked Server.

 

-- Criando o Linked Server
USE master
GO
EXEC sp_addlinkedserver
   @server = 'dbaccess', -- Nome do linked Server
   @provider = 'Microsoft.Jet.OLEDB.4.0', -- Provider para Access
   @srvproduct = 'dbaccess', -- Pode ser qualquer coisa
   @datasrc = 'C:Arquivos de programasMicrosoft OfficeOffice1046FPNWIND.MDB' -- Caminho completo + nome do banco Access
GO

 

A execução deste script no Query Analyzer deve gerar um resultado como o seguinte:


(1 row(s) affected)


(1 row(s) affected)


Para constatar a criação do Linked Server você pode entrar no Enterprise Manager, expandir o servidor onde o Linked Server foi criado, expandir Security e Linked Servers. Clique com o botão direito sobre o Linked Server "dbaccess" para ver suas propriedades.

 

Visualizando as tabelas do banco Access

 

Utilizando a procedure sp_tables_ex no Query Analyzer você terá acesso à lista de tabelas do banco de dados Access.

 

EXEC sp_tables_ex dbaccess -- onde dbaccess deve ser o nome do Linked Server

 

Resultado
----------

 

TABLE_CAT TABLE_SCHEM TABLE_NAME          TABLE_TYPE   REMARKS      
--------- ----------- ------------------- ------------ --------------
NULL      NULL        MSysAccessObjects   ACCESS TABLE NULL
NULL      NULL        MSysCmdbars         ACCESS TABLE NULL
NULL      NULL        MSysIMEXColumns     ACCESS TABLE NULL
NULL      NULL        MSysIMEXSpecs       ACCESS TABLE NULL
NULL      NULL        MSysACEs            SYSTEM TABLE NULL
NULL      NULL        MSysObjects         SYSTEM TABLE NULL
NULL      NULL        MSysQueries         SYSTEM TABLE NULL
NULL      NULL        MSysRelationships   SYSTEM TABLE NULL
NULL      NULL        Categorias          TABLE        Categorias dos ...
NULL      NULL        Clientes            TABLE        Nomes, endereços ...
NULL      NULL        Fornecedores        TABLE        Nomes, endereços, ...
NULL      NULL        Funcionarios        TABLE        Nomes, cargos e ...
NULL      NULL        Produtos            TABLE        Nomes, fornecedores...
NULL      NULL        Transportadoras     TABLE        Nomes e telefones das ...

 

(14 row(s) affected)


Accessando uma tabela da base Access

 

Para obter acesso aos dados de uma tabela da base access, basta utilizar o coamndo SELECT conforme exemplo abaixo

 

-- Faz select em uma das tabelas
SELECT * FROM dbaccess...Categorias

 

Resultado
----------

 

CodigoDaCategoria Descricao                                         NomeDaCategoria
----------------- ------------------------------------------------- ----------------
1                 Refrigerantes, cafés, chás e cervejas             Bebidas
2                 Patês, temperos, picles e molhos doces e salgados Condimentos
3                 Sobremesas, doces, pães doces                     Confeitos
4                 Queijos                                           Laticínios
5                 Pães, biscoitos, massas e cereais                 Grãos/Cereais
6                 Carnes preparadas                                 Carnes/Aves
7                 Frutas secas e pastas vegetais                    Hortigranjeiros
8                 Peixes e algas marinhas                           Frutos do Mar

 

(8 row(s) affected)

 

Para obter mais informações sobre Linked Servers ou as procedures utilizadas aqui, consulte o BOL do SQL Server.