Come separare i dati dagli altri oggetti (query/maschere/reports/code)

di il
14 risposte

Come separare i dati dagli altri oggetti (query/maschere/reports/code)

Buongiorno,

come autodidatta di access sono arrivato ad una situazione tale che ogni volta che faccio qualche modifica spesso si rende necessario ritornare alla versione precedente a causa di qualche problema che fa andare in crash il data base che si chiude all'improvviso creando una copia di back-up.

L'unica soluzione che trovo è quella di riprendere una copia precedente del data base e trasferire i dati inseriti nell'ultima settimana nella copia precedente del data base.

Con ovvio spreco di tempo..

Un modo ottimale sarebbe quello di separare i dati (tabelle) dagli altri oggetti (query/maschere/reports/moduli). In due file access diversi. Legati in qualche modo.

C'è qualche informazione in rete da cui io possa partire per capire come fare?

Grazie, in anticipo

Francesco

14 Risposte

  • Re: Come separare i dati dagli altri oggetti (query/maschere/reports/code)

    La separazione FE-BE la fa Access in modo nativo seguendo il Wizard.

    Poi ci sono una serie di considerazioni tecniche da approfondire.

    Nel web trovi il mondo su questo argomento.

  • Re: Come separare i dati dagli altri oggetti (query/maschere/reports/code)

    @ Alex

    intendi dire che è disponibile un Wizard su Access 2016 che guida l'utente alla separazione tabelle / altri oggetti?

    Io non l'ho trovato.. 

    Scusa altra domanda FE-BE sta per ?

    Grazie per i suggerimenti

    Francesco

  • Re: Come separare i dati dagli altri oggetti (query/maschere/reports/code)

    21/03/2025 - fcaliandro ha scritto:

    Io non l'ho trovato.. 

    Scusa altra domanda FE-BE sta per ?

    Ciao, 

    cerca sempre la documentazione nel supporto microsoft, tovi tutto quello che ti occorre per studiare e approfondire tutti gli argomenti.

    https://support.microsoft.com/it-it/topic/dividere-un-database-di-access-3015ad18-a3a1-4e9c-a7f3-51b1d73498cc

    Buona lettura... ;-)

    [Edit:]
    anche questo è semplice e carino da prendere in visione:
    https://support.microsoft.com/it-it/topic/attivit%C3%A0-di-base-per-un-database-desktop-di-access-5ddb8595-497c-4366-8327-ae79d2abdc9c?utm_source=chatgpt.com

    Poi alla fine di questa documentazione trovi diversi link per approfondire altri temi...   Insomma, trovi proprio tutto.

  • Re: Come separare i dati dagli altri oggetti (query/maschere/reports/code)

    FE sta per Front End, e' l'interfaccia utente quindi maschere, reports, query, ecc.

    BE e' il Back End, cioe' un secondo database che contiene SOLO le tabelle.

    Di fatto lavori sul FE che avra' i link alle tabelle che si trovano fisicamente nel BE.

    Se ti va in crash il FE non hai problemi perche' i dati sono salvati nell'altro DB. Per cui puoi fare N copie del FE da modificare come meglio credi.

    Come gia' ti hanno scritto, sulla divisione del DB trovi "il mondo" anche in questo sito: tra i vari spunti, una cosa molto importante da imparare e' come cancellare il collegamento alle tabelle linkate nel FE quando chiudi il programma e ripristinare il collegamento quando lo riavvii...

  • Re: Come separare i dati dagli altri oggetti (query/maschere/reports/code)

    21/03/2025 - Mailman ha scritto:

    FE sta per Front End, e' l'interfaccia utente quindi maschere, reports, query, ecc.

    BE e' il Back End, cioe' un secondo database che contiene SOLO le tabelle.

    Di fatto lavori sul FE che avra' i link alle tabelle che si trovano fisicamente nel BE.

    Se ti va in crash il FE non hai problemi perche' i dati sono salvati nell'altro DB. Per cui puoi fare N copie del FE da modificare come meglio credi.

    Come gia' ti hanno scritto, sulla divisione del DB trovi "il mondo" anche in questo sito: tra i vari spunti, una cosa molto importante da imparare e' come cancellare il collegamento alle tabelle linkate nel FE quando chiudi il programma e ripristinare il collegamento quando lo riavvii...

    In che senso 'cancellare' il collegamento e poi 'ripristinare' ?

    Quale sarebbe l'obiettivo di fare, ogni volta, un'operazione di questo tipo?

    Ed il tempo di ricollegamento dove lo mettiamo (sul mio pc per circa 600 tabelle ci mette 30 secondi) ?

    Se ogni volta che avvi il programma devi attendere decine di secondi prima di poterlo usare, speranze che ti paghino ce ne sono poche a mio avviso

  • Re: Come separare i dati dagli altri oggetti (query/maschere/reports/code)

    22/03/2025 - amorosik ha scritto:

    In che senso 'cancellare' il collegamento e poi 'ripristinare' ?

    Quale sarebbe l'obiettivo di fare, ogni volta, un'operazione di questo tipo?

    Se lo usi solo tu a casa tua nessuno, ma spesso capita che si sviluppi per applicazioni ad uso aziendale... ci sono Pwd autenticazione, privacy ecc

    Se lasci il BE linkato da vba si possono, vedere i dati nelle tabelle e fare danni, anche senza vba... basta lineare da Nuovo FE le tabelle alle tue Liked sul BE... bypassare i livelli di autenticazione al server e via.

    Ed il tempo di ricollegamento dove lo mettiamo (sul mio pc per circa 600 tabelle ci mette 30 secondi) ?

    Sicuramente serve qualche secondo... dipende da che tecnica usi... se usi transferdatabase ovvio.

    Se ogni volta che avvi il programma devi attendere decine di secondi prima di poterlo usare, speranze che ti paghino ce ne sono poche a mio avviso

    Serve prima di tutto capire a cosa si lavora, è assurdo che con 2 righe di codice da Excel o Access ci si possa collegare al tuo client fregandosene dell'autenticazione perché resta salvata e mandare in malora tutto... direi che è un punto di riflessione che sarebbe bene tu facessi.

  • Re: Come separare i dati dagli altri oggetti (query/maschere/reports/code)

    Oltre a quanto scritto da Alex aggiungo che se si effettuano modifiche al BE e poi non ci si ricorda di rinfrescare dal FE il il link al BE spesso si incappa in errori incomprensibili che poi miracolosamente svaniscono dopo il relink ... 

  • Re: Come separare i dati dagli altri oggetti (query/maschere/reports/code)

    23/03/2025 - max.riservo ha scritto:

    Oltre a quanto scritto da Alex aggiungo che se si effettuano modifiche al BE e poi non ci si ricorda di rinfrescare dal FE il il link al BE spesso si incappa in errori incomprensibili che poi miracolosamente svaniscono dopo il relink ... 

    In questo caso e' obbligatorio rinfrescare i collegamenti, ovviamente

    Ma non e' che si sfruguglia sulla struttura db every day

    E' una operazione poco frequente, che non giustifica il ricollegamento ad ogni avvio

  • Re: Come separare i dati dagli altri oggetti (query/maschere/reports/code)

    23/03/2025 - @Alex ha scritto:

    22/03/2025 - amorosik ha scritto:

    In che senso 'cancellare' il collegamento e poi 'ripristinare' ?

    Quale sarebbe l'obiettivo di fare, ogni volta, un'operazione di questo tipo?

    Se lo usi solo tu a casa tua nessuno, ma spesso capita che si sviluppi per applicazioni ad uso aziendale... ci sono Pwd autenticazione, privacy ecc

    Se lasci il BE linkato da vba si possono, vedere i dati nelle tabelle e fare danni, anche senza vba... basta lineare da Nuovo FE le tabelle alle tue Liked sul BE... bypassare i livelli di autenticazione al server e via.

    Ed il tempo di ricollegamento dove lo mettiamo (sul mio pc per circa 600 tabelle ci mette 30 secondi) ?

    Sicuramente serve qualche secondo... dipende da che tecnica usi... se usi transferdatabase ovvio.

    Se ogni volta che avvi il programma devi attendere decine di secondi prima di poterlo usare, speranze che ti paghino ce ne sono poche a mio avviso

    Serve prima di tutto capire a cosa si lavora, è assurdo che con 2 righe di codice da Excel o Access ci si possa collegare al tuo client fregandosene dell'autenticazione perché resta salvata e mandare in malora tutto... direi che è un punto di riflessione che sarebbe bene tu facessi.

    Non mi pare 'qualche secondo' 

    A parer tuo sono accettabili 30 secondi di attesa quando avvii un programma? 

    Per me non sono accettabili, e se mi trovi un sistema che permetta di ricollegare 600 tabelle in 5 secondi allora vengo anch'io dalla parte dei 'ricollegatori'

    In che senso "..se usi transferdatabase.."? Per linkare una tabella uso il classico 

    db.TableDefs.Delete NomeTabella
    Set tdf = db.CreateTableDef(NomeTabella, dbAttachSavePWD)
    tdf.Connect = "ODBC;" & NomeDSN & ";UID=" & NomeUtente & ";PWD=" & Password
    tdf.SourceTableName = NomeTabella
    db.TableDefs.Append tdf

    Non capisco cosa intendi con "..ci si possa collegare al tuo client..", forse intendi da esterno via funzionalita' com ?

  • Re: Come separare i dati dagli altri oggetti (query/maschere/reports/code)

    Se provi solo a cancellare/riscrivere la proprietà Connect... che succede...?

  • Re: Come separare i dati dagli altri oggetti (query/maschere/reports/code)

    23/03/2025 - @Alex ha scritto:

    Se provi solo a cancellare/riscrivere la proprietà Connect... che succede...?

    Succede che sul tentativo di Append mi spara fuori un bel 

    3274 = Nessun campo definito. Impossibile accodare TableDef o Index.

    Comprensibile, se non gli dai il dsn non sa dove andare a leggere le informazioni sulla tabella indicata

  • Re: Come separare i dati dagli altri oggetti (query/maschere/reports/code)

    24/03/2025 - amorosik ha scritto:

    23/03/2025 - @Alex ha scritto:

    Se provi solo a cancellare/riscrivere la proprietà Connect... che succede...?

    Succede che sul tentativo di Append mi spara fuori un bel 

    3274 = Nessun campo definito. Impossibile accodare TableDef o Index.

    Comprensibile, se non gli dai il dsn non sa dove andare a leggere le informazioni sulla tabella indicata

    Allora non hai capito proprio il suggerimento.

    Se non cancelli le Tabelle ma cancelli solo la connect perchè mai dovresti fare Append...?

  • Re: Come separare i dati dagli altri oggetti (query/maschere/reports/code)

    24/03/2025 - @Alex ha scritto:

    24/03/2025 - amorosik ha scritto:

    23/03/2025 - @Alex ha scritto:

    Se provi solo a cancellare/riscrivere la proprietà Connect... che succede...?

    Succede che sul tentativo di Append mi spara fuori un bel 

    3274 = Nessun campo definito. Impossibile accodare TableDef o Index.

    Comprensibile, se non gli dai il dsn non sa dove andare a leggere le informazioni sulla tabella indicata

    Allora non hai capito proprio il suggerimento.

    Se non cancelli le Tabelle ma cancelli solo la connect perchè mai dovresti fare Append...?

    Si, e' probabile che non abbia capito quello che vuoi dire, cosa volevi dire esattamente?

    Se vedi l'esempio di codice sopra, la prima riga e' un  TableDefs.Delete,  perche' dici "..se non cancelli le tabelle.."?

  • Re: Come separare i dati dagli altri oggetti (query/maschere/reports/code)

    24/03/2025 - amorosik ha scritto:

    Si, e' probabile che non abbia capito quello che vuoi dire, cosa volevi dire esattamente?

    Se vedi l'esempio di codice sopra, la prima riga e' un  TableDefs.Delete,  perche' dici "..se non cancelli le tabelle.."?

    Il suggerimento sarebbe stato questo:

    Dim tdf As DAO.TableDef
    ' Sulle Tabelle senza DELETE/APPEND
    Set tdf = DBEngine(0)(0).TableDefs("TuaTabella")
    tdf.Connect = vbNullString
    tdf.RefreshLink
    
    ' All'apertura il contrario
    Set tdf = DBEngine(0)(0).TableDefs("TuaTabella")
    tdf.Connect = "Tua Connection String"
    tdf.RefreshLink

    Detto questo, ho fatto una prova e pare che la Connect property sia cancellabile ma senza effetto, quindi si cancella se la metti a vbNullstring e se la rileggi non è valorizzata, ma aprendo la Linked pare continui a funzionare, e questo è probabilmente il motivo per il quale anche nel caso di SWITCH del BE, sono stati evidenziati vari malfunzionamenti, ed è sempre consigliato di fare il DELETE(alla chiusura), il CREATE e APPEND.

    Quindi quello che ti avevo suggerito sopra non serve a nulla, ora io in realtà non l'ho mai usato, per il semplice fatto che non ho mai notato rallentamenti così pesanti, è anche vero che non ho mai avuto la necessità di collegare 600 Tabelle, nel mio caso massimo un centinaio o giù di li.

    Io tuttavia mi muovevo in questo modo che potrebbe realmente avere un impatto importante e fossi in te se non lo hai già testato lo proverei:

    1) Su AutoExec Aprivo un RS Fittizio ad una Tabella di servizio creata appositamente, basta una cosa simile "SELECT * FROM DummyTable WHERE 1=0", va bene anche una Maschera in modalità Hidden, da mantenere APERTO per tutta la sessione del Client, io usavo questa soluzione della Maschera per poi inibire la chiusura con ALT+F4 gestendo l'evento UNLOAD...

    2) Aperto il RS, inizi ad effettuare il Ciclo di CreateTabledefs ed Append, probabilmente la differenza di performance è giustificata dal fatto che avendo una Connessione già instaurata nel Pool delle connessioni, non deve Aprirla ogni volta che accedi a CreateTabledef/Append.

    Prova questo metodo, sono curioso di capire questo problema.

    Questo accorgimento lo usavo sempre e rende più veloce anche l'apertura delle maschere con tanti dati...

Devi accedere o registrarti per scrivere nel forum
14 risposte