none
Como acessar dados do SQL Server via Access 97? RRS feed

  • Pergunta

  • Na empresa que trabalho temos um sistema legado em Access 97 que estamos tentando migrar a base de dados para SQL Server.

    Em um ambiente de testes, usando o "Microsoft SQL Server Migration Assistant for Access", consegui migrar toda a base para o SQL Server, mantendo links nos arquivos .MDB para suas respectivas tabelas no SQL Server. Dessa forma, imaginávamos ser mais fácil de migrar a base sem modificar o código do front-end.

    No entanto, ao tentar rodar o front-end após o processo de migração, o sistema não funciona apresentando uma mensagem de erro no Microsoft Jet.

    Alguém sabe dizer o que deve ser feito para que um formulário do Access acesse uma tabela ligada ao SQL Server?

    PS: Li em um site que eu deveria modificar as Strings de conexão. É isso? Onde ficam essas Strings?

    quinta-feira, 24 de outubro de 2013 14:13

Respostas

  • Boa tarde Henrique,

    O local da string de conexão depende do desenvolvimento, se for uma aplicação desktop (Windows Form), pode ser feito uma classe desta forma:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace NOME DO PROJETO
    {
        public class Conexao
        {
            //String de conexão com o Banco de Dados.
            private string stringConexao = @"Data Source=MÁQUINA\SQLEXPRESS; Initial Catalog=NOME DO BANCO DE DADOS; Integrated Security=true";

            //Método para ser utilizado em diversas classes.
            public string StringConexao
            {
                get { return stringConexao; }
            }
        }
    }

    Com o método "StringConexao", você faz a instância da classe acima e, como retorna uma string, você pode declarar uma variável na classe de Acesso a Dados (DAL) e atribuir o valor para a variável este método.

    Com isto, você passar como parâmetro esta variável em instância da classe SqlConnection.

    Qualquer dúvida estou a disposição.

    • Marcado como Resposta Henrique - Dev quinta-feira, 24 de outubro de 2013 19:03
    quinta-feira, 24 de outubro de 2013 14:41
  • Adicione referência à biblioteca Microsoft ActiveX Data Objects 2.6 e adapte o exemplo abaixo. No entanto, como eu disse, você terá que entrar no site que falei e descobrir como montar sua cadeia de conexão.

    Sub fnc()
      Dim objConnection As ADODB.Connection
      Dim rstData As ADODB.Recordset
      Dim strConnectionString As String
      
      strConnectionString = "Provider=SQLOLEDB;" _
      & "Data Source=NomeDoComputador\NomeDoServidorSQL;" _
      & "Initial Catalog=Northwind;" _
      & "User ID=Usuário;Password=Senha;" _
      & "Network Library=dbmssocn"
      Set objConnection = New ADODB.Connection
      objConnection.ConnectionString = strConnectionString
      objConnection.Open
      
      Set rstData = New ADODB.Recordset
    
      'Resto do código
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta Henrique - Dev quinta-feira, 31 de outubro de 2013 18:11
    sexta-feira, 25 de outubro de 2013 23:32
    Moderador

