Humm Postado Abril 26, 2011 Denunciar Share Postado Abril 26, 2011 alguém sabe como fazer isso de forma programatica? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 MrMALJ Postado Abril 26, 2011 Denunciar Share Postado Abril 26, 2011 Ainda não tentei isso, mais creio que há, pesquisei na net e achei um artigo interessante que pode lhe ajudar.http://www.macoratti.net/sql_cod.htm Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Humm Postado Abril 26, 2011 Autor Denunciar Share Postado Abril 26, 2011 (editado) 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 Abril 26, 2011 por Humm Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 MrMALJ Postado Abril 26, 2011 Denunciar Share Postado Abril 26, 2011 Ummm entendi o que deseja, creio que este artigo sirva:http://www.macoratti.net/acc_seg.htmAcho 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Humm Postado Abril 28, 2011 Autor Denunciar Share Postado Abril 28, 2011 cara, finalmente consegui.. lembrando que rodei em access 2010segue 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Humm
alguém sabe como fazer isso de forma programatica?
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
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.