Domanda

Ho creato un'applicazione MS Access 2003, impostato come una configurazione di divisione front-end / back-end, con un gruppo di utenti di circa cinque persone. L'estremità anteriore mdb si siede su un file server di rete, e contiene tutte le query, maschere, report e codice VBA, oltre a collegamenti a tutte le tabelle nel mdb back-end e alcuni link a fonti di dati ODBC come un AS / 400. Il back-end si siede sullo stesso file server di rete, ed ha solo i dati della tabella in esso.

Questo funzionava bene fino a che non "è andato in diretta" e la mia manciata di utenti iniziato a venire con richieste di miglioramento, segnalazioni di bug, ecc Ho messo in atto il nuovo codice attraverso lo sviluppo / test nella mia copia del front-end mdb in un'altra cartella di rete (che è legata alla stessa mdb back-end), poi la pubblicazione mio file completato in un "come-and-get-it" cartella, avvisando gli utenti, e vanno copia / incolla il nuovo file di front-end per le proprie cartelle in rete. In questo modo, ogni utente può aggiornare il proprio front-end quando sono in un 'punto di arresto', senza dover avviare tutti fuori in una sola volta.

Ho scoperto che quando sto sviluppando ora, a volte di accesso diventa estremamente lento. Come, quando sto sviluppando una forma e si tenta di fare clic su un menu a discesa sulla casella proprietà, la freccia a discesa spingerà in, ma ci vorrà qualche secondo prima che appaia l'elenco delle opzioni. O ci sono tonnellate di ritardo nella selezione e lo spostamento controlli di una maschera. O un sacco di lag tastiera.

Poi, in altri tempi, non c'è alcun ritardo a tutti.

Mi chiedo se è perché sto anche nella stessa back-end come gli altri utenti. Ho fatto fare uno sforzo ragionevole per impostare le query, maschere, report ecc con il minimo blocco dei record, se non del tutto, a seconda della necessità. Ma forse ho perso qualcosa, o forse c'è qualche altro problema di prestazioni che devo affrontare.

Ma mi chiedo se c'è un modo migliore per me di impostare un proprio .mdb sviluppo back-end, in modo da poter essere testando il mio codice su dati "sicuri" al posto degli stessi dati in tempo reale, come il resto degli utenti. Ho paura che sia solo una questione di tempo prima che alcuni dati corrotti, probabilmente nel momento peggiore possibile.

Ovviamente, ho potuto solo impostare un MDB back-end separato e riconfigurare manualmente i collegamenti di tabella nel frontale ogni volta, utilizzando la Gestione tabelle collegate. Ma spero ci sia una soluzione più elegante di quello.

E mi chiedo se ci sono altri problemi di prestazioni che dovrebbe essere considerato in questo multi-utente, la configurazione di database di divisione.

EDIT: avrei dovuto aggiungere che mi sono bloccato con MS Access (non MS-SQL o qualsiasi altro back-end "reale"); per maggiori dettagli si veda il mio commento a questo post.

È stato utile?

Soluzione

Se tutti gli utenti condividono il front-end, questa è la errata configurazione.

Ogni utente dovrebbe avere una copia individuale del front-end. Condivisione di un front-end è garantito per portare a frequentare la corruzione del front-end condiviso, così come corruzioni dispari di forme e moduli nel front-end.

Non è chiaro a me come si potrebbe essere in via di sviluppo la stessa copia del front-end che gli utenti finali utilizzano, in quanto a partire da A2000, che è proibito (a causa della "monolitico Salva modello", dove l'intero VBA progetto viene memorizzato in un singolo campo BLOB in un singolo record in una delle tabelle di sistema).

Io davvero non credo che i problemi sono causati da utilizzando i dati di produzione (anche se è probabile che non è una buona idea per sviluppare con i dati di produzione, come altri hanno detto). Penso che sono causati da cattive pratiche di codifica e la mancanza di manutenzione del codice front end.

  1. disattivare la compilazione su richiesta nelle opzioni VBE.

  2. assicurarsi che si richiede Option Explicit.

  3. compilare il codice di frequente, dopo ogni poche righe di codice -. Per rendere questo facile, aggiungere il pulsante alla barra degli strumenti COMPILE VBE (già che ci sono, ho anche aggiungere il pulsante CALL STACK)

  4. periodicamente fare un backup del vostro front-end e decompilare e ricompilare il codice. Questo si ottiene con il lancio di accesso con l'opzione / decompilare, aprendo il front-end, la chiusura di accesso, aprendo il frontale con accesso (con il tasto SHIFT premuto per bypassare il codice di avvio), quindi compattando il front-end decompilato (con lo spostamento chiave tenuto premuto), quindi compilare l'intero progetto e compattazione per l'ultima volta. Si dovrebbe fare questo prima di qualsiasi rilascio del codice importante.

Alcuni altri pensieri:

  1. non si dice se si tratta di un server Windows. server Linux a cui si accede più di SAMBA hanno mostrato problemi in passato (anche se alcune persone giuro per loro e dicono di essere di gran lunga più veloce di server Windows), e storicamente server Novell hanno bisogno di avere impostazioni ottimizzato per consentire file Jet a essere attendibilmente modificato. Ci sono anche alcune impostazioni (come oplock) che possono essere regolati su un server Windows per rendere le cose funzionano meglio.

  2. memorizzare i MDB Jet in azioni con percorsi brevi. \ Server \ Data \ MyProject \ MyReallyLongFolderName \ Access \ Databases \ sta per essere la lettura dei dati molto più lento di Server \ Database \. Questo fa davvero una grande differenza.

  3. collegato negozio tabelle metadati che possono diventare obsoleti. Ci sono due semplici passaggi e uno uno drastiche da prendere per risolvere il problema. In primo luogo, compattare il back-end, e quindi compattare il front-end. Questo è quello facile. Se il problema persiste, eliminare completamente i legami e li ricreare da zero.

  4. si potrebbe anche prendere in considerazione la distribuzione di un MDE agli utenti finali, invece di un MDB, in quanto non può uncompile (che un MDB può).

  5. Tony Toews prestazioni FAQ per altre informazioni sulle prestazioni generalizzata .

Altri suggerimenti

1) le tabelle Relink Accesso da codice http://www.mvps.org/access/tables/tbl0009.htm