Todas as Respostas

  • Boa tarde Henrique,

    O local da string de conexão depende do desenvolvimento, se for uma aplicação desktop (Windows Form), pode ser feito uma classe desta forma:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace NOME DO PROJETO
    {
        public class Conexao
        {
            //String de conexão com o Banco de Dados.
            private string stringConexao = @"Data Source=MÁQUINA\SQLEXPRESS; Initial Catalog=NOME DO BANCO DE DADOS; Integrated Security=true";

            //Método para ser utilizado em diversas classes.
            public string StringConexao
            {
                get { return stringConexao; }
            }
        }
    }

    Com o método "StringConexao", você faz a instância da classe acima e, como retorna uma string, você pode declarar uma variável na classe de Acesso a Dados (DAL) e atribuir o valor para a variável este método.

    Com isto, você passar como parâmetro esta variável em instância da classe SqlConnection.

    Qualquer dúvida estou a disposição.

    • Marcado como Resposta Henrique - Dev quinta-feira, 24 de outubro de 2013 19:03
    quinta-feira, 24 de outubro de 2013 14:41
  • Completando o que o Victor falou: ao fazer a migração de sua base de dados, não se esqueça de atualizar sua cadeia de conexão.

    Para estabelecer uma conexão com o Access, uma determinada configuração da cadeia de conexão é usada. No SQL Server, uma outra cadeia deverá ser usada.

    O que você deverá procurar é a propriedade .ConnectionString do objeto Connection do seu projeto.

    O valor ao qual você alterará essa propriedade pode ser montado usando este site como consulta: http://www.connectionstrings.com/sql-server/


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sexta-feira, 25 de outubro de 2013 01:02
    Moderador
  • Obrigado pela ajudar até agora, mas ainda não entendi onde devo utilizar a classe sugerida por Victor.

    Aqui na empresa nos utilizamos esse código para conectar à base de dados:

    Set DB_PA = DBEngine.Workspaces(0).OpenDatabase("\\ADM_NT69\SGO\SGO\SGO_DADOS\SGO_D_PA.MDB", False, False, ";pwd=SENHA")

    Set RST = DB_PA.OpenRecordset("PENDENCIA_AMBIENTAL_OBJETIVOS", DB_OPEN_TABLE)

    Sendo assim, onde devo utilizar o objeto Connection (Felipe) ou a classe Conexao (Victor)?

    sexta-feira, 25 de outubro de 2013 20:36
  • O SQL Server é um servidor de banco de dados robusto, muito diferente o access. O access é muito bom para aplicações pequenas de até 10.000 registros.

    A migração não deve ser problema, pois ambos são da Microsoft. O primeiro passo é planejar todo o processo de migração para evitar problemas futuros.


    Atenciosamente, Marcio Nogueira Cardoso Pinto.

    sexta-feira, 25 de outubro de 2013 21:23
  • Adicione referência à biblioteca Microsoft ActiveX Data Objects 2.6 e adapte o exemplo abaixo. No entanto, como eu disse, você terá que entrar no site que falei e descobrir como montar sua cadeia de conexão.

    Sub fnc()
      Dim objConnection As ADODB.Connection
      Dim rstData As ADODB.Recordset
      Dim strConnectionString As String
      
      strConnectionString = "Provider=SQLOLEDB;" _
      & "Data Source=NomeDoComputador\NomeDoServidorSQL;" _
      & "Initial Catalog=Northwind;" _
      & "User ID=Usuário;Password=Senha;" _
      & "Network Library=dbmssocn"
      Set objConnection = New ADODB.Connection
      objConnection.ConnectionString = strConnectionString
      objConnection.Open
      
      Set rstData = New ADODB.Recordset
    
      'Resto do código
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta Henrique - Dev quinta-feira, 31 de outubro de 2013 18:11
    sexta-feira, 25 de outubro de 2013 23:32
    Moderador
  • Obrigado Felipe, consegui efetuar a conexão com o banco SQL Server!

    Em compensação, depois que mudei a variável DB_PA do tipo Database para o tipo ADODB.Connection, meu código da erro em todas as chamadas de DB_PA.OpenRecordset. A verdade é que a variável DB_PA não tem mais o comando OpenRecordset.

    Sendo assim, qual o comando substituto do comando OpenRecordset para abrir uma tabela específica?



    quinta-feira, 31 de outubro de 2013 18:19
  • Código adicional:

      Dim strSql As String
      Dim rstData As ADODB.Recordset
      
      strSql = "SELECT * FROM sua_tabela"
      Set rstData = objConnection.Execute(strSql)
       
      Do While Not rstData.EOF
        Debug.Print rstData.Fields("nome_do_campo_1").Value
        Debug.Print rstData.Fields("nome_do_campo_2").Value
        '...
        rstData.MoveNext
      Loop


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quinta-feira, 31 de outubro de 2013 20:11
    Moderador