Usuário com melhor resposta
Como acessar dados do SQL Server via Access 97?

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?
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
-
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
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
-
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
-
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)?
-
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.
-
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
-
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?
- Editado Henrique - Dev quinta-feira, 31 de outubro de 2013 18:20
-
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