Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Codigo vba para definir path das tabelas vinculadas


Humm

Pergunta

4 respostass a esta questão

Posts Recomendados

  • 0

dei uma lida, esse artigo é interessante quando se usa sql server como banco de dados.. no meu caso to usando o bd do proprio access mas dividido entre front end e back end.

o problema é que o back end tem senha.. e estou projetando um front end para acessar os dados por path de rede. o lance é que esse front end, antes de iniciar forms que acessam as tabelas vinculadas, ele vai checar se as mesmas existem ou estao acessiveis.. isso eu sei fazer..

agora caso não estejam, dar a opcao de alterar o path até elas.. isso é que não sei fazer de forma programatica, ou seja, via vba. até achei alguns exemplos, mas eu preciso de uma funcao ou codigo que de a opcao de se incluir a senha do bd, senao vai dar acesso negado.

acredito ter achado algo.. so vou poder testar mais tarde:

''Connection string with database password  
strConnect = "MS Access;PWD=pw;DATABASE=" & Me.txtNewDataDirectory  
Set rs = CurrentDb.OpenRecordset("Select TableName From LinkTables " _ & "WHERE TableType = 'LINK'")  
Do While Not RS.EOF     ''Check if the table is already linked, if it is, update the connection     ''otherwise, link the table.       
If IsNull(DLookup("[Name]", "MSysObjects", "[Name]='" & rs!TableName & "'")) Then
         Set tdf = db.CreateTableDef(RS!TableName, dbAttachSavePWD, _
             rs!TableName, strConnect)
         db.TableDefs.Append tdf
     Else
         db.TableDefs(rs!TableName).Connect = strConnect
     End If
     db.TableDefs(rs!TableName).RefreshLink
     rs.MoveNext Loop

Editado por Humm
Link para o comentário
Compartilhar em outros sites

  • 0

Ummm entendi o que deseja, creio que este artigo sirva:

http://www.macoratti.net/acc_seg.htm

Acho que essa parte do código utilizado no exemplo do link, pode ser alterado para pegar o resultado ou conteúdo de uma caixa de texto por exemplo.

Dim wrk As Workspace
Dim db As Database
Set wrk = CreateWorkspace("", "admin", "", dbUseJet)
Set db = wrkJet.OpenDatabase("arquivo.mdb", True, False, ";PWD=senha")

Não testei mas me pareceu bem interessante o metodo. Espero que sirva.

Link para o comentário
Compartilhar em outros sites

  • 0

cara, finalmente consegui.. lembrando que rodei em access 2010

segue a função que atualiza o path das tabelas de forma programatica, sem excluir ou incluir nada, e inclusive com senha do accdb das tabelas caso haja.

Public Function ReLink(strNewPath As String) As Boolean
 Dim dbs As Database
 Dim tdf As TableDef
 Dim intCount As Integer
 Dim frmCurrentForm As Form

DoCmd.Hourglass True
 On Error GoTo ErrLinkUpExit
' repare que eu criei um form chamado INICIO, que sempre inicia antes de tudo pra checar o link das tabelas..
 Forms!inicio.lblMsg.Visible = True 'aqui é um rotulo que vai exibir o status de todo procedimento
 Forms!inicio.cmdok.Visible = False 'aqui é um botao pra dar seguimento caso tudo esteja ok

Set dbs = CurrentDb

For intCount = 0 To dbs.TableDefs.Count - 1
 Set tdf = dbs.TableDefs(intCount)
 If tdf.Name = "APP" Then GoTo jump 'essa condição voce pode usar para bypassar tabelas que não são linkadas ou de outro link separado que você não quer checar
 If tdf.Connect <> "" Then
    Forms!inicio.lblMsg.Caption = "Conectando Tabela " & tdf.Name & "..."
    DoEvents
    tdf.Connect = "MS Access;PWD=senhaDoAccdb;DATABASE=" & strNewPath & "\bd.accdb" 'aqui voce coloca o nome do arquivo do seu back end
    tdf.RefreshLink
 End If ' tdf.Connect <> ""
jump:
 Next intCount

Set dbs = Nothing
 Set tdf = Nothing

DoCmd.Hourglass False
 Forms!inicio.lblMsg.Caption = "Conexão com o Banco de Dados realizada!"

 ReLink = True
 Forms!inicio.cmdok.Visible = True
 Exit Function

ErrLinkUpExit:
 DoCmd.Hourglass False

Select Case Err
 Case 3031 ' Password Protected
 Forms!inicio.lblMsg.Caption = "Falha: Banco de Dados protegido com senha diferente! Provavelmente o caminho indicado contém uma versão incompatível do Banco de Dados."
 Case 3011 ' Table missing
 DoCmd.Hourglass False
 Forms!inicio.lblMsg.Caption = "Falha: O caminho especificado não possui a tabela '" & tdf.SourceTableName & "'"
 Case 3024 ' Back End not found
 Forms!inicio.lblMsg.Caption = "Falha: Banco de Dados não encontrado!"
 Case 3051 ' Access Denied
 Forms!inicio.lblMsg.Caption = "Falha: Acesso negado!"
 Case 3027 ' Read Only
 Forms!inicio.lblMsg.Caption = "Falha: Banco de Dados em '" & strNewPath & "'" & " é somente leitura!"
 Case 3044 ' Invalid Path
 Forms!inicio.lblMsg.Caption = "Falha: " & strNewPath & " não é um caminho válido!"
 Case 3265
 Forms!inicio.lblMsg.Caption = "Tabela '" & tdf.Name & "'" & _
 " não encontrada em ' " & strNewPath & "'"
 Case 3321 ' Nothing Entered
 Forms!inicio.lblMsg.Caption = "Falha: Falta o nome do Banco de Dados"
 Case Else
 Forms!inicio.lblMsg.Caption = "Erro:" & str(Err) & Err.Description
 End Select

Set tdf = Nothing
 ReLink = False

End Function

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152.1k
    • Posts
      651.8k
×
×
  • Criar Novo...