Newsgroup: it.comp.appl.access
Titolo: Collegare tabelle

Buongiorno a tutti.
Ho letto dei post vecchi e sono andato sul sito comune ma, sicuramente per
incapacita' mia non sono riuscito a raggiungere il risultato. In pratica
vorrei collegarmi con delle tabelle del back-end diciamo scrivendo percorso
dell'mdb e nome della tabella a cui collegarmi in due controlli di una
maschera o qualcosa del genere. Potreste  spiegarmi come, magari con qualche
dettaglio, perche' come ho gia' detto, con le funzioni che ho scaricaro dal
sito comune mi sono impicciato. Grazie e ciao.

 ha scritto nel messaggio
news:75tr9.41595$%M1.10...@twister2.libero.it...

Io ho trovato sul sito comune la soluzione a questo problema. Se fai una
ricerca per la parola chiave "collegate" troverai due risultati, un file ZIP
ed un codice di una SUB. Copia il codice nel tuo progetto, cerca la riga
path = BrowseFolder("Percorso corrente: " & aDB(intI, 2) & "\" & aDB(intI,
1))
sostituisci a tutta la funzione BrowseFolder, il riferimento al controllo
che contiene il tuo path+nome file e  avrai risolto!
--
-------------------------------------------------------
May the Force be with you
Skywalker Senior

 Ti ringrazio ci provo

 >
Pių o meno a metā del listato, cercala con l'apposita funzione!


 Scusami, sicuramente io non ho capito cosa devo esattamente fare:
allora alla riga
path= browsefolder(........................
ho sostituito path= forms!collegare!pathnuova   che e' il nome del controllo
che contiene la path dell'mdb e non ho fatto altro.
il risultato e' : "la cartella selezionata non contiene il database miomdb"
dove sbaglio???
A parte cio' , io devo collegare una sola tabella, ma non capisco come farei
nel caso avessi piu' tabelle da collegare a diversi BE a indicargli la path
diversa di questi ultimi.
Sicuramente ti avro' fatto capire che ho in testa una grande confusione,
puoi illuminarmi un minimo.
Grazie ancora


Questo è il codice che (da me) funziona:
Public Function ChangePath()
'Autori: Antonella Romeo & Vincenzo Turturro
'Funzione per effettuare in maniera del tutto automatica
' l'aggiornamento delle tabelle allegate ad un FE, anche quando queste
' sono contenute in più BE, residenti su percorsi differenti (anche LAN)
' e protetti da password.
' L'unica interazione con l'utente consiste nella richiesta della posizione
' di ogni BE contenente le tabelle da allegare
' La funzione segnala le tabelle allegate al FE non trovate nei BE
' selezionati dall'utente
'Parametri in ingresso: nessuno
'Funzioni richiamate: BrowseFolder() (presente sul sito comune)
    Dim intI As Integer, intJ As Integer, dbs As Database, tdf As TableDef,
path As String
    Dim sNomeDB As String, intK As Integer, lRefr As Boolean
    Dim tdfNew As TableDef, dbNew As Database, stPwd As String, aDB(1 To 50,
1 To 3) As String
    For intI = 1 To UBound(aDB)
      aDB(intI, 1) = ""     ' Nome del database
      aDB(intI, 2) = ""     ' Path del database
      aDB(intI, 3) = ""     ' Password del database
    Next intI
    ' Gestisce il collegamento delle tabelle
    Set dbs = CurrentDb()
    With dbs
      ' Recupera percorso corrente e pwd di ogni mdb contenente le tabelle
collegate
      For Each tdf In .TableDefs
        If tdf.Connect > "" Then
           sNomeDB = ""
           ' Ricava il nome del database contenente la tabella
           For intJ = 1 To Len(tdf.Connect)
             If InStr(1, Right$(tdf.Connect, intJ), "\") > 0 Then
                sNomeDB = Mid$(tdf.Connect, Len(tdf.Connect) - intJ + 2)
                If InStr(1, sNomeDB, ";") > 0 Then
                  sNomeDB = Left$(sNomeDB, InStr(1, sNomeDB, ";") - 1)
                End If
                Exit For
             End If
           Next intJ
           For intI = 1 To UBound(aDB)
             If aDB(intI, 1) = sNomeDB Then
                ' Database già memorizzato nella matrice
                Exit For
             Else
                ' Database non memorizzato nella matrice
                If aDB(intI, 1) = "" Then
                   aDB(intI, 1) = sNomeDB
                   path = Left$(tdf.Connect, InStr(1, tdf.Connect, "\" &
sNomeDB) - 1)
                   If InStr(1, path, ":\") > 0 Then
                      ' Percorso su unità logica
                      path = Mid$(path, InStr(1, path, ":\") - 1)
                   Else
                      ' Percorso UNC
                      If InStr(1, path, "\\") > 0 Then
                         path = Mid$(path, InStr(1, path, "\\"))
                      End If
                   End If
                   aDB(intI, 2) = path
                   stPwd = ""
                   If InStr(1, tdf.Connect, ";PWD=") > 0 Then
                      stPwd = Mid$(tdf.Connect, InStr(1, tdf.Connect,
";PWD="))
                      stPwd = Left$(stPwd, IIf(InStr(2, stPwd, ";") > 0,
InStr(2, stPwd, ";") - 1, Len(stPwd)))
                   End If
                   aDB(intI, 3) = stPwd
                   Exit For
                End If
             End If
           Next intI
        End If
      Next tdf
    End With
    For intI = 1 To UBound(aDB)
      If aDB(intI, 1) > "" Then
        path = Percorso()             '<----------------------- Qui ci si
mette il percorso del file BE
         If Nz(path, "") > "" Then
            If Dir(path & "\" & aDB(intI, 1)) > "" Then
               path = Trim$(path)
               If Right$(path, 1) = "\" Then
                  path = Left$(path, Len(path) - 1)
               End If
               aDB(intI, 2) = path
            Else
               MsgBox "La cartella selezionata non contiene il database " &
aDB(intI, 1), vbCritical
            End If
         End If
      Else
         Exit For
      End If
    Next intI
    ' Aggiorna i collegamenti
    DoCmd.Hourglass True
    With dbs
      ' Scorre l'insieme TableDefs
      For Each tdf In .TableDefs
        lRefr = False
        sNomeDB = ""
        If tdf.Connect > "" Then
           ' Ricava il nome del database contenente la tabella
           For intJ = 1 To Len(tdf.Connect)
             If InStr(1, Right$(tdf.Connect, intJ), "\") > 0 Then
                sNomeDB = Mid$(tdf.Connect, Len(tdf.Connect) - intJ + 2)
                If InStr(1, sNomeDB, ";") > 0 Then
                   sNomeDB = Left$(sNomeDB, InStr(1, sNomeDB, ";") - 1)
                End If
                Exit For
             End If
           Next intJ
           For intK = 1 To UBound(aDB)
             If Trim$(aDB(intK, 1)) = Trim$(sNomeDB) Then
                ' ... cerca la tabella nel nuovo database
                Set dbNew = OpenDatabase(aDB(intK, 2) & "\" & aDB(intK, 1),
False, False, aDB(intK, 3))
                With dbNew
                  For Each tdfNew In .TableDefs
                    If tdfNew.Name = tdf.Name Then
                       ' ... modifica il percorso del database contenente la
tabella
                        tdf.Connect = Left$(tdf.Connect, IIf(InStr(1,
tdf.Connect, ":") > 0, _
                           InStr(1, tdf.Connect, ":") - 2, InStr(1,
tdf.Connect, "\\") - 1)) & _
                           Trim$(aDB(intK, 2)) & "\" & aDB(intK, 1) & _
                           Mid$(tdf.Connect, InStr(1, tdf.Connect, sNomeDB)
+ Len(Trim$(sNomeDB)))
                       tdf.RefreshLink
                       lRefr = True
                       Exit For
                    End If
                  Next tdfNew
                End With
                dbNew.Close
                Set dbNew = Nothing
                Exit For
             End If
           Next intK
           If Not lRefr Then
              MsgBox "Tabella " & tdf.Name & " non trovata nel database"
           End If
        End If
      Next tdf
    End With
    DoCmd.Hourglass False
End Function
La funzione "Percorso()" restituisce un valore stringa con il path del
database da collegare, tu la devi sostituire con il tuo controllo (accertati
che contenga un valore valido seguendo la funzione in debug);
Attenzione! Sotto la riga "MsgBox "La cartella selezionata non contiene il
database..." troverai una riga tipo "IntI = IntI - 1"...
io ho cancellato questa riga perchè, se non trovava il DB, entrava in loop!



E' succeso anche a me. Comunque riprovo e ti ringrazio. Spero di riuscirci.


Se vuoi dare un'occhiata alla mia soluzione forse ti puņ essere di aiuto.
Ciao con simpatia
Marco.