Una volta che sono pronto a pubblicare un nuovo MDE agli utenti ho ricollegare le tabelle, fare la MDE e copiare il MDE al server.

2) Ho creato appositamente la libera utility Auto FE Updater in modo da poter apportare modifiche al FE MDE come spesso come avrei voluto e di essere abbastanza sicuro che la prossima volta che qualcuno è andato a eseguire l'applicazione che avrebbe tirare l'ultimo versione. Per maggiori informazioni su errori o l'utilità Auto Updater FE vedere il programma di utilità libero Auto FE Updater a http://www.granite.ab.ca/access/autofe.htm al mio sito web per mantenere la FE su ogni PC fino ad oggi.

3) Ora, quando si lavora in loco presso una clientela Faccio gli aggiornamenti per la struttura della tabella dopo ore quando tutti sono fuori dal sistema. Vedere COME: Rileva tempo di inattività dell'utente o inattività in Access 2000 (Q210297) http://support.microsoft ? .com / kbid = 210.297 ACC: Come rilevare il tempo di inattività dell'utente o di inattività (Q128814) http://support.microsoft.com/?kbid=128814

Tuttavia abbiamo trovato che il codice che gestisce l'evento timer deve essere disabilitata per i programmatori. In caso contrario, le cose strane cominciano ad accadere quando si sta modificando il codice.

Anche stampare anteprima avrebbe a volte non consentire agli utenti di eseguire una voce di menu per esportare il report in Excel o altri. Quindi si doveva fare clic destro sul rapporto previsto a ottenere un certo tipo di messa a fuoco interna di nuovo sulla relazione in modo che potessero poi esportarlo. Questo è stato aiutato anche estendendo il timer per cinque minuti.

L'aspetto negativo di estendere il timer a cinque minuti era se una persona rimane nella stessa forma e allo stesso controllo per parti considerevoli del giorno, vale a dire qualcuno che fa le stesse indagini, la routine non si rese conto che avevano in realtà fatto qualcosa. Mettero 'in qualche qualche logica per azzerare questo timer ogni volta che fanno qualcosa nel programma.

4) In riferimento a un'altra persona commentando sugli script e tale da aggiornare lo schema vedere Compare'Em http://home.gci.net/~mike-noel/CompareEM-LITE/CompareEM.htm . Anche se ha le sue peculiarità lo fa creare il codice VBA per aggiornare le tabelle, campi, indici e le relazioni.

Usa VBA per scollegare e ricollegare le tabelle per il nuovo obiettivo quando si passa da dev per prod. E 'stato per molti anni per me ricordare la sintassi -. So solo che la funzione era semplice scrivere

In alternativa, utilizzare MS-Access per parlare con MS-Access tramite ODBC, o qualche altro collegamento di dati che vive al di fuori della mdb cliente.

Come per tutti i database di base di file, alla fine incorrere in problemi con picchi di utilizzo o quando si va su un piccolo numero magico da qualche parte tra 2 e 30.

Inoltre, Accesso tende a corrompere di frequente, quindi il backup, compatto e la riparazione deve essere effettuata su una base frequente. 3rd strumenti di terze parti utilizzati per esistere per automatizzare questo compito.

