none
Criar uma publicação no Access para sincronizar com o SQL Server. RRS feed

  • Pergunta

  • Prezados(as) bom dia!

    Tenho um banco de dados em MS-Access 97 e preciso criar uma replicação de dados com meu banco em SQL Server.

    Para criar uma replicação entre dois servidores SQL Server não tive problemas, agora para criar uma replicação com um banco access estou sem saídas.

    O distribuidor pode ficar em um servidor SQL Server?

    Como criar um publicador no banco Access ?

    Hoje os dados são cadastrados no access usando um sistema vb6, e estes dados devem ser replicados para um banco SQL Server.

    Desde já agradeço.

    Abraços, Riderman | Analista de sistemas | MCTS SQL Server http://ridermansb.spaces.live.com/
    quarta-feira, 13 de janeiro de 2010 13:28

Respostas

  • O problema é que teríamos que alterar o fonte do sistema e isso não é possível.

    Resolvemos o caso migrando o banco por completo para SQL Server e no Access foi criado um Linked Table para cada tabela no SQL.

    Agradeço a ajuda!

    Abraços, Riderman | Analista de sistemas | MCTS SQL Server http://ridermansb.spaces.live.com/
    segunda-feira, 25 de janeiro de 2010 12:50

Todas as Respostas

  • Bom Dia Riderman,

    O mecanismo de replicação do SQL Server não aceita o access como um publicador. No maximo na versão SQL Server 2000 ele poderia se assinante!. O que não é mais verdade apartir da versão SQL Server 2005. :(

    você poderia da uma olhada no mecanismo de replicação do access quem sabe pode atender sua necessidade:
      http://office.microsoft.com/en-us/access/CH062526851033.aspx

    Ou se o caso for apenas acessar os dados via SQL Server você poderia ver a possibilidade de usar Linked Server para a sua base Access.

     Espero ter ajudado!


    MCP | MCTS | MCITP - http://leivio.spaces.live.com/
    quarta-feira, 13 de janeiro de 2010 14:10
  • Leivio, o que preciso mesmo é uma replicação de dados mas seu post me ajudou sim. Obrigado!

    Abraços, Riderman | Analista de sistemas | MCTS SQL Server http://ridermansb.spaces.live.com/
    quarta-feira, 13 de janeiro de 2010 16:07
  • Leivio,  usando o SQL 2000 consigo fazer uma replicação de dados com um banco de dados Access 97 ?

    A aplicação em VB6 usa o Access 97 (JET 3.6) e minha aplicação usa o SQL Server 2005, gostaria de replicar estes dados (Access) para SQL server em minha aplicação, lembrando que minha aplicação não manipula os dados que estão no Access.

    Abraços, Riderman | Analista de sistemas | MCTS SQL Server http://ridermansb.spaces.live.com/
    quarta-feira, 13 de janeiro de 2010 16:46
  • Leivio,

    Talvez você não necessite criar uma replicação, na sua aplicação você poderia ler os dados no SQL Server e gravar no Access!!!!
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quinta-feira, 14 de janeiro de 2010 10:51
    Moderador
  • Rideman,
    Sim, com SQL Server 2000 você pode utilizar uma base Access como assinante e pode fazer uma replicação merge entre SQL Server e Access. 

    Uma solução simples e direta não temos com o SQL Server 2005. Mas você poderia utiliza o SQL Server 2000 apenas para dar suporte a sua necessidade.



    MCP | MCTS | MCITP - http://leivio.spaces.live.com/
    quinta-feira, 14 de janeiro de 2010 11:53
  • Junior, na verdade os dados são gravados no Access e devem ser replicados para o SQL Server.

    O SQL Server não manipula os dados apenas os lê, ja o Access que efetua os comandos Insert, update e delete.
    Abraços, Riderman | Analista de sistemas | MCTS SQL Server http://ridermansb.spaces.live.com/
    quinta-feira, 14 de janeiro de 2010 11:57
  • Riderman,

    Então o dados serão coletados no Access e enviados para o SQL Server?
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quinta-feira, 14 de janeiro de 2010 18:14
    Moderador
  • Sim, um sistema em VB6 alimenta as tabelas no access e as mesmas devem ser replicadas para o SQL Server.

    O SQL mesmo não alimenta estas tabelas, apenas faz a leitura, então é uni-direcional.

    Abraços, Riderman | Analista de sistemas | MCTS SQL Server http://ridermansb.spaces.live.com/
    quinta-feira, 14 de janeiro de 2010 18:29
  • Riderman,

    Então através desta mesma aplicação você não consegui inserir os dados no SQL Server?

    Acredito que criar uma replicação para este tipo processo não seja necessário, ao meu ver utilizar a sua aplicação será mais vantagoso.

    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sexta-feira, 15 de janeiro de 2010 00:03
    Moderador
  • Junior o problema é que estamos migrando de Access para SQL e a aplicação é enorme, e teríamos que reescrever a aplicação pois a mesma utilzia DAO para conectar-se no Access.

    A situação é a seguinte:
    Existem 2 aplicações, uma em Vb6 utilizando banco do Access, e outra em .net utilizando SQL Server.
    A aplicação .net lê por exemplo o cadastro de clientes da empresa, o problema é que este cadastro é alimentado pelo sistema vb6 (que grava em uma tabela do Access) e o sistema .net lê os clientes de uma tabela no  SQL Server.
    A pedido do diretor da empresa, os sistemas .net devem lêr e escrever apenas em tabelas do SQL Server, e os sistemas em vb6 (Não por opção) lê e escreve em tabelas do Access.

    Já que os sistemas .net lê os dados do SQL teríamos que manter as 2 tabelas de clientes (Uma no access e outra no SQL)  sincronizadas.
    Abraços, Riderman | Analista de sistemas | MCTS SQL Server http://ridermansb.spaces.live.com/
    sexta-feira, 15 de janeiro de 2010 11:11
  • Riderman,

    Entendi perfeitamente a sua necessidade.

    Será que não poderíamos pensar na possibilidade de criarmos um ambiente através do SSIS lendo os dados no Access e Publicando no SQL Server.

    É importante destacar que o SQL Server não consegui trabalhar com replicação de dados de forma direta utilizando o Access.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sexta-feira, 15 de janeiro de 2010 17:51
    Moderador
  • Bom,
    a principio pensei em criar um JOB que apaga os registros da tabela e escreve novamente com os dados que estão no Access usando Linked Server, o problema é que a atualização deve ser em tempo real, com no máximo 10 minutos de tolerância porém colocar um JOB para rodar de 10 em 10 minutos não achei uma ideia aceitável, além é claro de apagar todos os registros e colocar novamente na tabela do SQL  não ser uma prática muito boa.

    O SSIS cairia no mesmo problema acima, a não ser que existisse uma forma de pegar apenas as alterações na tabela do access e popular a tabela do SQL apenas com as auterações.

    Em resumo Junior, não sei o que fazer.


    Abraços, Riderman | Analista de sistemas | MCTS SQL Server http://ridermansb.spaces.live.com/
    sexta-feira, 15 de janeiro de 2010 18:32
  • Riderman,

    Como você pensar em realizar a verificação do que foi somente alterado no Access? Seria necessário de alguma forma armazenar a data e hora de alteração do registro, ou então armazenar em uma outra tabela o códigos dos registros alterados.

    Com isso o seu JOB poderia ser executar fazendo a leitura somente destes registros.

    Mas eu também acho um pouco inviável executar um JOB a cada 10 minutos.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sábado, 16 de janeiro de 2010 00:34
    Moderador
  • Riderman,

    Como você pensar em realizar a verificação do que foi somente alterado no Access? Seria necessário de alguma forma armazenar a data e hora de alteração do registro, ou então armazenar em uma outra tabela o códigos dos registros alterados.

    Com isso o seu JOB poderia ser executar fazendo a leitura somente destes registros.

    Mas eu também acho um pouco inviável executar um JOB a cada 10 minutos.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sábado, 16 de janeiro de 2010 00:34
    Moderador
  • Riderman,

    Para podermos saber quais registros foram alterados poderíamos armazenar em uma table o código dos registros alterados e com base nestes dados seu JOB poderia ser executado e realizaria a carga de dados, mas de 10 em 10 minutos não é algo muito interessante, a demanda de processamento poderia acabar gerando gargalos.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sábado, 16 de janeiro de 2010 00:37
    Moderador
  • O problema é que teríamos que alterar o fonte do sistema e isso não é possível.

    Resolvemos o caso migrando o banco por completo para SQL Server e no Access foi criado um Linked Table para cada tabela no SQL.

    Agradeço a ajuda!

    Abraços, Riderman | Analista de sistemas | MCTS SQL Server http://ridermansb.spaces.live.com/
    segunda-feira, 25 de janeiro de 2010 12:50
  • Riderman,

    Importante que deu certo.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    segunda-feira, 25 de janeiro de 2010 16:53
    Moderador