Collegare via codice tabelle di un DB diviso in Be e Fe e messo in rete.

Anonimo
2015-11-20T08:42:13+00:00

Buongiorno a tutti, in occasione di una necessità lavorativa, di installare il database su più computer ho optato di collegare le tabelle via codice.

Ho utilizzato il codice sottostante dell'amico Giorgio Rancati e non mi collega a nessuna tabella.

Premessa:

  1. Innanzitutto vi chiedo, il codice sottostante  ( una volta andatao a buon fine) deve far visualizzare nel Fe le tabelle collegate come da ) immagine allegata oppure no?

  1. se cambio qualche dato per quanto riguarda il percorso del Be nel file Parametri.ini mi compare l'errore Parametri.ini non configurato correttamente diversamente ( quindi il percorso è giusto), appena lanciato il codice da pulsante di comando su maschera del Fe non accade nulla.
  2. con non accade nulla intendo che appena apro le rispettive maschere collegate mi vanno in errore segnalando l'assenza delle tabelle dalle quali dipendono.

In attesa di un vostro consiglio per poter capire i motivi per cui non vengono collegate le Tabelle al Fe, vi ringrazio anticipatamente per l'aiuto che vorrete darmi.

Ciao Nicola.

Option Compare Database

Option Explicit

Private Declare Function OSGetPrivateProfileString Lib "kernel32" _

                         Alias "GetPrivateProfileStringA" _

                         (ByVal lpApplicationName As String, _

                          ByVal lpKeyName As Any, _

                          ByVal lpDefault As String, _

                          ByVal lpReturnedString As String, _

                          ByVal nSize As Long, _

                          ByVal lpFileName As String) As Long

Sub RelinkTabelle()

    Dim db As DAO.Database

    Dim NomeBE As String

    Dim Password

    Dim NomeFileIni As String

    Dim Buffer As String

    Dim LenResult As Long

    Dim td As DAO.TableDef

    Set db = CurrentDb

    NomeFileIni = CurrentProject.Path & "\Parametri.ini"

    Buffer = String$(2048, 32)

    'Leggo il Percorso del database BE dal file INI

    LenResult = OSGetPrivateProfileString("Path", "NomeBE", "", Buffer, Len(Buffer), NomeFileIni)

    If LenResult <> 0 Then

        NomeBE = Left(Buffer, LenResult)

    Else

       MsgBox "File " & CurrentProject.Path & "\Parametri.ini non configurato correttamente !!", vbCritical

       Exit Sub

    End If

    'Password

    Password = "12345"

    On Error GoTo RelinkTabelle_Err

    'Scorro le tabelle

    For Each td In db.TableDefs

        'Se è una tabella allegata, la riallego al BE

        If (td.Attributes And dbAttachedTable) = dbAttachedTable Then

           td.Connect = "MS Access;PWD=" & Password & ";DATABASE=" & NomeBE

           td.RefreshLink

        End If

    Next

RelinkTabelle_Exit:

    Set td = Nothing

    Set db = Nothing

    Exit Sub

RelinkTabelle_Err:

    MsgBox Err.Description, vbExclamation

    Resume RelinkTabelle_Exit

End Sub


Il file Parametri.ini conterrà:


[Path]

NomeBe = C:\Documents and Settings\Giorgio\Documenti\DatabaseBe.accdb


questo potrebbe essere un metodo facile e di semplice personalizzazione, infatti basta aprire con notepad il file Parametri.ini per modificare il percorso del Be.

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2015-11-24T09:22:57+00:00

ciao Nicola,

il post delle 20.51.07 del 19.10 non mostra la funzione che stai utilizzando.

Devi usare quella che ti riporto per tuo riferimento più sotto inserita nel post sopra indicato.

Come ti dicevo nel post precedente e mi sembrava dalla tua rispota fosse chiaro la funzione sotto riportata linka le tabelle del BE se non collegate e le RElinka se collegate.

Il codice di Giorgio effettua solo il RElink, questo siginfica che per valutarne il funzionamento le tabelle DEVONO essere già collegate, ma anche in quel caso non vedi nulla di diverso a meno di non cambiare il BE.

Più di così non riesco a spiegartelo, ma se metti in pratica quanto ti ho spiegato nel post del 20.11 ore 18.58.52 capisci meglio.

Inoltre se debuggi il codice, lo analizzai bene, lo studi con attenzione, come ti ho spiegato, puoi notare le differenze.

Ciao, Sandro.

rendi utilizzabile se il db non è protetto da PWD:

