Boa noite pessoal.
Alguma alma caridosa poderia me ajudar. Este módulo atualiza uma tabela vinculada no meu programa.
O problema é o seguinte, nescessito muito de deixar o banco de dados com senha para que ninguem consigua mexer em algo no codigo e fazer besteira.
O código abaixo atualiza normalmente sem nenhum problema quando o banco de dados não tem senha, e quando tem senha ele abre uma inputbox para informar a senha e fazer a atualização.
Eu gostaria de mudar, trocar a inputbox que pede a senha pela senha do banco de dados assim ele não pediria a senha e atualizaria minha tabela direto.
Obrigado a quem puder ajudar.
Alguma alma caridosa poderia me ajudar. Este módulo atualiza uma tabela vinculada no meu programa.
O problema é o seguinte, nescessito muito de deixar o banco de dados com senha para que ninguem consigua mexer em algo no codigo e fazer besteira.
O código abaixo atualiza normalmente sem nenhum problema quando o banco de dados não tem senha, e quando tem senha ele abre uma inputbox para informar a senha e fazer a atualização.
Eu gostaria de mudar, trocar a inputbox que pede a senha pela senha do banco de dados assim ele não pediria a senha e atualizaria minha tabela direto.
Obrigado a quem puder ajudar.
- Código:
Option Compare Database
Dim SenhaBD As String
Public Sub AtualizarTabela()
Dim Banco As String
Dim Atualizado As Boolean
'Armazena o caminho do arquivo
Banco = "c:\teste\teste.accdb"
'Verifica se algum banco de dados foi selecionado
If Not IsEmpty(Banco) Then
'Percorre todas as tabelas da base
For Cont = 0 To CurrentDb.TableDefs.Count - 1
'A propriedade connect só possui valor quando é uma tabela vinculada
'Verifica se a tabela atual possui valor nessa propriedade
If Not CurrentDb.TableDefs(Cont).Connect = "" Then
'Verifica se a atualização ocorreu
Atualizado = AtualizaTabelaVinculada(CurrentDb.TableDefs(Cont).Name, Banco)
End If
Next
End If
'Verifica se ocorreu a atualização
If Atualizado Then
MsgBox "Tabelas atualizadas!", vbInformation, "Atualização concluída..."
DoCmd.OpenForm "frmPrincipal", , , , , acDialog
Else
MsgBox "Seu aplicativo não foi atualizado está atualização será encerrada", vbCritical, "Aviso"
DoCmd.Quit
End If
End Sub
'Abre um dialog para buscar o caminho de um arquivo
Public Function BuscaArquivo() As String
On Error GoTo ErrHandler
'Declara o dialog
Dim CaixaDialogo As Office.FileDialog
'Define como um dialog que busca arquivos
Set CaixaDialogo = Application.FileDialog(msoFileDialogFilePicker)
With CaixaDialogo
'Não permite múltipla seleção
.AllowMultiSelect = False
'Define o título do dialog
.Title = "Selecione o aplicativo para atualização..."
'Define o texto do botão
.ButtonName = "Selecionar"
'Limpa e adiciona novos filtros
.Filters.Clear
.Filters.Add "Access Databases", "*.MDB,ACCDB"
'Caso o Show seja verdadeiro, significa que o usuário selecionou ao menos 1 arquivo
If .Show = True Then
BuscaArquivo = .SelectedItems(1)
End If
End With
ErrHandler:
If Err.Number <> 0 Then
'Caso ocorra algum erro, exibe a mensagem com o número e a descrição
MsgBox "Erro: " & Err.Description & vbCrLf, vbCritical, "Número do erro: " & Err.Number
'Indica que não atualizou
BuscaArquivo = ""
End If
End Function
'Procedure to relink tables from the Common Access Database
Public Function AtualizaTabelaVinculada(ByVal NomeTabela As String, ByVal CaminhoBackend As String) As Boolean
On Error GoTo ErrHandler
Dim Banco As DAO.Database
Dim Tabela As DAO.TableDef
'Define o banco de dados atual
Set Banco = CurrentDb()
'Define a tabela a ser atualizada
Set Tabela = Banco.TableDefs(NomeTabela)
'Executa a atualização com a senha caso a variável SenhaBD não esteja vazia
If Not SenhaBD = "" Then
'Define a nova conexão
Tabela.Connect = ";DATABASE=" & CaminhoBackend & ";pwd=" & SenhaBD
Else
'Define a nova conexão
Tabela.Connect = ";DATABASE=" & CaminhoBackend
End If
'Atualiza o link
Tabela.RefreshLink
ErrHandler:
'Este erro indica que o banco de dados escolhido precisa de uma senha
If Err.Number = 3031 Then
'Solicita a senha do banco de dados
SenhaBD = InputBox("Informe a senha do banco de dados:", "Senha...")
'Caso não informe nenhuma senha, finaliza a atualização
If SenhaBD = "" Then
AtualizaTabelaVinculada = False
Exit Function
End If
'Executa novamente a atualização, agora com a senha do BD
AtualizaTabelaVinculada NomeTabela, CaminhoBackend
ElseIf Err.Number <> 0 Then
'Caso ocorra algum erro, exibe a mensagem com o número e a descrição
MsgBox "Erro: " & Err.Description & vbCrLf, vbCritical, "Número do erro: " & Err.Number
'Indica que não atualizou
AtualizaTabelaVinculada = False
Else
'Indica que atualizou
AtualizaTabelaVinculada = True
End If
End Function