Chiedo scusa per il ritardo con cui rispondo, non ho esperienza con i forum, ero scettico sul fatto che la mia richiesta sarebbe stata presa in considerazione e me ne ero proprio dimenticato, in mezzo ai mille problemi che tutti voi programmatori ben conoscete. Vi descrivo lo scenario in cui si verifica il problema, Si tratta di un'applicazione risalente a 25 anni fa impostata nel classico modo Frontend/Backend con tabelle linkate. E' in uso presso una ventina di clienti, da piccoli a grandi, fino a una quindicina di stazioni. Ci sto lavorando da parecchio tempo per adeguarla ai tempi, convertendo tra l'altro il backend da access a MySql. Sono arrivato si può dire in fondo, entro l'anno dovrebbe partire il primo cliente.
Le form sono essenzialmente di tre tipi: gestione archivi (con le classiche funzioni di inserimento, modifica, cancellazione), interrogazioni (subform di composizione filtro e sheet di presentazione dei risultati), procedure esecutive (tipo generazione fatture, per intendersi). Vi descrivo una gestione di tabella, come da figura.
A destra abbiamo una subform linkata alla tabella reale MySql. Sulla sinistra abbiamo la form principale linkata a una tabella locale access che è l'immagine della stessa tabella MySql. Ad ogni spostamento di record sulla subform a destra corrisponde la lettura del record e il suo inserimento nella tabella locale, che contiene sempre e solo un record (quindi viene eliminato il precedente prima di inserire quello nuovo).
I dati non sono modificabili fino a quando non si schiaccia il bottone EDIT del menù Ribbon. Le modifiche avvengono sulla tabella locale. Quando l'utente ha finito schiaccia SAVE e un codice aggiorna il corrispondente record MySql, mentre la form torna nello stato non modificabile.
I problemi dell'accesso concorrente sono risolti con una scommessa. Al momento di scrivere su server si controlla che qualcuno non abbia modificato dopo il nostro EDIT (tramite un campo DATETIME che ogni record possiede). In questo caso l'utente viene avvertito e perde le sue modifiche, che eventualmente deve ripetere. Per il tipo di applicazione, questi conflitti sono piuttosto rari, e nessuno si è mai lamentato (funziona così anche nella vecchia configurazione solo Access). Il vantaggio è che non è necessario alcun blocco del record mentre l'utente ci sta lavorando.
Su MySql non è impostata nessuna connessione tra tabelle, tipo testata e dettagli, che, per una mia precedente esperienza di interfacciamento con SqlServer è più fonte di guai che di aiuto. La fase di scrittura su server è naturalmente sotto transazione, il che evita disallineamenti. Nel caso della form sottostante, ad esempio, si può notare in basso una subform di dettagli. In fase di scrittura su server a tasto SAVE dentro la transazione si scrivono sia la testata che i dettagli, ma questo è ovvio.
Il problema di cui ho chiesto si manifesta nelle form multiistanza (quella sotto non lo è). Si tratta di form molto più complesse, che è necessario poter aprire in più videate per confronti ecc. Tra l'altro in queste form l'accesso al record da gestire non avviene con lo sheet di destra, come nel caso della tabellina sottostante (i record sono troppi), ma con una serie di combobox. Durante i test ogni tanto, ma anche spesso, queste form si sfasciano, nel senso che non si aprono più, Se si tenta di aprirle tramite un doppio click sul nome rimangono silenti, se si aprono tramite codice VBA danno origine a un errore 2001. Per risolvere il problema o si fa una copia e la si mette al posto dell'originale, oppure si aprono in design (il che è possibile) e da lì si chiede la visualizzazione in formato FORM o SHEET. A quel punto magicamente tornano a posto.
Il problema è difficile da individuare, poiché il deterioramento della form si evidenzia solo a una successiva riapertura. Cercherò di capire quale parte del codice VBA che sta sotto la form mette in crisi il repository di Access, togliendolo un po' alla volta. Il che sarà un lavoraccio, poiché, ripeto, il problema sorge ogni tanto. A questo punto vi chiedo: esiste un analizzatore del repository che sia in grado di trovare quale sia il problema della form che non si apre più?
Edit: avevo messo la picture di una form di esempio che però non si vede. Metto un link al mio drive, spero che si possa
https://drive.google.com/file/d/1GdZHPLI52TBx01dMX8v6TkxDZZ6PnIrv/view?usp=sharing
Nel frattempo, come da consiglio, ho reimportato tutti gli oggetti in un accdb nuovo, ma non è servito.