Frage

Ich habe eine MS Access 2003-Anwendung erstellt, als Split-Front-End / Back-End-Konfiguration, mit einer Benutzergruppe von etwa fünf Personen eingerichtet. Das vordere Ende .mdb sitzt auf einem Netzwerk-Dateiserver, und es enthält alle Abfragen, Formulare, Berichte und VBA-Code sowie Links zu allen Tabellen in dem Back-End-.mdb und einige Links zu ODBC-Datenquellen wie ein AS / 400. Das hintere Ende sitzt auf dem gleichen Netzwerk-Dateiserver, und es hat nur die Tabellendaten in ihm.

Das funktioniert gut, bis ich „ging live“ und meine Handvoll Benutzer begann mit Verbesserungsvorschlägen kam, Fehlermeldungen, usw. Ich habe durch die Entwicklung / Prüfung in meiner eigenen Kopie des Front-End neuen Code Ausrollen .mdb in einem anderen Netzwerkordner (die das gleichen back-End-.mdb verbunden ist), dann in meine fertigen Datei veröffentlicht ein „come-and-get-it“ Ordner, die Benutzer alarmieren, und sie gehen copy / paste die neuen Front-End-Datei auf ihre eigenen Ordner im Netzwerk. Auf diese Weise kann jeder Benutzer ihre Frontend aktualisieren, wenn sie an einem ‚Haltepunkt‘ sind ohne alle auf einmal booten mit aus.

Ich habe festgestellt, dass, wenn ich jetzt zu entwickeln, manchmal Zugang wird extrem langsam. Wie, wenn ich eine Form entwickle und versuche, ein Drop-down auf die Eigenschaften Feld zu klicken, wird der Dropdown-Pfeil drückt in, aber es wird ein paar Sekunden dauern, bis die Liste der Optionen angezeigt wird. Oder es gibt Tonnen Verzögerung bei der Auswahl und Fahr Steuerelemente in einem Formular. Oder viele Tastaturverzögerung.

Dann zu anderen Zeiten, gibt es überhaupt keine Verzögerung.

Ich frage mich, ob es ist, weil ich auf die gleiche Back-End wie die anderen Benutzer verbunden bin. Ich habe eine angemessenen Anstrengungen unternehmen, um die Abfragen, Formulare einrichten, Berichte usw. mit minimalen Satzsperren, wenn überhaupt, je nach Bedarf. Aber ich habe etwas übersehen kann, oder vielleicht gibt es einige andere Leistungsproblem ich stellen müssen.

Aber ich frage mich, ob es eine noch bessere Möglichkeit für mich, meine eigene Entwicklung Back-End-.mdb einzurichten, so kann ich meinen Code testen auf „sichere“ Daten anstelle der gleichen Live-Daten wie der Rest der Nutzer. Ich habe Angst, dass es nur eine Frage der Zeit, bevor ich einige Daten beschädigt, wahrscheinlich im ungünstigsten Moment.

unter Verwendung des Tabellenverknüpfungs-Managers

Natürlich könnte ich nur einen separaten Backend-.mdb einrichten und manuell die Tabelle Links im Frontend, jedes Mal neu konfigurieren. Aber ich hoffe, es gibt eine elegantere Lösung als das.

Und ich frage mich, ob es irgendwelche andere Performance-Probleme sind sollte ich in diesem Multi-User in Erwägung ziehen, Split Datenbankkonfiguration.

EDIT: Ich habe Hinzuzufügen ist, dass ich mit MS Access bin stecken (nicht MS-SQL oder andere "echte" Back-End); Für weitere Details siehe meinen Kommentar zu diesem Beitrag.

War es hilfreich?

Lösung

Wenn alle Benutzer das vordere Ende zu teilen, das ist die falsche Konfiguration.

Jeder Benutzer sollte eine einzelne Kopie des vorderen Endes hat. ein Frontend-Sharing ist garantiert häufige Korruption des gemeinsam benutzten vorderen Endes sowie ungeradee Verfälschungen von Formen und Module in dem vorderen Ende zu führen.

Es ist mir nicht klar, wie Sie in der gleichen Kopie des vorderen Endes der Entwicklung werden könnten, die die Endbenutzer verwenden, da mit A2000 beginnen, das verboten ist (wegen des „monolithischen speichert Modell“, bei dem die gesamte VBA Projekt wird in einem einzigen BLOB-Feld in einem einzelnen Datensatz in einem der Systemtabellen gespeichert).