Per quanto riguarda le prestazioni va, i dati sono in fase di elaborazione lato client, quindi si potrebbe desiderare di usare qualcosa come NetMeter a guardare la quantità di dati che sta sopra il filo. Lo stesso principio circa indicizzazione ed evitando le scansioni di tabella si applica ai DB file di base pure.

Molti buoni suggerimenti da altre persone. Ecco i miei 2 millicents vale la pena. I miei dati back-end è su un server accessibile tramite un mapping di unità. Nel mio caso, Y guidare. gli utenti di produzione ottenere la mappatura attraverso uno script di login utilizzando Active Directory. Poi i seguenti scenari sono facilmente fatto da file batch:

  • Sviluppare contro computer locale facendo un comando subst in un file batch
  • eseguire report sui dati ultime notti puntando Y per il server di backup (solo lettura)
  • eseguire report contro termine di dati al mese da parte indicando la giusta directory
  • prova contro scenari specializzati mantenendo una directory speciale

Nel mio ambiente (in media 5 utenti simultanei, 1000 di righe, non 10.000 di.) La corruzione si è verificato, ma è raro e gestibile. Solo una volta negli ultimi anni hanno abbiamo fatto ricorso al backup giorni precedente. Usiamo SQL Server per la nostra roba volume più alto, ma non è così conveniente per sviluppare contro, probabilmente perché non abbiamo un amministratore di SQL in loco.

Si potrebbe anche trovare alcune delle risposte a questa domanda (come estrarre schemi di accesso) per essere utile pure. Una volta che hai estratto uno schema utilizzando una delle tecniche che sono state suggerite si guadagna tutta una serie di nuove opzioni, come la possibilità di utilizzare il controllo di origine sulle schemi, oltre ad essere in grado di creare facilmente ambienti di test "pulite".

Modifica per rispondere a commentare: Non c'è modo semplice per controllo del codice sorgente un database di Access nel suo formato nativo, ma i file di schema sono solo i file di testo come qualsiasi altro. Quindi, è possibile il check-in e fuori del software di controllo fonte a tua scelta per un facile controllo di versione / rollback.

O corso, si basa su di voi avere una serie di script creati per ri-costruire la vostra base di dati dallo schema. Una volta fatto, è di solito abbastanza banale per creare una versione un'opzione / alternativa che ricostruisce in una posizione diversa, che consente di costruire ambienti di test da qualsiasi versione precedente impegno dello schema. Mi auguro che chiarisce un po '!

Se si desidera aggiornare automaticamente lo schema MDB back-end quando si rilascia un nuovo FE ai clienti poi vedere Compare'Em http://home.gci.net/~mike-noel/CompareEM-LITE/CompareEM.htm sarà lieto di generare il codice VBA necessità di ricreare un MDB . O il codice per creare le differenze tra due MDB in modo da poter fare un aggiornamento di versione del già esistente ESSERE MDB. E 'un po' eccentrico, ma funziona.

Io lo uso per tutto il tempo.

È necessario capire che un file mdb condivisa per i dati non è una soluzione robusta. Microsoft suggerisce che SQL Server o qualche altro database server basato su sarebbe una soluzione di gran lunga migliore e permetterebbe di utilizzare lo stesso fine accesso frontale. La procedura guidata di migrazione avrebbe aiutato a rendere il passaggio se si voleva andare in quel modo.

Come altri usi ha sottolineato, si verificherà la corruzione. E 'semplicemente una questione di come spesso, non se.

Per capire i problemi di prestazioni è necessario capire che al server il file mdb con i dati in esso è semplicemente che, un file. Dal momento che nessun codice viene eseguito sul server, il server non capisce le transazioni, blocco record ecc semplicemente sa che c'è un file che un gruppo di persone stanno cercando di leggere e scrivere simultaniously.

Con un sistema di database come SQL Server, Oracle, DB2. MySQL ecc il programma di database viene eseguito sul server e guarda al server come un unico programma l'accesso al file di database. E 'il programma di database (in esecuzione sul server) che gestisce il blocco dei record, le transazioni, la concorrenza, la registrazione, i dati di backup / ripristino e tutte le altre belle cose che si vuole da un database.

Dal momento che un programma di database progettato per essere eseguito sul server è progettato per fare questo, e solo questo, può farlo molto meglio e più modo efficiente che un programma come Access lettura di una scrittura di un file condiviso (mdb).

Ci sono due regole per lo sviluppo con i dati in tempo reale

  

La prima regola è. . . non si sviluppano mai   con i dati in tempo reale. Non sempre.

     

La seconda regola è. . .Never sviluppare   con i dati in tempo reale. Non sempre.

È possibile modificare programmaticamente le associazioni per le tabelle collegate, in modo da poter scrivere una macro per cambiare il vostro link quando si sta distribuendo una nuova versione.

L'applicazione è lenta perché è MS Access, e non come molti utenti simultanei (dove molti è un numero qualsiasi> 1).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top