Applicativo Access-MySql partito

di il
44 risposte

Applicativo Access-MySql partito

Forse qualcuno si ricorda delle mie domande riguardo un grosso applicativo in Access che ho riscritto interfacciandolo con MySql. Se può interessare, il primo cliente è partito in effettivo, questa è la seconda settimana e tutto sta andando bene. Stanno lavorando in una quindicina di persone con velocità ottime. Le soluzioni non ortodosse che ho trasportato (migliorandole notevolmente) dal vecchio applicativo Access-Access si stanno dimostrando corrette. Mi riferisco soprattutto alla tecnica di legare le form a tabelle locali Access, delegando a recordset ADO il compito di caricare e scaricare i record. Ringrazio chi mi ha dato pareri e consigli.

44 Risposte

  • Re: Applicativo Access-MySql partito

    Ciao, ... bene così!!!

    Monitora man mano con una base dati più corposa. Analizza se esistono margini di miglioramento per le perfomance generale del progetto.

    Scrivi con cura in modo dettagliato l'analisi iniziale del progetto e tutte le successive modifiche ed integrazioni che si renderanno necessarie.

    Bravo!!!

  • Re: Applicativo Access-MySql partito

    04/02/2025 - Catafirro ha scritto:

    Forse qualcuno si ricorda delle mie domande riguardo un grosso applicativo in Access che ho riscritto interfacciandolo con MySql. Se può interessare, il primo cliente è partito in effettivo, questa è la seconda settimana e tutto sta andando bene. Stanno lavorando in una quindicina di persone con velocità ottime. Le soluzioni non ortodosse che ho trasportato (migliorandole notevolmente) dal vecchio applicativo Access-Access si stanno dimostrando corrette. Mi riferisco soprattutto alla tecnica di legare le form a tabelle locali Access, delegando a recordset ADO il compito di caricare e scaricare i record. Ringrazio chi mi ha dato pareri e consigli.

    Qual'e' il motivo, esattamente, che ti spinge ad usare un sistema di questo tipo, che mi sembra aver capito che ogni client ha le proprie tabelle locali, che vengono valorizzate leggendo i dati dal db server principale, poi elaborate dal client nelle modalita' previste, ed infine i dati da tabelle locali vengono riversati sul db centralizzato

    E' sostanzialmente una gestione delle transazioni fatta a mano

    Come mai stai usando questo sistema? 

    Quali sono i vantaggi rispetto a tenere i dati solamente sul db server centrale?

    Potrebbero essere informazioni utili a tutti gli operatori che frequentano il forum 

  • Re: Applicativo Access-MySql partito

    08/02/2025 - amorosik ha scritto:

    Qual'e' il motivo, esattamente, che ti spinge ad usare un sistema di questo tipo, che mi sembra aver capito che ogni client ha le proprie tabelle locali, che vengono valorizzate leggendo i dati dal db server principale, poi elaborate dal client nelle modalita' previste, ed infine i dati da tabelle locali vengono riversati sul db centralizzato

    E' sostanzialmente una gestione delle transazioni fatta a mano

    Come mai stai usando questo sistema? 

    Quali sono i vantaggi rispetto a tenere i dati solamente sul db server centrale?

    Potrebbero essere informazioni utili a tutti gli operatori che frequentano il forum 

    Discussione già fatta, prova ad andare a rileggere il post precedente.

  • Re: Applicativo Access-MySql partito

    L'uso di tabelle locali, immagine delle tabelle remote, associate alle form ha il vantaggio di una maggior flessibilità. Ogni tabella locale può essere ampliata con l'aggiunta di campi di servizio da riempire al momento della lettura da server. Le elaborazioni finali prima del salvataggio su server possono essere fatte in locale (per esempio la rinumerazione dei dettagli) con successivo scaricamento su server, stressando di meno il db remoto.

    Elenco le fasi di una modifica di record.

    1. Viene letto il record da server tramite un recordset ADO di sola lettura con riempimenti della tabella locale. La form è in modalità solo lettura, i campi sono bloccati. Si tratta di operazioni di sola consultazione molto frequenti nel mio caso.

    2. Quando l'utente decide di modificare, clicca sulla funzione EDIT. Viene riletto il record da server e la form diventa modificabile. Vengono memorizzati due campi presenti su ogni tabella, chiave user e datetime dell'ultima modifica.

    3. L'utente fa le sue modifiche sulla tabella locale. In questa fase non c'è alcuna interazione col record remoto.

    4. L'utente decide di salvare le sue modifiche e clicca sulla funzione SAVE. Si ha l'accesso al server con un recordset ADO di lettura scrittura. Prima di dare il via alla transazione (che potrebbe comprendere sia il salvataggio di testata+dettagli sia la modifica di altre tabelle dipendenti, come un saldo su un conto da prima nota), si controlla il valore del campo attuale dell'ultima modifica. Se è cambiato rispetto al momento dell'edit, si avverte che non è possibile consolidare le modiche poiché lo user tal dei tali ha intanto modificato a sua volta. In questo momento si possono eventualmente salvare negli appunti modifiche lunghe, come annotazioni ecc... Viene rinfrescato il record e l'utente ripete le modifiche. Si tratta però di situazioni molto rare che non hanno mai provocato proteste nei miei clienti.

    5. Si dà il via alla transazione scaricando su server i dati locali. Vengono anche aggiornati i due campi user e datetime di modifica.  La form torna in modalità solo lettura.

    Come si vede la fase della transazione con blocco dei record è minimizzata, e non è soggetta ai capricci dell'utente, che non fa danno se lascia la form in edit andando a prendersi un caffé. Deve solo pagare lo scotto, però ripeto molto raro, di essere stato intanto preceduto da qualcun altro che gli ha fatto perdere le sue modifiche. 

    Un altro vantaggio è nel debug. Le tabelle locali sono facilmente consultabili con gli strumenti access. Dimenticavo di dire che le tabelle locali non sono usate direttamente, rimangono sempre vuote. Per ogni form che viene aperta, viene generata al volo un'immagine con nome random e usata quella. Il che consente di gestire anche le form che si aprono in multi istanza.

    Altra cosa, le tabelle remote non sono linkate, l'accesso avviene solo attraverso i recordset ADO, oppure tramite query pass-through per le consultazioni.

    Il sistema può apparire complesso, ma opportune funzioni aiutano a scrivere relativamente poco codice. 

  • Re: Applicativo Access-MySql partito

    Ringrazio per la risposta

    Ho letto e riletto, e ancora non riesco a capire la necessita' delle tabelle locali

    Se leggi da server un solo record, come mai non ti basta avere i dati a video, l'utente li modifica, va a prendersi fanta l'aranciata d'arancia + panino, torna, schiaccia SALVA, ed in quel momento il client puo' sia controllare se e' stato cambiato qualcosa sia, sia inviare la scrittura se lo ritiene necessario

    Se leggi da server un insieme di record, puoi tenerli in un recordset Ado in ram, collegarlo alla tua form continua, scorrere sopra e sotto, a destra e sinistra, modificare la riga che ritieni opportuna, e poi premendo SALVA fare la procedura di prima, controllare se e' stato cambiato qualcosa e se vuoi inviare la scrittura sul db principale

    Spero scuserai ma non riesco ancora a capire effettivamente l'utilita' di tenere dati permanenti sui client, vedo solamente dei contro

    Ma forse e' che ci vedo poco io

  • Re: Applicativo Access-MySql partito

    Bisognerebbe entrare nel dettaglio per verificare vantaggi e svantaggi di associare una form a un recordset ADO piuttosto che a una tabella reale di access. Un tempo ho usato tabelle ADO in memoria, ma ho avuto molti problemi e ho rinunciato. In ogni caso una tabella reale di access secondo me ha il vantaggio che può essere arricchita di campi di servizio, di sola visualizzazione. Francamente non vedo svantaggi, se non quello di dover definire una tabella su access insieme a quella su db remoto. Però ripeto, ho il vantaggio di poter aggiungere dei campi di servizio. In più trovo che nel debug aiuti poter aprire la tabella in essere e controllarne il contenuto. Il che con strutture complesse testata+dettagli non è un vantaggio da poco.

    In sostanza con il mio sistema si asseconda la struttura di access, lavorando su form che risultano collegate a tabelle reali access. Per esempio nel disegno ogni campo della form è associato a un campo reale. Senza una tabella locale si dovrebbe avere un link alla tabella remota per ottenere lo stesso risultato.

  • Re: Applicativo Access-MySql partito

    Aggiungo qualche altro dettaglio utile per capire la struttura del mio applicativo. Innanzitutto non vengono linkate le tabelle remote. Questo perché la loro gestione tramite link è molto lenta. Sono inutilizzabili le query sul frontend comprendenti le tabelle linkate, poiché Access si porterebbe in locale tutti i record prima di applicare filtri e join. Una soluzione potrebbe essere quella di definire la query sul server e linkarsi a quella, ma si tratta di una soluzione rigida, che non consente di intervenire sulla stringa sql in modo semplice. Come ho già scritto, io gestisco le interrogazioni al server tramite query pass-through, che hanno il vantaggio di poter essere definite al volo, con una stringa sql modificabile a piacimento. Quando devo applicare un filtro dinamico su scelta utente, genero una stringa sql conseguente e la applico a una query pass-throught, oppure la uso per istanziare un recordset ADO. In entrambi i casi la stringa viene passata al MySql che risolve filtri e join  e restituisce solo i record richiesti, minimizzando il traffico di rete. 

    Per quanto riguarda la parte di scrittura, ho già detto che la risolvo sempre tramite recordset ADO. La scelta è obbligata, non essendo linkate le tabelle remote. Non ho fatto prove in tal senso, ho però il sospetto che usare tabelle linkate tramite recordset DAO sarebbe più lento e meno affidabile. Con il mio sistema le transazioni vengono gestite native da MySql attraverso la connessione (è il connettore ODBC che se ne preoccupa), nel caso di recordset DAO non so bene chi le gestirebbe, in qualche modo sarebbero a carico di Access. Però confesso che non ho approfondito.

    Naturalmente a bordo mi porto sia la libreria ADO che quella DAO, poiché uso recordset di entrambi i tipi. L'accesso alle tabelle locali viene fatto tramite DAO, molto più veloce e flessibile di ADO, in questo caso.

    Infine torno sulla scelta di avere una tabella jet locale per ogni tabella MySql che viene associata a form. Ribadisco il vantaggio della flessibilità, potendo aggiungere campi di servizio. In ogni caso, avendo rinunciato alle tabelle linkate, la scelta è quasi obbligata durante la costruzione della form, che può così contare comunque su una tabella associata. Lo svantaggio naturalmente è quello di dover definire una doppia tabella. Però si riesce facilmente a trasferire la struttura di una tabella MySql a una tabella Access attraverso una query di generazione contenente una semplice query pass-trough del tipo "SELECT * FROM TABELLA LIMIT 0" . Poi è chiaro che successive modifiche di struttura devono essere applicate ad entrambe.

  • Re: Applicativo Access-MySql partito

    I campi di servizio li puoi aggiungere anche al tuo recodset Ado caricato in memoria, non e' quello il punto

    Se mostri a video 10 campi anche la riga del tuo recordset potrebbe averne 100 di campi

    Ma se devi avere una lista, supponiamo di articoli, che tu possa scorrere in avanti e indietro, la classica form continua linkata ad alcuni campi tabella, come fai?

    Se a video la form mostra 30 righe vai a leggere da MySql le prime trenta righe e le carichi sulla tabella locale, e poi quando l'operatore va sulla 31-esima riga carichi le successive 30 righe?

    Attansion, che non sto criticando, vorrei capire, credo l'esperienza altrui possa essere sempre utile

  • Re: Applicativo Access-MySql partito

    Ciao,

    Domanda; quindi tutto questo solo per avere delle prestazioni ottimali?

    Non sarebbe più sano avere prestazioni normali lato server e rete?

    Ti dico questo perchè personalmente non ho mai avuto problemi di tabelle collegate tra il front-end e database nel server.

  • Re: Applicativo Access-MySql partito

    Questa è una form di gestione di una semplice tabella. A destra c'è una subform di selezione del record che interessa, associata alla tabella su server. A sinistra c'è la form associata alla tabella locale, che contiene un unico record alla volta. Spostandosi sulla subform di destra si carica il record  sulla tabella locale. Entrambe sono di sola visualizzazione. Cliccando sul bottone EDIT i campi di sinistra diventano accedibili, poi SAVE consolida le modifiche. Naturalmente sono disponibili anche i bottoni di NEW, DELETE e UNDO. Sono tutti sul RIBBON

  • Re: Applicativo Access-MySql partito

    Questo è il ribbon

  • Re: Applicativo Access-MySql partito

    Questa invece è una form con ricerca complessa. Al posto del datasheet singolo c'è una serie di combobox di ricerca nella subform in basso, ma il funzionamento è lo stesso.

  • Re: Applicativo Access-MySql partito

    11/02/2025 - Catafirro ha scritto:

    Questa è una form di gestione di una semplice tabella. A destra c'è una subform di selezione del record che interessa, associata alla tabella su server. A sinistra c'è la form associata alla tabella locale, che contiene un unico record alla volta. Spostandosi sulla subform di destra si carica il record  sulla tabella locale. Entrambe sono di sola visualizzazione. Cliccando sul bottone EDIT i campi di sinistra diventano accedibili, poi SAVE consolida le modifiche. Naturalmente sono disponibili anche i bottoni di NEW, DELETE e UNDO. Sono tutti sul RIBBON

    No, pian, abbi pazienza ma questo non e' un esempio significativo, ci stai mostrando una form con UN solo record

    E' chiaro che ci mette un microsecondo a venir su dal db server principale

    Facci vedere una lista di record, una qualche form continua che ti consenta di scorrere in su e in giu' qualche decina di record alla volta, che ne so articoli/clienti/documenti  e' la stessa cosa, se stiamo parlando di un grosso gestionale ci sara' sicuramente qualcosa di questo tipo

  • Re: Applicativo Access-MySql partito

    11/02/2025 - Catafirro ha scritto:

    Questa invece è una form con ricerca complessa. Al posto del datasheet singolo c'è una serie di combobox di ricerca nella subform in basso, ma il funzionamento è lo stesso.

    Ok e se lasci le caselle ricerca vuote e premi il binocoletto cosa ti appare? Immagino si riempia no le form in basso

    E come si riempiono?  Se la selezione ha filtrato ed il risultato sono 20K righe che fai?  Copi 20K righe da MySql alle tabelle locali per alimentare le subform?

Devi accedere o registrarti per scrivere nel forum
44 risposte