Ich glaube wirklich nicht, die Probleme durch die Verwendung der Produktionsdaten verursacht werden (obwohl es keine gute Idee zu entwickeln, gegen Produktionsdaten wahrscheinlich ist, wie andere gesagt haben). Ich denke, sie durch eine schlechte Programmierpraktiken und der Mangel an Wartung Ihrer Front-End-Code verursacht werden.

  1. drehen KOMPILIERT ON DEMAND in den VBE-Optionen aus.

  2. stellen Sie sicher, Sie benötigen Option Explicit.

  3. kompilieren Sie den Code häufig, nachdem alle paar Zeilen Code -. Diese einfach zu machen, fügen Sie die Compile-Schaltfläche, um Ihre VBE-Symbolleiste (während ich dabei bin ich auch noch die CALL-Taste STACK)

  4. in regelmäßigen Abständen ein Backup Ihres vorderen Ende machen und dekompilieren und den Code neu kompilieren. Dies wird durch die Einführung Access mit dem / decompile Schalter erreicht, öffnen Sie Ihr Front-End, Zugang zu schließen, öffnen Sie die Frontpartie mit Access (mit der SHIFT-Taste gedrückt, um den Startcode zu umgehen), dann das dekompilierten vordere Endes Verdichten (mit SHIFT Taste gedrückt gehalten wird), dann wird das gesamte Projekt zusammenzustellen und um ein letztes Mal zu verdichten. Sie sollten dies tun, bevor jede größere Code-Release.

Ein paar andere Gedanken:

  1. Sie nicht sagen, ob es ein Windows-Server ist. Linux-Server über SAMBA zugegriffen hat Probleme in der Vergangenheit gezeigt (obwohl einige Leute von ihnen schwören und sagen, sie sind wesentlich schneller als Windows-Server) und historisch Novell-Server benötigt Einstellungen haben gezwickt Jet-Dateien zu ermöglichen, zuverlässig bearbeitet werden. Es gibt auch einige Einstellungen (wie oplocks), die auf einem Windows-Server eingestellt werden können, um die Dinge besser funktionieren.

  2. speichern Sie Ihren Jet MEB in Aktien mit kurzen Wegen. \ Server \ Data \ MyProject \ MyReallyLongFolderName \ Access \ Databases \ wird viel langsamer als das Lesen von Daten \ Server \ Datenbanken sein. Das macht wirklich einen großen Unterschied.

  3. verknüpften Tabellen Speichern von Metadaten, die veralten können. Es gibt zwei einfache Schritte und eine drastisch man genommen werden, um es zu beheben. Zuerst verdichten das hintere Ende, und dann das vordere Ende verdichten. Das ist das leicht. Wenn das nicht hilft, vollständig die Verknüpfungen löschen und neu erstellen sie von Grund auf neu.

  4. Sie könnten auch erwägen eine MDE für Ihre Endbenutzer anstelle eines MDB verteilen, wie es kann nicht uncompile (welche eine MDB kann).

  5. finden Sie unter Tony Toews Performance FAQ für andere verallgemeinerte Leistungsinformationen .

Andere Tipps

1) Relink Access-Tabellen von Code http://www.mvps.org/access/tables/tbl0009.htm

Sobald ich bin bereit, eine neue MDE der Benutzer ich die Tabellen neu verknüpfen zu veröffentlichen, die MDE machen und den MDE auf den Server kopiert werden.

2) Ich habe speziell das freie Auto FE Updater-Dienstprogramm, so dass ich Änderungen an der FE MDE so oft machen konnte, wie ich wollte, und ganz sicher sein, dass das nächste Mal jemand ging die App auszuführen, die es in den neuesten ziehen würde Ausführung. Für weitere Informationen über den Fehler oder das Auto FE Updater-Dienstprogramm das freie Auto FE Updater-Dienstprogramm siehe unter http://www.granite.ab.ca/access/autofe.htm auf meiner Website die FE auf jedem PC auf dem neuesten Stand zu halten.

Nun

3), wenn vor Ort bei einem Kunden arbeiten mache ich das Updates an die Tabellenstruktur nach Stunden, wenn alle aus dem System ist. Siehe Gewusst wie: Erkennen Benutzerleerlaufzeit oder Inaktivitäts in Access 2000 (Q210297) http://support.microsoft ? .com / kbid = 210.297 ACC: Wie Benutzerleerlaufzeit oder Inaktivitäts (Q128814) erkennen http://support.microsoft.com/?kbid=128814

