Bom dia a todos... pessoal tenho um projeto onde uso tabelas vinculadas de um banco de dados Sql Server. fiz a vinculação usando o assistente do próprio Access dai funciona bem... mas uso esse projeto em vario servidores com caminho, nome, senha de banco diferente ai toda vez tenho que abrir o código fonte pra fazer essa configuração, queria saber se existe uma forma de manter essa configuração em um arquivo .ini dessa forma só faria a alteração do .ini sem precisar abrir o o projeto em modo estrutura e expor o código pro cliente. Desde já ficarei muito grato pela atenção.
4 participantes
[Resolvido]Usar um arquivo .ini pra vincular tabelas de um banco SQL Server
Bred- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 115
Registrado : 15/09/2010
Cláudio Más- Developer
- Respeito às regras :
Sexo :
Localização :
Mensagens : 1314
Registrado : 21/01/2012
Bom dia,
Não sei se tem como fazer utilizando um .ini.
Pode ser feito atualizando os vínculos das tabelas via vba, a string de conexão seria mais ou menos assim:
"ODBC;Description=arquivo_dsn;DRIVER=SQL Server Native Client 10.0;SERVER=SERVIDOR,1433;UID=sa;PWD=senha;APP=Microsoft Office 2003;WSID=SERVIDOR;DATABASE=BDados;LANGUAGE=Português (Brasil);"""
O código para atualizar os vínculos:
Não sei se tem como fazer utilizando um .ini.
Pode ser feito atualizando os vínculos das tabelas via vba, a string de conexão seria mais ou menos assim:
"ODBC;Description=arquivo_dsn;DRIVER=SQL Server Native Client 10.0;SERVER=SERVIDOR,1433;UID=sa;PWD=senha;APP=Microsoft Office 2003;WSID=SERVIDOR;DATABASE=BDados;LANGUAGE=Português (Brasil);"""
O código para atualizar os vínculos:
- Código:
Dim dbs As Database
Dim tdf As TableDef
Dim strConn As String
strConn = "ODBC;Description=arquivo_dsn;DRIVER=SQL Server Native Client 10.0;SERVER=SERVIDOR,1433;UID=sa;PWD=senha;APP=Microsoft Office 2003;WSID=SERVIDOR;DATABASE=BDados;LANGUAGE=Português (Brasil);"""
' Loop por todas as tabelas do banco de dados.
Set dbs = CurrentDb
For Each tdf In dbs.TableDefs
' Se a tabela tem uma seqüência de conexão, é uma tabela vinculada.
If Len(tdf.Connect) > 0 Then
If Left$(tdf.Connect, 5) = "ODBC;" Then tdf.Connect = strConn: tdf.RefreshLink
End If
Next tdf
Bred- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 115
Registrado : 15/09/2010
Amigo Claudio.... desde ja grato pela atenção.... mas dessa forma toda vez que mudar a configuração do servidor terei que abrir o codigo do modulo para alterar senha e caminho, sendo assim não resolveria a minha questão...pois quero torna essa configuração de forma que possa ser feita sem precisar abri o projeto no modo estrutura e altera direto no código.
Cláudio Más- Developer
- Respeito às regras :
Sexo :
Localização :
Mensagens : 1314
Registrado : 21/01/2012
Para que servem os formulários?
Bred- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 115
Registrado : 15/09/2010
Me desculpe Cláudio mas não íntedi sua pergunta....
?????
?????
Avelino Sampaio- Developer
- Respeito às regras :
Sexo :
Localização :
Mensagens : 3900
Registrado : 04/04/2010
O amigo claudio esta te dizendo que não perecisa abrir o seu Banco de dados no modo designer para alterar o caminho e/ou senha.
Vc pode programar o seu aplicativo para abrir um formulário a assim inserir os dados necessários para a nova vinculação.
Sucesso!
Vc pode programar o seu aplicativo para abrir um formulário a assim inserir os dados necessários para a nova vinculação.
Sucesso!
.................................................................................
Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces
Clique AQUI e analise o custo beneficio do material oferecido.
Avelino Sampaio- Developer
- Respeito às regras :
Sexo :
Localização :
Mensagens : 3900
Registrado : 04/04/2010
Veja aqui um ideia neste meu artigo:
http://www.usandoaccess.com.br/tutoriais/tuto13.asp?id=1#inicio
Sucesso!
http://www.usandoaccess.com.br/tutoriais/tuto13.asp?id=1#inicio
Sucesso!
.................................................................................
Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces
Clique AQUI e analise o custo beneficio do material oferecido.
Cláudio Más- Developer
- Respeito às regras :
Sexo :
Localização :
Mensagens : 1314
Registrado : 21/01/2012
bred, complementando a resposta do Avelino.
Você pode usar uma caixa de listagem para exibir as opções de servidores SQL Server num formulário.
Ao clicar em um botão no formulário, execute o código que mencionei anteriormente montando a variável strConn conforme o item selecionado na caixa de listagem.
Você tem conhecimento de vba?
Você pode usar uma caixa de listagem para exibir as opções de servidores SQL Server num formulário.
Ao clicar em um botão no formulário, execute o código que mencionei anteriormente montando a variável strConn conforme o item selecionado na caixa de listagem.
Você tem conhecimento de vba?
Avelino João- Avançado
- Respeito às regras :
Sexo :
Localização :
Mensagens : 316
Registrado : 10/03/2012
Veja nesse topico como eu uso conexao DNSLESS http://maximoaccess.forumeiros.com/t10264-access-sql-server
.................................................................................
Proaccess - Angola
Bred- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 115
Registrado : 15/09/2010
ok.... Cláudio e Avelino entendi em parte... mas se eu quiser selecionar só algumas tabelas do banco, e não todas, também queria queria chamar as variaveis.
SERVER=SERVIDOR,1433 => endereço ip e porta
UID=sa => usuario
PWD=senha => senha
WSID=SERVIDOR => ?
para buscar esse dados em uma tabela onde tenho que fazer as alterações no seu codigo. assim poderia criar um formulario onde posso fazer as configurações toda vez que eu precisar vincular as tabelas.
SERVER=SERVIDOR,1433 => endereço ip e porta
UID=sa => usuario
PWD=senha => senha
WSID=SERVIDOR => ?
para buscar esse dados em uma tabela onde tenho que fazer as alterações no seu codigo. assim poderia criar um formulario onde posso fazer as configurações toda vez que eu precisar vincular as tabelas.
Avelino João- Avançado
- Respeito às regras :
Sexo :
Localização :
Mensagens : 316
Registrado : 10/03/2012
Bred boa noite veja pode fazer dessa forma
Option Compare Database
'/ / Nome: AttachDSNLessTable
'/ / Objetivo: Criar uma tabela vinculada ao SQL Server sem usar um DSN
'/ / Parâmetros
'/ StLocalTableName /: Nome da tabela que você está criando no banco de dados atual
'/ StRemoteTableName /: Nome da tabela que você está ligando para o banco de dados SQL Server
'/ StServer /: Nome do SQL Server que você está ligando
'/ StDatabase /: Nome do banco de dados SQL Server que você está ligando
'/ / StUsername: Nome do usuário do SQL Server que pode se conectar ao SQL Server, deixe em branco para usar uma conexão confiável
'/ / StPassword: senha do usuário SQL Servidor
Function AttachDSNLessTable(stLocalTableName As String, stRemoteTableName As String, stServer As String, stDatabase As String, Optional stUserName As String, Optional stPassword As String)
On Error GoTo AttachDSNLessTable_Err
Dim td As TableDef
Dim stConnect As String
For Each td In CurrentDb.TableDefs
If td.Name = stLocalTableName Then
CurrentDb.TableDefs.Delete stLocalTableName
End If
Next
If Len(stUserName) = 0 Then
'/ / Use autenticação confiável se stUsername não é fornecido.
stConnect = "ODBC;Driver={MySQL ODBC 5.1 Driver};SERVER=" & stServer & ";DATABASE=" & stDatabase & ";Trusted_Connection=Yes"
Else
'/ / AVISO: Isto irá poupar o nome de usuário ea senha com as informações da tabela vinculada.
stConnect = "ODBC;Driver={MySQL ODBC 5.1 Driver};SERVER=" & stServer & ";DATABASE=" & stDatabase & ";UID=" & stUserName & ";PWD=" & stPassword & ";Option=3;"";INITSTMT=SET @@wait_timeout=28800"
End If
Set td = CurrentDb.CreateTableDef(stLocalTableName, dbAttachSavePWD, stRemoteTableName, stConnect)
CurrentDb.TableDefs.Append td
AttachDSNLessTable = False 'True
Exit Function
AttachDSNLessTable_Err:
DoCmd.OpenForm "Config"
'AttachDSNLessTable = False
'MsgBox "AttachDSNLessTable encontrou um erro inesperado: " & Err.Description
End Function
Function CreateConnection()
Dim strPasswd As String
Dim strServer As String
Dim strUser As String
Dim strDB As String
Dim strPort As String
'strPasswd = "007"
'strUser = "root"
'strServer = "10.9.35.224"
'strDB = "maestro"
'strPort = "3306"
strServer = DLookup("[Servidor]", "tbl_Config", "[ID_Config]=1") 'Servidor Web
strUser = DLookup("[USServer]", "tbl_Config", "[ID_Config]=1") 'Usuário do banco de dados
strPasswd = DLookup("[PWServer]", "tbl_Config", "[ID_Config]=1") 'Senha do banco de dados
strDB = DLookup("[DbServer]", "tbl_Config", "[ID_Config]=1") 'Database
strPort = DLookup("[Port]", "tbl_Config", "[ID_Config]=1") 'Porta do servidor
'Rem error
On Error Resume Next 'Tratamento de erro
'"Essas tabelas devem ser ligados
Set dummy = AttachDSNLessTable("venda", "venda", strServer, strDB, strUser, strPasswd)
End Function
Option Compare Database
'/ / Nome: AttachDSNLessTable
'/ / Objetivo: Criar uma tabela vinculada ao SQL Server sem usar um DSN
'/ / Parâmetros
'/ StLocalTableName /: Nome da tabela que você está criando no banco de dados atual
'/ StRemoteTableName /: Nome da tabela que você está ligando para o banco de dados SQL Server
'/ StServer /: Nome do SQL Server que você está ligando
'/ StDatabase /: Nome do banco de dados SQL Server que você está ligando
'/ / StUsername: Nome do usuário do SQL Server que pode se conectar ao SQL Server, deixe em branco para usar uma conexão confiável
'/ / StPassword: senha do usuário SQL Servidor
Function AttachDSNLessTable(stLocalTableName As String, stRemoteTableName As String, stServer As String, stDatabase As String, Optional stUserName As String, Optional stPassword As String)
On Error GoTo AttachDSNLessTable_Err
Dim td As TableDef
Dim stConnect As String
For Each td In CurrentDb.TableDefs
If td.Name = stLocalTableName Then
CurrentDb.TableDefs.Delete stLocalTableName
End If
Next
If Len(stUserName) = 0 Then
'/ / Use autenticação confiável se stUsername não é fornecido.
stConnect = "ODBC;Driver={MySQL ODBC 5.1 Driver};SERVER=" & stServer & ";DATABASE=" & stDatabase & ";Trusted_Connection=Yes"
Else
'/ / AVISO: Isto irá poupar o nome de usuário ea senha com as informações da tabela vinculada.
stConnect = "ODBC;Driver={MySQL ODBC 5.1 Driver};SERVER=" & stServer & ";DATABASE=" & stDatabase & ";UID=" & stUserName & ";PWD=" & stPassword & ";Option=3;"";INITSTMT=SET @@wait_timeout=28800"
End If
Set td = CurrentDb.CreateTableDef(stLocalTableName, dbAttachSavePWD, stRemoteTableName, stConnect)
CurrentDb.TableDefs.Append td
AttachDSNLessTable = False 'True
Exit Function
AttachDSNLessTable_Err:
DoCmd.OpenForm "Config"
'AttachDSNLessTable = False
'MsgBox "AttachDSNLessTable encontrou um erro inesperado: " & Err.Description
End Function
Function CreateConnection()
Dim strPasswd As String
Dim strServer As String
Dim strUser As String
Dim strDB As String
Dim strPort As String
'strPasswd = "007"
'strUser = "root"
'strServer = "10.9.35.224"
'strDB = "maestro"
'strPort = "3306"
strServer = DLookup("[Servidor]", "tbl_Config", "[ID_Config]=1") 'Servidor Web
strUser = DLookup("[USServer]", "tbl_Config", "[ID_Config]=1") 'Usuário do banco de dados
strPasswd = DLookup("[PWServer]", "tbl_Config", "[ID_Config]=1") 'Senha do banco de dados
strDB = DLookup("[DbServer]", "tbl_Config", "[ID_Config]=1") 'Database
strPort = DLookup("[Port]", "tbl_Config", "[ID_Config]=1") 'Porta do servidor
'Rem error
On Error Resume Next 'Tratamento de erro
'"Essas tabelas devem ser ligados
Set dummy = AttachDSNLessTable("venda", "venda", strServer, strDB, strUser, strPasswd)
End Function
.................................................................................
Proaccess - Angola
Bred- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 115
Registrado : 15/09/2010
Avelino João ótimo conseguir adaptar seu código a minha aplicação e funcionou perfeitamente... se não for abusar muito... queria coloca pra abrir o formulário de configuração para abrir automaticamente toda vez que ocorrer algum erro de comunicação com o o sql server... sei que deve ser feito em uma das funções do modulo mas não sei o qual e nem como tratar o erro...
Avelino João- Avançado
- Respeito às regras :
Sexo :
Localização :
Mensagens : 316
Registrado : 10/03/2012
Boa tarde veja no codigo que estou abrir um formulario em caso de erros DoCmd.OpenForm "Config"
.................................................................................
Proaccess - Angola
Bred- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 115
Registrado : 15/09/2010
Ok João .... mas onde o em que parte do modulo aplico o comando DoCmd.OpenForm "Config"?
Bred- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 115
Registrado : 15/09/2010
Volto para agradecer a todos pela grande ajuda..... muitissimo obrigado a todos.
Conteúdo patrocinado
» [Resolvido]Tabelas Vinculadas SQL Server em Rede - Logon Obrigatório no SQL Server
» [Resolvido]SQL server 2008 com tabelas do access
» [Resolvido]Abrir a janela de Gerenciamento de Tabelas Vinculadas - SQL Server
» [Resolvido]Usar gerenciador de tabelas vinculadas
» [Resolvido]Problemas com arquivo Be em server: Arquivo já em uso
» [Resolvido]SQL server 2008 com tabelas do access
» [Resolvido]Abrir a janela de Gerenciamento de Tabelas Vinculadas - SQL Server
» [Resolvido]Usar gerenciador de tabelas vinculadas
» [Resolvido]Problemas com arquivo Be em server: Arquivo já em uso