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.