Allerdings fanden wir, dass der Code, der auf dem Timer-Ereignis ausgeführt wird, muss für die Programmierer deaktiviert werden. Ansonsten beginnen seltsame Dinge passiert, wenn Sie Code bearbeiten.

Auch Vorschau drucken würde manchmal nicht den Benutzern erlauben, um einen Menüpunkt führen Sie den Bericht in Excel oder andere zu exportieren. Sie hatte also klicken Sie auf dem Bericht der Vorschau nach rechts über den Bericht irgendeine Art von internem Fokus zurück zu bekommen, so dass sie dann exportieren können. Dies wurde auch durch die Verlängerung der Timer bis fünf Minuten geholfen.

Der Nachteil der Timer bis fünf Minuten Verlängerung war, wenn eine Person in der gleichen Form bleibt und gleichzeitig Kontrolle für erhebliche Teile des Tages, also jemand die gleichen Anfragen zu tun, hat die Routine nicht erkennen, dass sie tatsächlich hatte etwas getan. Ich werde in einem gewissen Logik irgendwann wird die Umsetzung dieses Timer zurückgesetzt werden, wenn sie etwas im Programm tun.

4) In Bezug auf eine andere Person über Skripte zu kommentieren und diese das Schema sehen Compare'Em http://home.gci.net/~mike-noel/CompareEM-LITE/CompareEM.htm . Während es seine Macken hat es den VBA-Code erstellen Tabellen, Felder, Indizes und Beziehungen zu aktualisieren.

Mit VBA zu entkoppeln und erneut verknüpfen Sie Ihre Tabellen auf das neue Ziel, wenn sie von Entwicklern zu prod wechseln. Es ist schon viele Jahre für mich die Syntax erinnern -. Ich weiß nur, die Funktion einfach war zu schreiben

oder MS-Access verwenden, um MS-Access über ODBC oder eine andere Datenverbindung zu sprechen, die außerhalb des Kunden mdb lebt.

Wie bei allen Dateibasis Datenbanken, werden Sie schließlich Probleme mit Spitzenauslastung laufen oder wenn Sie gehen über eine kleine magische Zahl irgendwo zwischen 2 und 30.

Auch neigt Zugang zu verderben häufig, so Backup, kompakt und Reparatur müssen auf einer häufigen Basis durchgeführt werden. 3rd-Party-Tools verwendet, um existieren, diese Aufgabe zu automatisieren.

Was die Leistung geht, werden die Daten Clientseite verarbeitet werden, so dass Sie so etwas wie NetMeter verwenden möchten zu sehen, wie viele Daten über den Draht gehen. Das gleiche Prinzip über die Indizierung und die Vermeidung von Tabellenscans gilt auch Basis dbs Datei.

Viele gute Vorschläge von anderen Menschen. Hier ist meine 2 millicents wert. Meine Backend-Daten auf dem Server sind über einen Antrieb Mapping abgerufen. In meinem Fall fährt der Y. Produktion Benutzer erhalten die Abbildung durch ein Anmeldeskript Active Directory. Dann werden die folgenden Szenarien leicht durch Batch-Datei durchgeführt:

    Entwickeln Sie gegenüber den lokalen Computer
  • durch einen Befehl subst in einer Batch-Datei zu tun
  • Berichte erstellen gegen letzte Nächte Daten von Y auf den Backup-Server verweist (nur lesen)
  • Berichte erstellen gegen Ende des Monats Daten in das richtige Verzeichnis zeigt
  • Test gegen spezielle Szenarien durch ein spezielles Verzeichnis zu halten

In meiner Umgebung (durchschnittlich 5 gleichzeitige Benutzer, 1000 von Zeilen, nicht 10.000 Jahre.) Korruption aufgetreten ist, aber es ist selten und überschaubar. Nur ein einziges Mal in den letzten Jahren haben wir in den vergangenen Tagen Backup zurückgegriffen. Wir verwenden SQL Server für unsere höheres Volumen Sachen, aber es ist nicht so bequem gegen zu entwickeln, wahrscheinlich, weil wir nicht über einen SQL Server-Betreiber vor Ort haben.

