Probleme bei der Verwendung von MS Access als Front-End für ein MySQL-Datenbank-Back-End?

StackOverflow https://stackoverflow.com/questions/5842

  •  08-06-2019
  •  | 
  •  

Frage

Zwei Benutzer wollten dieselbe Datenbank, die ursprünglich in MS Access geschrieben war, gemeinsam nutzen, ohne dass es zu Konflikten wegen einer einzelnen MDB-Datei kam.

Ich habe die Tabellen mithilfe von MySQL von einer einfachen MS Access-Datenbank nach MySQL verschoben Migrations-Toolkit (was übrigens gut funktioniert) und Access so einrichten, dass über ODBC eine Verbindung zu diesen Tabellen hergestellt wird.

Bisher bin ich auf Folgendes gestoßen:

  • Sie können in einer Tabelle keine Zeilen ohne Primärschlüssel einfügen/aktualisieren/löschen (keine Überraschung).
  • AutoNumber-Felder in MS Access müssen der Primärschlüssel sein, sonst landen sie einfach als Ganzzahlspalten in MySQL (natürlich, warum sollte es nicht der PK sein?)
  • Die Tabellen wurden auf den InnoDB-Tabellentyp von MySQL migriert, aber die Access-Beziehungen wurden nicht zu MySQL-Fremdschlüsseleinschränkungen.

Kann ich mit weiteren Problemen rechnen, sobald die Datenbank verwendet wird?Vor allem, wenn beide Benutzer an derselben Tabelle arbeiten?

War es hilfreich?

Lösung

Ich hatte eine Anwendung, die genauso funktionierte:ein MS Access-Frontend zu einem MySQL-Backend.Es war so mühsam, dass ich stattdessen ein Win32-Frontend geschrieben habe.Aus dem Kopf heraus bin ich auf folgende Probleme gestoßen:

  • Die Entwicklung der ODBC-Verbindung scheint schon vor langer Zeit eingestellt worden zu sein.Es kursieren verschiedene Versionen – sehr verwirrend.Der ODBC-Link unterstützt Unicode/UTF8 nicht, und ich erinnere mich, dass es auch andere Probleme damit gab (obwohl einige durch sorgfältige Konfiguration behoben werden konnten).
  • Möglicherweise möchten Sie Ihr Datenbankschema manuell optimieren, um es mit MS Access kompatibel zu machen.Ich sehe, Sie haben bereits herausgefunden, welche Ersatzschlüssel benötigt werden (d. h. int-Primärschlüssel) :-)
  • Sie sollten bedenken, dass Sie möglicherweise Pass-Through-Abfragen verwenden müssen, um komplexere SQL-Manipulationen der MySQL-Datenbank durchzuführen.
  • Seien Sie vorsichtig, wenn Sie viel VBA verwenden, da dies dazu neigt, Ihre Frontend-Datei zu beschädigen.Regelmäßiges Komprimieren der Datenbank (über das Hauptmenü, Extras | Datenbank-Dienstprogramme | Komprimieren und Wiederherstellen oder so ähnlich – ich verwende die niederländische Version) und Erstellen viele von Backups ist notwendig.
  • Der Zugriff verursacht tendenziell viel Netzwerkverkehr.Wirklich riesige Mengen.Ich konnte dafür keine Lösung finden.Wenn Sie das im Auge behalten möchten, empfiehlt sich die Verwendung eines Netzwerkmonitors!
  • Access besteht darauf, boolesche Werte als 0/-1 zu speichern.Meiner Meinung nach macht 0/+1 mehr Sinn und ich glaube, dass es auch in MySQL die Standardmethode ist.Kein großes Problem, aber wenn Ihre Kontrollkästchen nicht funktionieren, sollten Sie dies unbedingt überprüfen.

Eine mögliche Alternative wäre, das Backend (mit den Daten) auf ein gemeinsames Laufwerk zu legen.Ich erinnere mich, dass dies gut dokumentiert ist, auch in der Hilfe.Vielleicht möchten Sie einen Blick darauf werfen einige allgemeine Ratschläge zur Aufteilung in ein Frontend und ein Backend Und Code, der beim Start automatisch wieder eine Verbindung zum Backend herstellt;Ich kann Ihnen auch weiteren Beispielcode senden oder ihn hier posten.

Andernfalls sollten Sie auch MS SQL in Betracht ziehen.Ich habe damit keine Erfahrung, aber ich gehe davon aus, dass es zusammen mit MS Access viel besser funktioniert!

Andere Tipps

Ich weiß, dass dieses Thema nicht allzu frisch ist, aber nur ein paar zusätzliche Erklärungen:

Wenn Sie MS Access effektiv nutzen möchten, insbesondere bei größeren Mehrbenutzerdatenbanken, gehen Sie bitte wie folgt vor:

  • Teilen Sie Ihre MDB in Frontend-Anwendungs- und Backend-Dateien (nur Daten) auf – Sie haben dann zwei separate MDB-Dateien.

  • Migrieren Sie alle Tabellen mit Daten und Struktur in eine externe Datenbank.Es kann sein:MySQL (funktioniert sehr gut, keine Einschränkungen hinsichtlich der Datenbankgröße, erfordert etwas mehr Kenntnisse, da es sich nicht um MS-Technologie handelt, ist aber in vielen Fällen eine gute Wahl – außerdem können Sie Ihr Backend mit mehr RAM und zusätzlichen CPUs skalieren, sodass alles von Ihren Anforderungen abhängt und Hardwarefähigkeiten);Oracle (wenn Sie genug Geld oder eine Unternehmenslizenz haben) oder Oracle 10g MS SQL Server 2008 (es ist in allen Fällen ein großartiges Paar mit MS Access-Frontend und MS SQL Server-Backend, aber Sie müssen für die Lizenz bezahlen!- Vorteile sind:enge Integration, beide Technologien stammen vom selben Anbieter;MS SQL Server ist sehr einfach zu warten und gleichzeitig effektiv) oder Express-Edition (gleiche Geschichte wie bei Oracle XE – fast die gleichen Einschränkungen).

  • Verknüpfen Sie Ihr MS Access-Frontend erneut mit der Backend-Datenbank.Wenn Sie MS SQL Server als Backend ausgewählt haben, ist die Verwendung des Assistenten von MS Access genauso einfach.Für MySQL müssen Sie ODBC-Treiber verwenden (das ist einfach und funktioniert sehr gut).Für Oracle – bitte nicht die ODBC-Treiber von Microsoft verwenden.Diese von Oracle erledigen ihre Arbeit viel besser (Sie können die Zeit vergleichen, die zum Ausführen einer SQL-Abfrage von MS Access an Oracle über Oracle ODBC und MS Oracle ODBC-Treiber benötigt wird).An diesem Punkt verfügen Sie über ein solides Datenbank-Backend und ein voll funktionsfähiges MS Access-Frontend – eine MDB-Datei.

  • Kompilieren Sie Ihr MDB-Frontend zu MDE – das bringt Ihnen viel Geschwindigkeit.Darüber hinaus ist es die einzig sinnvolle Form der Verteilung von MS Access-Anwendungen an Ihre Endbenutzer.

  • für die tägliche Arbeit – MDE-Datei mit MS Access-Frontend verwenden.Für die weitere Entwicklung des MS Access-Frontends verwenden Sie die MDB-Datei.

  • Verwenden Sie keine schlecht geschriebenen ActiveX-Komponenten, um die Frontend-Funktionen von MS Access zu verbessern.Schreiben Sie sie lieber selbst oder kaufen Sie die richtigen.

  • Glauben Sie nicht an die Mythen, dass es viele Probleme mit MS Access gibt – dies ist ein großartiges Produkt, das in vielen Fällen helfen kann.Das Problem besteht darin, dass viele Leute davon ausgehen, dass es sich um ein Spielzeug handelt oder dass MS Access im Allgemeinen einfach ist.Normalerweise verursachen sie viele Fehler und Probleme selbst und aufgrund mangelnder Kenntnisse und Erfahrung.Um mit MS Access erfolgreich zu sein, ist es wichtig, dieses Tool zu verstehen – es gilt die gleiche Regel wie bei jeder anderen Technologie auch.

Ich kann Ihnen sagen, dass ich ein ziemlich fortgeschrittenes MS Access vor dem MySQL-Backend verwende und sehr zufrieden bin (als Entwickler, der diese Anwendung pflegt).Meine Freunde, die Benutzer sind auch zufrieden, da sie sich mit der GUI (Frontend) und der Geschwindigkeit (MySQL) sehr wohl fühlen und keine Probleme mit der Datensatzsperrung oder der Datenbankleistung haben.

