Jawab Copia de segurança

  • segunda-feira, 30 de abril de 2012 08:46
     
     

    ola

    Queria saber se existe alguma comando sql que faça a copia e update de dados de um mdb para tabela sql server através de um caminho de rede.

    O objectivo é especificar o caminho de rede do mdb e fazer a copia dos dados para uma tabela no sql server.

    Tem que ser através de caminho de rede pois são vários ficheiros.

    Este código é para interagir com o vb.net.


    Visual Basic 2008 Express Edition SQL Server Management Studio


Todas as Respostas

  • segunda-feira, 30 de abril de 2012 13:20
    Moderador
     
     

    Bom Dia,

    Você pode utilizar o OPENROWSET combinado com o MERGE.

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível

  • segunda-feira, 30 de abril de 2012 13:24
     
     

    como faço isso?

    tenho andado á procura na net mas não encontro nada. Aparece muita coisa de importar de mdb para sql, mas é de ficheiro a ficheiro. MAs não quero isso.

    quero especificar o caminho na rede (C:\caimnho.mdb) e actualizar a info na tabela sql.

    Obrigado


    Visual Basic 2008 Express Edition SQL Server Management Studio

  • segunda-feira, 30 de abril de 2012 23:42
     
     

    estou a experimentar este código mas da-me erro:

    SELECT nome

    FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',

    'caminho\teste.mdb';

          'admin';'',teste)

    Msg 7308, Level 16, State 1, Line 1
    OLE DB provider 'Microsoft.Jet.OLEDB.4.0' cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode.


    Visual Basic 2008 Express Edition SQL Server Management Studio

  • terça-feira, 1 de maio de 2012 02:16
    Moderador
     
     

    Jonas,

    uma dica: procure por "mdb" no fórum que encontrará vários assuntos sobre isso. Acredito que encontrará o que precisa.


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

  • terça-feira, 1 de maio de 2012 12:58
     
     

    a unica sintaxe que encontrei foi esta:

    EXEC sp_addlinkedserver
    @server = 'MDBSERVER', -- Nome do Linked Server
    @provider = 'Microsoft.Jet.OLEDB.4.0', -- Provider da conexão
    @srvproduct = 'OLE DB Provider for Jet', -- Descrição do provider
    @datasrc = 'C:\\teste.mdb' -- Nome do arquivo
    GO

    Select * from [MDBSERVER]...teste -- Select para acesso aos dados

    MAs continua  a dar erro:

    Msg 15028, Level 16, State 1, Procedure sp_addlinkedserver, Line 82
    The server 'MDBSERVER' already exists.
    Msg 7308, Level 16, State 1, Line 2
    OLE DB provider 'Microsoft.Jet.OLEDB.4.0' cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode.

    Qual sintaxe devo usar? ou o que estou a fazer de mal?

    Obirgado


    Visual Basic 2008 Express Edition SQL Server Management Studio

  • quarta-feira, 2 de maio de 2012 18:46
     
     

    Jonas conseguiu resolver o problema?

    Estou com a mesma dúvida...

    Como fazer um backup via comando SQL..

    Desde já obrigado

    Att

    Equipe PS Vita Jogos.com.br

  • quarta-feira, 2 de maio de 2012 19:42
     
      Contém Código

    Olá Jonas

    o erro parece ser por causa da opção 'AD HOC DISTRIBUTED QUERIES'

    tente executar este comando

    --Habilita Opções Avançadas
    SP_CONFIGURE 'SHOW ADVANCED OPTION',1
    RECONFIGURE WITH OVERRIDE;
    GO
    
    -- Habilita 'AD HOC DISTRIBUTED QUERIES'
    SP_CONFIGURE 'AD HOC DISTRIBUTED QUERIES',1
    RECONFIGURE WITH OVERRIDE;
    GO
    
    


    Att.
    Lukas Baldan

  • quarta-feira, 2 de maio de 2012 22:22
     
     

    Lukas o erro continua o mesmo:

    Msg 15028, Level 16, State 1, Procedure sp_addlinkedserver, Line 82
    The server 'MDBSERVER' already exists.
    Msg 7308, Level 16, State 1, Line 2
    OLE DB provider 'Microsoft.Jet.OLEDB.4.0' cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode.

    Nigelky

    Estou faz dias á procura de uma solução :/

    tá dificil

    vá seguindo este tópico

    Obrigado


    Visual Basic 2008 Express Edition SQL Server Management Studio

  • quinta-feira, 3 de maio de 2012 12:43
     
     Resposta Proposta Contém Código

    Olá Jonas,

    tente executar nesta ordem

    
    
    --Deleta o servidor já criado
    sp_dropserver 'MDBSERVER', 'droplogins'
    GO
    
    --Habilita Opções Avançadas
    SP_CONFIGURE 'SHOW ADVANCED OPTION',1
    RECONFIGURE WITH OVERRIDE;
    GO
    
    -- Habilita 'AD HOC DISTRIBUTED QUERIES'
    SP_CONFIGURE 'AD HOC DISTRIBUTED QUERIES',1
    RECONFIGURE WITH OVERRIDE;
    GO
    
    depois tente criar novamente o linked server


    Att.
    Lukas Baldan

  • quinta-feira, 3 de maio de 2012 15:28
     
     

    Lukas me desculpe. mas não estou a enteder.

    que código devo usar para copiar os dados do mdb para tabela sql server? via o caminho de rede.

    Se poder poste um exemplo, agradecido


    Visual Basic 2008 Express Edition SQL Server Management Studio

  • quinta-feira, 3 de maio de 2012 15:31
     
     Resposta Proposta Contém Código

    depois de executar o codigo acima tente novamente o codigo que você postou

    EXEC sp_addlinkedserver
     @server = 'MDBSERVER', -- Nome do Linked Server
     @provider = 'Microsoft.Jet.OLEDB.4.0', -- Provider da conexão
     @srvproduct = 'OLE DB Provider for Jet', -- Descrição do provider
     @datasrc = 'C:\\teste.mdb' -- Nome do arquivo
     GO
     
    Select * from [MDBSERVER]...teste -- Select para acesso aos dados


    Att.
    Lukas Baldan

  • quinta-feira, 3 de maio de 2012 15:51
     
     

    beleza :)

    Agora tenho que fazer o insert into né?

    Neste momento estou a fazer uma consulta ao mdb e a mostrar no sql server né?

    valeu


    Visual Basic 2008 Express Edition SQL Server Management Studio

  • quinta-feira, 3 de maio de 2012 15:57
     
     

    Exato


    Att.
    Lukas Baldan

  • quinta-feira, 3 de maio de 2012 16:03
     
      Contém Código

    tenho que fazer o insert coluna a coluna ?

    ou posso copiar logo tudo de uma vez?

    Esta consulta que estou a ver não fica guardada em lado nenhum né?

    Como faço 

    Select * from [MDBSERVER]...teste

    Pensei que o sql cria-se a tabela MDBSERVER

    valeu


    Visual Basic 2008 Express Edition SQL Server Management Studio

  • quinta-feira, 3 de maio de 2012 16:10
     
      Contém Código

    Você tem duas alternativas

    Criar a tabela MDBSERVER primeiro e depois inserir

    ou fazer o seguinte

    Select * into MDBSERVER from [MDBSERVER]...teste

    este comando ja cria a tabela MDBSERVER com os dados do Select


    Att.
    Lukas Baldan


  • quinta-feira, 3 de maio de 2012 16:14
     
     

    humm eu preferia fazer logo o update na tabela teste.

    Vou explicar.

    o ficheiro mdb vai sofrer muitas alterações. Eu preciso de que cada vez executar este sintaxe ele ir ao mdb e copiar as alterações para a tabela teste no sql.

    Mas isto levanta-me um problema. Na primeira vez que fizer o update não terei valores na tabela teste do ficheiro dados.mdb. Terei que fazer um if na sintaxe do sql server.

    Na primeira vez ele copia e na segunda e seguintes ele actualiza. entendeu?

    Valeu


    Visual Basic 2008 Express Edition SQL Server Management Studio

  • quinta-feira, 3 de maio de 2012 16:21
     
      Contém Código

    Sim,

    da para fazer desta forma com

    IF (select count(*) from teste) = 0
    BEGIN
    --Insere
    END
    ELSE
    BEGIN
    --ATUALIZA
    END

    ou voce pode tentar usar o Merge


    Att.
    Lukas Baldan


  • quinta-feira, 3 de maio de 2012 16:39
     
      Contém Código

    Então ficaria:

    IF (select count(*) from teste) = 0
    BEGIN
    Select * into MDBSERVER from [MDBSERVER]...teste
    END
    ELSE
    BEGIN
    update MDBSERVER set *
    END
    

    No select eu não queria criar a tabela. Pois a tabela já existe. É a tabela teste.

    No update dá para fazer update a tudo? sem ter que especificar colunas?

    Valeu


    Visual Basic 2008 Express Edition SQL Server Management Studio

  • quinta-feira, 3 de maio de 2012 16:52
     
      Contém Código
    IF (select count(*) from teste) = 0
    BEGIN
    INERT INTO TESTE
    Select * from [MDBSERVER]...teste
    END
    ELSE
    BEGIN
    update TESTE
    set CAMPO1 = B.campo1
    from TESTE a
    inner join [MDBSERVER]...teste b
    on a.codigo = b.codigo
    --codigo seria o campo chave primaria da sua tabela
    
    END

    não da teria que especificar as colunas.


    Att.
    Lukas Baldan


  • sábado, 5 de maio de 2012 20:22
     
      Contém Código

    Lukas estive a tentar executar o código novamente e lá apareceu novamente os erros: :/

    O meu objectivo é copiar o conteúdo de uma tabela access para uma tabela SQL. Isto deve ser feito através do caminho de rede do access.

    Esqueça a parte de actualizar. isso eu faço com outra tabela, é melhor.

    Obrigado

    Erro:

    Configuration option 'show advanced options' changed from 1 to 1. Run the RECONFIGURE statement to install.
    Configuration option 'Ad Hoc Distributed Queries' changed from 1 to 1. Run the RECONFIGURE statement to install.
    Msg 7308, Level 16, State 1, Line 2
    OLE DB provider 'Microsoft.Jet.OLEDB.4.0' cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode.
    

    código:

    --Deleta o servidor já criado
    sp_dropserver 'MDBSERVER', 'droplogins'
    GO
    
    --Habilita Opções Avançadas
    SP_CONFIGURE 'SHOW ADVANCED OPTION',1
    RECONFIGURE WITH OVERRIDE;
    GO
    
    -- Habilita 'AD HOC DISTRIBUTED QUERIES'
    SP_CONFIGURE 'AD HOC DISTRIBUTED QUERIES',1
    RECONFIGURE WITH OVERRIDE;
    GO
    
    EXEC sp_addlinkedserver
     @server = 'MDBSERVER', -- Nome do Linked Server
     @provider = 'Microsoft.Jet.OLEDB.4.0', -- Provider da conexão
     @srvproduct = 'OLE DB Provider for Jet', -- Descrição do provider
     @datasrc = 'C\teste.mdb' -- Nome do arquivo
     GO
     
    Select * from [MDBSERVER]...teste -- Select para acesso aos dados
    


    Visual Basic 2008 Express Edition SQL Server Management Studio

  • segunda-feira, 7 de maio de 2012 12:21
     
     
    Qual a versão do windows e do sql???

    Att.
    Lukas Baldan

  • segunda-feira, 7 de maio de 2012 12:46
     
     
    win xp e sql server 2008

    Visual Basic 2008 Express Edition SQL Server Management Studio

  • terça-feira, 8 de maio de 2012 12:54
     
     Respondido Contém Código

    Bem vamos tentar de outra forma,

    faça o download de http://www.microsoft.com/en-us/download/details.aspx?id=13255

    pegue a primeira versão AccessDatabaseEngine.exe que é  x86 e instale.

    após a instalação tente executar este script

    --Deleta o servidor já criado
    sp_dropserver 'MDBSERVER', 'droplogins'
    GO
    
    --Habilita Opções Avançadas
    SP_CONFIGURE 'SHOW ADVANCED OPTION',1
    RECONFIGURE WITH OVERRIDE;
    GO
    
    -- Habilita 'AD HOC DISTRIBUTED QUERIES'
    SP_CONFIGURE 'AD HOC DISTRIBUTED QUERIES',1
    RECONFIGURE WITH OVERRIDE;
    GO
    
    exec sp_addlinkedserver
     @server = 'MDBSERVER',
     @provider = 'Microsoft.ACE.OLEDB.12.0',
     @srvproduct = 'OLE DB Provider for ACE',
     @datasrc = 'C:\teste.MDB'
    
    GO
    
    
    Select * from [MDBSERVER]...teste -- Select para acesso aos dados

    ou siga os passos deste link
    Add MSAccess 2007 to SQL2008 server via Linked Server and access all MS Access table information from SQL

    Att.
    Lukas Baldan



  • quarta-feira, 6 de junho de 2012 14:06
    Moderador
     
     

    Olá Jonas,

    Conseguiu resolver essa questão? 

    Se sim, marque como resposta ou poste a maneira utilizada para deixarmos arquivado no fórum. :)

    Obrigada,


    Heloisa Pires | LATAM Forum Support Engineer | Microsoft Corporation