Percorso del Backend

di il
12 risposte

Percorso del Backend

Ho un database diviso in Frontend e Backend. Per il percorso del Frontend, Access prevede una variabile d'ambiente:

CurrentProject.Path

ma almeno credo che non ne preveda nessuna per il Backend, ho trovato in rete la stringa:

Mid(Currentdb.TableDefs("NameOfOneLinkedTable").Connect, 11)

dove NameOfOneLinkedTable è il nome di una delle tabelle collegate, ma non sembra funzionare tranne che non sbagli qualcosa

12 Risposte

  • Re: Percorso del Backend

    Sinceramente non ho capito la domanda.

  • Re: Percorso del Backend

    17/12/2023 - Azucarea ha scritto:


    ho trovato in rete la stringa:

    Mid(Currentdb.TableDefs("NameOfOneLinkedTable

    Cosa significa? Sai a cosa serve la funzione Mid?

  • Re: Percorso del Backend

    17/12/2023 - Antony73 ha scritto:


    17/12/2023 - Azucarea ha scritto:


    ho trovato in rete la stringa:

    Mid(Currentdb.TableDefs("NameOfOneLinkedTable

    Cosa significa? Sai a cosa serve la funzione Mid?

    Mi sto cimentando adesso con VBA non sono molto bravo, Mid dovrebbe estrarre una parte di una stringa a dal carattere ad una posizione specificata da un numero (in questo caso 11)

  • Re: Percorso del Backend

    17/12/2023 - fratac ha scritto:


    Sinceramente non ho capito la domanda.

    Come faccio ad ottenere il percorso del file frontend di un database, senza doverlo specificare io tutte le volte.

  • Re: Percorso del Backend

    17/12/2023 - Azucarea ha scritto:

    non ne preveda nessuna per il Backend

    Praticamente impossibile vista l'infinità di backend che puoi incontrare, alcuni dei quali (i RDBMS seri) che non hanno un percorso in senso di nomeunità duepunti barra cartella barra cartella eccetera, barra, nomedelfile.estensione.

    Quello che hai trovato sul web altro non fa che prendere la proprietà Connect di una tabella collegata, partendo dall'undicesimo carattere. E' giusto andar lì, è in quella proprietà che si trovano le informazioni riguardanti il backend ma in base appunto al tipo di backend il contenuto è diverso.

    Siccome il collegamento ad una tabella che si trova in un altro file accdb ha questa struttura

    ;DATABASE=LetteraUnità:\Cartella\Sottocartella\SottoSottoCartella\nomefile.accdb

    quella riga di codice ignora i primi 10 caratteri, cioè “;DATABASE=” e prende il resto, quello che è il percorso completo per il collegamento ad un altro file accdb. Deve funzionare altrimenti c'è qualcosa che non è indicato nel thread.

    Leggo solo ora questo

    17/12/2023 - Azucarea ha scritto:

    Come faccio ad ottenere il percorso del file frontend di un database, senza doverlo specificare io tutte le volte.

    Cosa significa “specificare tutte le volte”? Una volta che la tabella è collegata al backend basta, quello è e quello rimane. Non hai bisogno di reperirlo da nessuna parte. A meno che non sei già così “avanti” da distruggere i collegamenti delle tabelle collegate per sicurezza ad ogni chiusura del FE e ricostruirli al riavvio. Ma anche in questo caso non lo devi specificare ogni volta, avrai il codice vba che prende l'informazione che tu hai già scritto da qualche parte, una volta, e che valorizza la proprietà Connect. Se invece sei nella necessità di cambiare il percorso perché ogni postazione in cui si trova il FrontEnd raggiunge il backend in modo diverso… in un modo o nell'altro devi essere tu a “guidare” il programma, altrimenti dovrebbe cercare in tutti i percorsi immaginabili, di tutte le risorse disponibili su LAN magari, un file con quel nome e non è detto che sia quello giusto.

    C'è qualcosa che ci sfugge?

  • Re: Percorso del Backend

    17/12/2023 - Philcattivocarattere ha scritto:


    17/12/2023 - Azucarea ha scritto:

    non ne preveda nessuna per il Backend

    Praticamente impossibile vista l'infinità di backend che puoi incontrare, alcuni dei quali (i RDBMS seri) che non hanno un percorso in senso di nomeunità duepunti barra cartella barra cartella eccetera, barra, nomedelfile.estensione.

    Quello che hai trovato sul web altro non fa che prendere la proprietà Connect di una tabella collegata, partendo dall'undicesimo carattere. E' giusto andar lì, è in quella proprietà che si trovano le informazioni riguardanti il backend ma in base appunto al tipo di backend il contenuto è diverso.

    Siccome il collegamento ad una tabella che si trova in un altro file accdb ha questa struttura

    ;DATABASE=LetteraUnità:\Cartella\Sottocartella\SottoSottoCartella\nomefile.accdb

    quella riga di codice ignora i primi 10 caratteri, cioè “;DATABASE=” e prende il resto, quello che è il percorso completo per il collegamento ad un altro file accdb. Deve funzionare altrimenti c'è qualcosa che non è indicato nel thread.

    Leggo solo ora questo

    17/12/2023 - Azucarea ha scritto:

    Come faccio ad ottenere il percorso del file frontend di un database, senza doverlo specificare io tutte le volte.

    Cosa significa “specificare tutte le volte”? Una volta che la tabella è collegata al backend basta, quello è e quello rimane. Non hai bisogno di reperirlo da nessuna parte. A meno che non sei già così “avanti” da distruggere i collegamenti delle tabelle collegate per sicurezza ad ogni chiusura del FE e ricostruirli al riavvio. Ma anche in questo caso non lo devi specificare ogni volta, avrai il codice vba che prende l'informazione che tu hai già scritto da qualche parte, una volta, e che valorizza la proprietà Connect. Se invece sei nella necessità di cambiare il percorso perché ogni postazione in cui si trova il FrontEnd raggiunge il backend in modo diverso… in un modo o nell'altro devi essere tu a “guidare” il programma, altrimenti dovrebbe cercare in tutti i percorsi immaginabili, di tutte le risorse disponibili su LAN magari, un file con quel nome e non è detto che sia quello giusto.

    C'è qualcosa che ci sfugge?

    Ti stai confondendo le tabelle sono nel Backend ed è un file unico.
    Vi spiego un po' meglio: mi serve aprire un'applicazione che deve stare nella stessa cartella del backend. Se dovessi spostare il backend e questo file, riaggiornando i collegamenti con le tabelle con il nuovo percorso si deve aggiornare anche il collegamento che punta a questo file.

  • Re: Percorso del Backend

    Ho trovato il problema facendo apparire con un MsgBox il percorso, era che in questo c'era anche il nome del file del backend adesso devo solo trovare il modo per eliminare questa parte nella stringa del percorso.
    Avete suggerimenti?

  • Re: Percorso del Backend

    Apri la guida ed inizia studiarti le funzioni di manipolazione delle stringhe, sono alla base.. 

  • Re: Percorso del Backend

    Ok, trovato!

    Lo pubblico perché può servire anche ad altri:

    Mid(Left(CurrentDb.TableDefs("NameOfOneLinkedTable").Connect, InStr(CurrentDb.TableDefs("NameOfOneLinkedTable").Connect, "NameFrontend") - 1), 11)
    
  • Re: Percorso del Backend

    E se fai semplicemente un:

    REPLACE(CurrentDb.TableDefs("NameOfOneLinkedTable").Connect,";DATABASE=",vbNullstring)

    Mi pare più semplice…

  • Re: Percorso del Backend

    17/12/2023 - @Alex ha scritto:


    E se fai semplicemente un:

    REPLACE(CurrentDb.TableDefs("NameOfOneLinkedTable").Connect,";DATABASE=",vbNullstring)

    Mi pare più semplice…

    Sì, funziona bisogna comunque ancora, togliere il nome del file Frontend (NameFrontend)

  • Re: Percorso del Backend

    Non del FrontEnd quello è il Client da cui operi, semmai il BackaEnd… o server…

    Per togliere quello si dovrebbero usare le funzioni per ricavare il Path… ognuno dovrebbe avere una propria libreria di funzioni indispensabili… così da usare funzioni generiche public e non moltiplicare codice inutilmente 

    Public Function GetPathFromFile(pFileName as String) As String
       On Error Goto Err_Handler
       GetPathFromFile=Left$(pFileName, InStrRev(pFileName, "\"))
    Exit_Here:
       Exit Function
    Err_Handler:
        MsgBox err.number & "_" & err.description
        Resume Exit_Here
    End Function
Devi accedere o registrarti per scrivere nel forum
12 risposte