Option Compare Database

Option Explicit

Private Const StrPathDbBE As String = "C:\pathDeltupBe" '<-----personalizza

Public Function connectTables()

On Error GoTo errorHandler

Dim tdf      As DAO.TableDef

Dim tdfLocal As DAO.TableDef

Dim dbsBE    As DAO.Database

Dim dbsCU    As DAO.Database

Dim strconn  As String

strconn = "MS Access;DATABASE=" & StrPathDbBE

Set dbsCU = CurrentDb

' se il BE è protetto setti apri il database impostando la pwd

Set dbsBE = OpenDatabase(StrPathDbBE, False, False, "MS Access;PWD=tuaPWD") ' personalizza la Password

'se il BE non è protetto utilizzi la seguente istruzione:

'Set dbsBE = OpenDatabase(StrPathDbBE, False, False)

For Each tdf In dbsBE.TableDefs

    If Not dbSystemObject Then

        If tdf.Attributes = 0 Then

           On Error Resume Next

           If dbsCU.TableDefs(tdf.Name).Connect = "" Then

              If Err.Number = 3265 Then

                    Set tdfLocal = dbsCU.CreateTableDef(tdf.Name)

                    tdfLocal.Connect = strconn

                    tdfLocal.SourceTableName = tdf.Name

                    dbsCU.TableDefs.Append tdfLocal

               End If

           Else

               dbsCU.TableDefs(tdf.Name).Connect = strconn

               dbsCU.TableDefs(tdf.Name).RefreshLink

           End If

           On Error GoTo 0

        End If

    End If

Next

Application.RefreshDatabaseWindow

ext_errorLoadAccountHandler:

If Not dbsBE Is Nothing Then dbsBE.Close: Set dbsBE = Nothing

Set dbsCU = Nothing

Set tdf = Nothing

Set tdfLocal = Nothing

Exit Function

errorHandler:

    With Err

       MsgBox "ERR#" & .Number _

            & vbNewLine & .Description _

            , vbOKOnly Or vbCritical

     End With

     Resume ext_errorLoadAccountHandler

End Function

La risposta è stata utile?

0 commenti Nessun commento

13 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2015-11-20T13:17:03+00:00

    Ciao Sandro sto provando ad utilizzare il codice del post da te consigliato ma dopo aver inserito il percorso del mio Be che è questo : Private Const StrPathDbBE As String = "C:\Nuova cartella\GESTIONE RITENUTE_be.accdb"

     ed aver creato una macro Autoexec come da immagine allegata

    quando  la eseguo ottengo un messaggio di errore come questo

    Eppure nel inserire la funzione mi sono attenuto a quanto tu hai suggerito all'amico Giuseppe in questo modo:

    nella macro autoexec in esegui codice devi richiamare la funzione connectTables o così :

    connectTables()

    oppure

    =connectTables()

    le parentesi ci devono essere!!!

    Perché mi dice che è impossibile  trovare il nome della funzione?

    Ti saluto.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-11-20T09:19:17+00:00

    Ciao Sandro, che piacere rileggerti.

    Per ora, per favore spiegami questo: qualsiasi codice ( in questo caso quello di Giorgio, quello che tu mi proponi o altri di uguale  argomento) devono far vedere le tabelle collegate come da immagine da me inviata?

    Desidero imparare e  proprio perché  è cosa certa: **provo la routine di Giorgio per certo funziona :-)...**non riesco a capire perché nel mio utilizzo,  non segnalandomi  nessun messaggio di errore, il codice di Giorgio non viene eseguito (oppure viene eseguito ma senza risultato , perdonatemi se oso dire stronz........te, ho enorme timore di sminuire, di denigrare la vostra professionalità e competenza, per quello che dico).

    Ciao Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-11-20T09:00:46+00:00

    ciao Nicola,

    titolo modificato, in giornata almeno io, prima non riesco.... provo la routine di Giorgio per certo funziona :-)...per intanto prova se vuoi questa soluzione se necessiti urgentemente di testare il relink :

    http://answers.microsoft.com/it-it/office/forum/office\_2013\_release-access/problema-aggiornamento-campo-che-utilizza-dsum/5505d9c3-0d6e-4f30-842c-ca31659ecc91?page=2

    connectTables del post del 19.10 pag.2 post delle 20.51.07.

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2015-11-20T08:45:25+00:00

    Scusatemi , per favore potete correggere questo nel titolo: messo al posto di emsso.

    Grazie e buona giornata.

    La risposta è stata utile?

    0 commenti Nessun commento