Sie können auch einige der Antworten auf diese Frage (wie Schemata aus Zugang zu extrahieren) nützlich zu sein als gut. Sobald Sie ein Schema mit einem der Techniken extrahiert haben, dass Sie eine ganze Reihe von neuen Optionen wie die Möglichkeit, auf den Schemata zu verwenden, Steuerquelle gewinnt vorgeschlagen wurden, als auch in der Lage, auf einfache Weise „saubere“ Testumgebungen aufzubauen.

Bearbeiten, um zu antworten Kommentar: Es gibt keine einfache Möglichkeit, um eine Access-Datenbank zu Quellcodeverwaltung in seiner nativen Format, aber Schema-Dateien sind nur Textdateien, wie jedes andere. Daher können sie in überprüfen und aus der Source-Control-Software Ihrer Wahl für eine einfache Versionskontrolle / Rollbacks.

oder Kurs stützt sie sich auf Sie eine Reihe von Skripten einrichten, die Ihre Datenbank aus dem Schema neu zu bauen. Sobald Sie das tun, dann ist es normalerweise ziemlich trivial eine Option / alternative Version zu erstellen, die es an einem anderen Ort neu aufgebaut, so dass Sie Testumgebungen von einer früheren engagierten Version des Schemas zu bauen. Ich hoffe, dass klärt ein wenig!

Wenn Sie das Back-End-MDB-Schema automatisch aktualisiert werden soll, wenn Sie einen neuen FE loslassen, um den Kunden dann sehen Compare'Em http://home.gci.net/~mike-noel/CompareEM-LITE/CompareEM.htm wird gerne den VBA-Code generieren müssen eine MDB neu erstellen . Oder der Code die Unterschiede zwischen zwei MDBs zu erstellen, so dass Sie ein Versions-Upgrade des bereits vorhandenen BE MDB tun können. Es ist ein wenig schrullig, aber funktioniert.

Ich benutze es die ganze Zeit.

Sie müssen verstehen, dass eine gemeinsame MDB-Datei für die Daten ist nicht eine robuste Lösung. Microsoft würde, dass SQL Server vorschlagen oder einen anderen Server-basierte Datenbank eine viel bessere Lösung wäre, und Ihnen erlauben würde, den gleichen Zugang Frontend zu verwenden. Der Migrationsassistent würden Sie helfen, die Umstellung vornehmen, wenn Sie diesen Weg gehen wollen.

Als weitere Anwendungen ausgeführt hat, wird Korruption auftreten. Es ist einfach eine Frage, wie oft, nicht wenn.

, um die Performance-Probleme zu verstehen, müssen Sie verstehen, dass die MDB-Datei auf den Server mit den Daten in es einfach ist, dass eine Datei. Da kein Code auf dem Server ausgeführt wird, wird der Server nicht Transaktionen verstehen, Satzsperren usw. Es ist einfach weiß, dass es eine Datei, die simultaniously zu lesen und schreiben ein paar Leute versuchen, ist.

Mit einem Datenbanksystem wie SQL Server, Oracle, DB2. MySQL usw. das Datenbankprogramm läuft auf dem Server und schaut auf den Server wie ein einziges Programm den Zugriff auf die Datenbankdatei. Es ist das Datenbankprogramm (läuft auf dem Server), die Aufzeichnung Verriegelungsgriffe, Transaktionen, Parallelität, Protokollierung, Daten Backup / Recovery und all die anderen schönen Dinge, die man aus einer Datenbank will.

Da ein Datenbank-Programm entwickelt, um auf dem Server ausgeführt werden soll, das zu tun und nur das, es kann es viel besser und mehr efficently tun, dass ein Programm wie Access Lesen eines eine gemeinsame Datei zu schreiben (mdb).

Es gibt zwei Regeln für die Entwicklung gegen Live-Daten

  

Die erste Regel ist. . . nie entwickeln   gegen Live-Daten. Nicht immer.

     

Die zweite Regel ist. . .never entwickeln   gegen Live-Daten. Nicht immer.

Sie können programmatisch die Bindungen für verknüpfte Tabellen ändern, so dass Sie einen Makro schreiben können Sie Ihre Links zu ändern, wenn Sie eine neue Version sind bereitstellen.

Die Anwendung ist langsam, weil es MS Access ist, und es nicht wie viele gleichzeitige Benutzer (wo viele ist eine beliebige Zahl> 1).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top