Percorso tabelle collegate selezionato in automatico da modulo

di il
4 risposte

Percorso tabelle collegate selezionato in automatico da modulo

Ciao,

  • ho un database diviso in dati e form
  • sono entrambi nella stessa cartella e li uso in una rete aziendale
  • il percorso è assoluto rispetto al percorso di rete
  • Il database form è in formato accde

Ho necessità di usare questo database temporaneamente in un pc NON collegato alla rete e che NON ha Microsoft Acces installato ma solo la runtime 2019

Ho chiesto aiuto all'intelligenza artificiale e mi ha proposto questo codice

Option Compare Database
Option Explicit

Public Sub RelinkBackendTables()
    Dim db As DAO.Database
    Dim tdf As DAO.TableDef
    Dim strCurrentFEPath As String
    Dim strBackendDBName As String
    Dim strExpectedBackendPath As String
    Dim strOldConnect As String
    Dim strNewConnect As String
    Dim blnRelinkNeeded As Boolean
    Dim intRelinkedTables As Integer

    Set db = CurrentDb
    strCurrentFEPath = CurrentProject.Path
    strBackendDBName = "un.milione.dati.accdb"
    strExpectedBackendPath = strCurrentFEPath & "\" & strBackendDBName
    blnRelinkNeeded = False
    intRelinkedTables = 0

    On Error GoTo ErrorHandler

    ' Verifica se il file del backend esiste nel percorso atteso
    If Dir(strExpectedBackendPath) = "" Then
        MsgBox "Il database backend ('" & strBackendDBName & "') non è stato trovato nella stessa cartella del frontend." & _
               vbCrLf & "Assicurati che entrambi i file siano nella stessa directory.", vbCritical, "Errore Backend non trovato"
        GoTo Exit_Sub
    End If

    ' Controlla se è necessario ricollegare le tabelle
    For Each tdf In db.TableDefs
        If tdf.Attributes And 16 Then ' Controlla se è una tabella collegata (dbLink = 16)
            strOldConnect = tdf.Connect
            ' Verifica se il percorso della tabella collegata è già corretto
            If InStr(1, strOldConnect, strExpectedBackendPath, vbTextCompare) = 0 Then
                blnRelinkNeeded = True
                Exit For ' Trovata almeno una tabella con percorso errato, ricollegheremo tutte
            End If
        End If
    Next tdf

    If blnRelinkNeeded Then
        ' Ricollega tutte le tabelle al nuovo percorso
        For Each tdf In db.TableDefs
            If tdf.Attributes And 16 Then
                strNewConnect = ";DATABASE=" & strExpectedBackendPath
                tdf.Connect = strNewConnect
                tdf.RefreshLink
                intRelinkedTables = intRelinkedTables + 1
                ' Debug.Print "Ricollegata tabella: " & tdf.Name & " a " & strExpectedBackendPath
            End If
        Next tdf
        MsgBox "Tabelle ricollegate con successo. " & intRelinkedTables & " tabelle aggiornate.", vbInformation, "Ricollegamento Completato"
    Else
        MsgBox "Le tabelle sono già correttamente collegate al database backend.", vbInformation, "Nessun Ricollegamento Necessario"
    End If

Exit_Sub:
    Set tdf = Nothing
    Set db = Nothing
    Exit Sub

ErrorHandler:
    MsgBox "Si è verificato un errore durante il ricollegamento delle tabelle: " & Err.Description & _
           vbCrLf & "(Tabella: " & tdf.Name & ")", vbCritical, "Errore di Ricollegamento"
    Resume Exit_Sub
End Sub

Come istruzioni finali dato che ho una maschera che si avvia all'apertura del database mi dice di applicare un'azione "Su caricamento"

tutto fatto come da istruzioni ma non funziona.

Ottengo il messaggio "Le tabelle sono già correttamente collegate al database backend" ma così non è.

Provando ad aprire una maschera va in errore di runtime 2467 

Suggerimenti su cosa devo fare?

Grazie

Luca

4 Risposte

  • Re: Percorso tabelle collegate selezionato in automatico da modulo

    Oltre a chiedere alla "inefficenza" artificiale, hai debuggato il codice? Che errori ti da? Gia' un file che si chiama "un.milione.dati.accdb": con tutti quei punti non mi stupirebbe se Ti desse errore...

    Poi secondo me stai operando in modo sbagliato:  invece di verificare se le tabelle sono gia' collegate, dovresti eliminare i collegamenti alla chiusura del Front End e ripristinarli alla riapertura.

  • Re: Percorso tabelle collegate selezionato in automatico da modulo

    Ciao, grazie per la risposta

    Si, ho debuggato il codice e non da errori

    Proverò a modificare il nome file, grazie del suggerimento

    Come faccio l'eliminazione dei collegamenti ?

  • Re: Percorso tabelle collegate selezionato in automatico da modulo

    Per cancellare le tabelle linkate io ho seguito questo metodo: ho creato una form vuota che si apre in modalita' nascosta all'avvio del front end, con una macro autoexec. 

    Su evento unload di questa form ho il seguente codice:

    Private Sub Form_Unload(Cancel As Integer)
    On Error GoTo Err_handler
    
    Dim dbs As DAO.Database
    Dim tdf As DAO.TableDef
    Dim i As Long
    Dim n As Long
    Dim arr() As String
        ' Creazione lista delle tabelle linkate e loro cancellazione
        Set dbs = CurrentDb
        For i = dbs.TableDefs.Count - 1 To 0 Step -1
            Set tdf = dbs.TableDefs(i)
            ' Verifica se e' una tabella linkata
            If tdf.Connect <> "" Then
                ' Aggiunge info all'array
                n = n + 1
                ReDim Preserve arr(1 To 3, 1 To n)
                ' Path of the source database
                arr(1, n) = Mid(tdf.Connect, InStr(tdf.Connect, "=") + 1)
                ' Name of the source table
                arr(2, n) = tdf.SourceTableName
                ' Name of the linked table
                arr(3, n) = tdf.Name
                ' Delete the linked table
                dbs.TableDefs.Delete tdf.Name
            End If
        Next i
    
    dbs.Close
    Set dbs = Nothing
    Set tdf = Nothing
    
    Exit_Err_handler:
        Exit Sub
    
    Err_handler:
        MsgBox Err.Number & " " & Err.Description
        Resume Exit_Err_handler
    
    End Sub

    In questo modo quando chiudo il front end vengono cancellate tutte le tabelle linkate.

  • Re: Percorso tabelle collegate selezionato in automatico da modulo

    Ciao, grazie per il tuo contributo, lo apprezzo

    Devo però ammettere che sei un po troppo avanti per le mie competenze

    Domani con calma faccio tutti i test e poi ti aggiorno, grazie davvero

Devi accedere o registrarti per scrivere nel forum
4 risposte