Darüber hinaus ist es wichtig, viel über bewährte Praktiken und die Erfahrungen anderer zu lesen.Ich würde sagen, dass MS Access in vielen Fällen eine gute Lösung ist.Ich kenne viele dedizierte, maßgeschneiderte Systeme, die als Experiment in Form einer privaten MS Access-Datenbank (MDB-Datei) begannen und sich dann zu Folgendem entwickelten:aufgeteilt auf MS Access (MDE – Frontend, MDB – Backend) und schließlich auf:MS Access-Frontend (MDE) und „seriöses“ Datenbank-Backend (hauptsächlich MS SQL Server und MySQL).Es ist auch wichtig, dass Sie Ihre MS Access-Lösung immer als funktionierenden Prototyp verwenden können – Sie haben ein gebrauchsfertiges Backend in Ihrer Datenbank (MySQL – nehmen wir an) und Sie können das Frontend auf die Technologie Ihrer Wahl umschreiben (Weblösung?vielleicht eine Desktop-C#-Anwendung – was Sie brauchen!).

Ich hoffe, ich konnte einigen von Ihnen bei der Überlegung helfen, mit MS Access zu arbeiten.

Grüße, Wawrzynhttp://dcserwis.pl

Gareth Simpson meinte:

Wenn es sich nur um zwei Benutzer handelt, sollte der Zugriff gut abschneiden, wenn Sie das .MDB auf einem gemeinsam genutzten Laufwerk einsetzen.

Ähm, nein.Es gibt keine Mehrbenutzer-Access-Anwendung, für die nicht jeder Benutzer eine eigene Kopie des Frontends haben sollte.Das bedeutet, dass jeder Benutzer eine MDB auf seiner Workstation haben sollte.Warum?Weil die Objekte in den Frontends nicht gut gemeinsam genutzt werden können (nicht annähernd so gut wie Jet-Datentabellen, obwohl es in diesem Szenario keine davon gibt, die MySQL als Back-End verwenden).

Gareth Simpson fuhr fort:

Ich glaube, die empfohlenen Max -gleichzeitigen Benutzer für den Zugriff sind 5, aber gelegentlich habe ich ihn daran vorbeigefahren und bin nie aufgefallen.

Nein, das ist völlig falsch.Die theoretische Grenze für Benutzer einer MDB beträgt 255.Das ist natürlich nicht realistisch, denn sobald Sie etwa 20 Benutzer erreicht haben, müssen Sie Ihre Access-App sorgfältig programmieren, damit sie gut funktioniert (obwohl die Dinge, die Sie in einer Access-to-Jet-App tun müssen, die gleichen sind wie Sie). tun, um jede Server-Datenbankanwendung effizient zu machen, z. B. das Abrufen der kleinsten nutzbaren Datensätze).

Da in diesem Fall jeder Benutzer über eine individuelle Kopie der Front-End-MDB verfügen sollte, sind die Mehrbenutzerbeschränkungen von Access/Jet einfach überhaupt nicht relevant.

Ich weiß, dass dies Ihre Frage nicht direkt beantwortet, aber es könnte sich lohnen, einen Blick darauf zu werfen SQL Server 2005-Migrationstool für Access.Ich habe das Tool noch nie verwendet, aber es könnte sich lohnen, es mit SQL Server 2005 Express Edition zu verwenden, um zu sehen, ob es die gleichen Probleme gibt wie bei MySQL

Vergessen Sie nicht, auf jedem Datensatz einen Zeit-/Datumsstempel anzubringen.Manchmal denkt MS Access, „ein anderer Benutzer hat den Datensatz geändert oder gelöscht“ und erlaubt Ihnen keine Änderung!Ich habe das auf die harte Tour herausgefunden.

Im Allgemeinen kommt es darauf an :)

Ich hatte keine großen Probleme, wenn die Anwendungsseite gerade die Daten über die Formulare aktualisierte.Sie können Warnungen/Fehler erhalten, wenn dieselbe Zeile von mehr als einem Benutzer aktualisiert wurde;Aber Access scheint seine Live-Plattensätze ständig zu aktualisieren.

Probleme können auftreten, wenn Alice bereits mit Datensatz 365 arbeitet und Bob ihn aktualisiert und Alice dann versucht, ihn mit ihren Änderungen zu aktualisieren.Soweit ich mich erinnere, wird Alice eine kryptische Fehlermeldung erhalten.Für die Benutzer wäre es einfacher, wenn Sie diese Fehler abfangen und ihnen zumindest eine freundlichere Fehlermeldung geben würden.

Ich hatte mehr Probleme, als ich Datensätze im VB-Code über RecordSets bearbeitete, insbesondere in Kombination mit der Bearbeitung derselben Daten in Formularen.Das ist nicht unbedingt ein Mehrbenutzerproblem;Sie haben jedoch fast die gleiche Situation, da Sie einen Benutzer mit mehreren Verbindungen zu denselben Daten haben.

Wenn es sich nur um zwei Benutzer handelt, sollte Access problemlos funktionieren, wenn Sie die .mdb-Datei auf einem freigegebenen Laufwerk ablegen.

Haben Sie es zuerst versucht, anstatt einfach davon auszugehen, dass es ein Problem sein wird?

Ich glaube, dass die empfohlene maximale Anzahl gleichzeitiger Benutzer für Access bei 5 liegt, aber gelegentlich habe ich es darüber hinausgeschoben und bin dabei nie hängengeblieben.

Andererseits habe ich Access einmal als Frontend für MySQL in einer Einzelbenutzerumgebung verwendet (ich).Es war eine besonders unangenehme Erfahrung, ich kann mir nicht vorstellen, dass es mit zwei Benutzern schöner wird.

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