Frage

Ich war mir nicht sicher, ob ich das hier oder auf Superuser fragen sollte, also entschuldige ich mich, wenn es nicht hierher gehört.

Ich habe eine kleine PHP/MySQL -Datenbank -App erstellt, um die Kundenbetreuungsdaten für den Shop meiner Mutter zu verwalten, um sie mit XAMPP lokal auf ihrem Registrierkasse -Computer einzurichten. Ich wurde jedoch gebeten, das System in einer relationalen GUI -Datenbank wie MS Access oder OpenOffice -Basis neu zu implementieren, in erster Linie, damit sie Dinge wie E -Mail -Zusammenarbeit und grafische Berichte mit einer GUI machen kann (die ich nicht schreiben muss) .

Ich kann meine MySQL -Tabellenstruktur und -beziehungen problemlos replizieren und einige der grundlegenderen Formen und Berichte erstellen, aber ich habe noch nie Scripting, Makros usw. in Zugriff oder Basis durchgeführt. Mein PHP hat viel mehr als nur eine Eingabe von Formularen behandelt, sondern es gab einige Skripten, mit denen ich nicht weiß, wie ich in Zugriff / Basis implementiert werden soll. Beachten Sie: Wenn ich Access verwende, ist es Access 2007.

Hier ist ein kurzer Überblick darüber, was ich versuche, falls es hilft. Entschuldigung für die Länge.

Das Unternehmen ist ein Markt für Take & Bake Food, und die Datenbank ersetzt ein physisches Stempelkarten-Treuesystem. Jeder Kunde erhält einen Stempel auf seiner Karte für alle 25 US -Dollar, die er ausgeben. Sie verdienen kostenlose Mahlzeiten wie folgt:
- Auf dem 8. Briefmarken verdienen sie eine kostenlose Beilage.
- Auf dem 16. Briefmarken verdienen sie eine kostenlose Mahlzeit mit regulärer Größe.
- Auf dem 24. Briefmarken verdienen sie eine kostenlose Mahlzeit für Familiengröße und ihre Kartenresets auf Null -Briefmarken.
Das Datum jedes Stempels muss aufgezeichnet werden (ansonsten würde ich nur ein Feld inkrementieren, anstatt eine Stempelstaber zu haben).

Ich habe 3 Tische: customers, stamps, und freebies. customers hat eine 1-zu-Viele-Beziehung mit beiden stamps und freebies.

  • customers ist eine einfache Kontaktliste.
    Säulen: ID, firstname, lastname, email, phone
  • stamps Hält die Aufzeichnungen von jedem verdiente Briefmarke.
    Säulen: ID, customerID, date, index (1-24; der nte Stempel auf der Karte dieses Kunden)
  • freebies Hält Aufzeichnungen über jede kostenlose Mahlzeit, die sie verdient haben.
    Säulen: ID, customerID, date, size, is_redeemed

Hier ist die Magie meines PHP, die ich nicht weiß, wie ich in Zugriff/Basis implementiert werden soll:

  1. Wenn ein Benutzer einen Kunden auswählt und auf eine Schaltfläche "einen Stempel hinzufügen" klickt:

    • stamps wird befragt, um den Index vom letzten Stempel für diesen Kunden zu holen => Lokale Variable n
    • Wenn n == 24, setzen Sie n = 0. Inkrement n um 1.
    • Ein Datensatz wird auf eingesetzt stamps mit dem aktuellen Datum, der Kunden -ID und einem Index von N
    • Wenn n == 8, 16 oder 24 ein Datensatz eingefügt wird freebies Mit der entsprechenden Größe und einer Warnung scheint der Benutzer darüber zu informieren, dass der Kunde kostenlose Scheiße verdient hat.
  2. Eine Art von "Kunden anzeigen" (Formular?

Im Allgemeinen muss ich es ziemlich idiotisch und "Big-Button"-Automatisierung, wo immer möglich-Kassierer im Geschäft ohne Vorkenntnisse über Datenbanken verwenden können.

Ist dies in einem Programm wie Zugriff oder Basis praktisch oder sollte ich sie nur davon überzeugen, meine PHP -Version zu verwenden? Wenn ich Code schreiben muss, welche Sprache muss ich mir selbst beibringen? Sollte ich meine Daten unterschiedlich strukturieren? Ich bin mir nicht sicher, wo ich hier anfangen soll.

War es hilfreich?

Lösung

Mein Vorschlag: Tu es nicht. Führen Sie einen MySQL -Server auf dem fraglichen PC aus, lassen Sie Ihre PHP -App als Front -End für die Kassierer und dann, wenn Sie die MS -Funktionsberichte von MS Access wünschen, haben Sie einfach eine Verbindung zur MySQL -Datenbank mit ODBC herstellen.

Die beste Implementierung ist ziemlich häufig die, die Sie bereits haben.

Andere Tipps

Wirklich, ich denke, das wäre ein Kinderspiel. Es ist wahr, wie Tony sagte, dass Sie weiterhin die gleichen Tabellen/Backend verwenden können, und das ist wahrscheinlich die Route, die ich empfehlen würde. Sie müssen die ODBC -Treiber von MySQL auf jeder Maschine installieren, die mit der MySQL -Datenbank verknüpft wird. Erstellen Sie danach einen DSN und greifen Sie dann auf die Tabellen zu, indem Sie innerhalb des Zugriffs auf die Tabellen gehen. Möglicherweise möchten Sie später Code hinzufügen, um die Tabellen jedes Mal neu zu verbinden, wenn die Software mithilfe von DSN-freien Tabellen geladen wird. Auf diese Weise kann die Datenbank auf einer Maschine ausgeführt werden, in der kein DSN konfiguriert ist. Ich empfehle Ihnen, entweder mit MySQL oder SQL Server Express im Gegensatz zu einem MS Access -Backend zu gehen, aber ich werde mir nicht die Zeit nehmen, um herauszufinden, warum.

Ich denke, Sie können tatsächlich viel mehr Funktionen von einer herkömmlichen Windows -Desktop -Anwendung (integriert in MS Access oder VB.NET) erhalten als mit PHP. Und ich bin meiner Meinung nach in der Lage, es mit weniger Code und weniger investierter Zeit zu tun. Ich habe VB.NET erwähnt, aber ich würde wahrscheinlich MS Access über VB.NET für Datenbanken empfehlen, obwohl eines der Jobs erledigt wird.

Wie Tony bereits erwähnt, verwendet Access VBA -Sprache. Es dauert eine Weile, bis Sie es wirklich aufgenommen haben, es sei denn, Sie haben bereits Erfahrung mit anderen Programmiersprachen, die die grundlegende Syntax verwenden. Ich habe festgestellt, dass der Wechsel von VBA/ASP zu PHP/JavaScript nur langsam läuft, aber nicht unbedingt so schwierig. PHP verwendet den C -Style -Code mit lockigen Klammern und VBA nicht.

Wenn Sie von PHP kommen, können Sie einige Dinge für Sie neu sein:

Stärkere variable Eingabe - Bei Zugriff können Sie Ihre Variablen tatsächlich mit einem angegebenen Datentyp wie String, Datum, ganzzahliger, langer, einziger, doppelter usw. deklarieren. Ich empfehle, dies so weit wie möglich zu verwenden. Es gibt nur sehr wenige Male, in denen Sie die allgemeineren Typen wie Objekt oder Variante verwenden müssen. Variablen, die mit einem bestimmten Datentyp deklariert sind, wirft einen Fehler auf, wenn Sie versuchen, den falschen Datentyp in sie einzugeben. Dies hilft Ihnen, meiner Meinung nach einen besseren Code zu schreiben.

Option Explizit - Option Explizit ist eine Erklärung, die Sie oben in jedem Code -Modul einstellen können, um durchzusetzen, dass Sie vor der Verwendung eine Variable mit einer DIM -Anweisung deklarieren müssen. Ich empfehle Ihnen dringend, dies zu tun. Es spart Ihnen viel Zeit, um Probleme zu beheben.

MyVariable setze = nichts - Das Reinigen von Objektvariablen nach der Verwendung ist eine der besten Praktiken bei der Verwendung von MS -Zugriff. Sie werden dies verwenden, um DAO -Datensatzset -Variablen, ADO -Verbindungsvariablen, ADO -Datensatzset -Variablen, Formularvariablen usw. zu beseitigen Wenn Sie die Variable nicht mehr verwenden müssen.

Nein, inklusive - es gibt keine Einfügungsaussage in MS Access. Sie können Codemodule aus anderen Zugriffsdatenbanken importieren. Sie können Funktionen aufrufen, die in einer DLL enthalten sind. Es gibt jedoch keine Einfügung in Zugriff wie in PHP.

Docmd - Sie müssen das DOCMD -Objekt von MS Access verwenden, um Formulare und Berichte zu öffnen und andere gemeinsame Aufgaben auszuführen. Nur eine Warnung: Es ist häufig irrational. Langzeit-Zugriffsbenutzer denken nicht viel darüber nach, aber ich habe festgestellt, dass diese Befehle wenig Zusammenhalt oder Konsistenz haben. Lassen Sie mich Ihnen ein Beispiel geben. Wenn Sie ein Formular schließen möchten, verwenden Sie diesen Code: Docmd.close acform, "frmsomeFormName" Wenn Sie jedoch ein Formular öffnen möchten, verwenden Sie diesen Code: Docmd.openform "frmname" Warum wird in diesem Beispiel das Öffnen eines Formulars über eine eigene OpenForm -Funktion erhalten, während ein Formular einfach geschlossen wird, gefolgt von einer Konstante, die den Zugriff zeigt, dass Sie ein Formular schließen möchten? Ich habe keine antwort. DOCMD ist voll von dieser Art von Inkonsistenz. BlueClaw legt einen ziemlich guten Job bei der Auflistung der gängigsten DOCMDs, obwohl ich nicht denke, dass die Beispiele genau Stern sind.

Verweise - Sie sollten nicht sehr häufig Referenzen verwenden müssen. Sie müssen sie verwenden, um Dinge wie DAO und ADO (siehe weiter unten) oder Microsoft Scripting Runtime (häufig zum Zugriff, Lesen, Schreiben usw. für Dateien und Ordner) zu aktivieren. Es ist im Grunde etwas, das Sie einmal tun, und dann vergessen Sie es.

ActiveX -Steuerelemente - Wahrscheinlich besser zu versuchen, Ihr Projekt zu erstellen, ohne diese zu verwenden. Sie benötigen das gleiche Steuerelement, um auf jedem Computer zu installieren, der Ihre Software ausführt. Ich weiß nicht viel darüber, aber ich verstehe, dass es einige Kompatibilitätsprobleme gibt, die auftreten können, wenn Sie ActiveX -Steuerelemente in Ihrem Projekt verwenden.

DAO - Datenzugriffsobjekte - DAO ist der ursprüngliche native, native Objektsatz von Access, die zur Schnittstelle zu Ihrem Datencontainer verwendet werden. Obwohl es hauptsächlich zum Zugriff auf Datum in einem Zugriffsdatenbank -Backend/-Container verwendet wird, kann es auch für einige Aufgaben verwendet werden, wenn Sie ODBC -verknüpfte Tabellen verwenden. DAO ist sehr hilfreich, wenn Sie Datensätze durch Schleifen benötigen, um Änderungen in der Masse vorzunehmen. Sie können es sogar verwenden, um durch Formularsteuerungen zu schleifen. Ein Ort, den ich verwende, besteht darin, Zeilennummern in Rechnungsdetails nach dem Löschen einer Zeile neu zu ordnen. Eine weitere typische Verwendung besteht darin, es in "Dienstprogramm" -Funktionen zu verwenden, bei denen Sie etwas in einem bestimmten Feld oder in einem bestimmten Feld ändern müssen, das mit einer Update -Abfrage nicht durchgeführt werden kann.

CurrentDB.Execute ("Abfrage hier aktualisieren oder löschen ...") Die Ausführungsmethode des aktuellenDB -Objekts ist nach meinem Verständnis ein implizite DAO -Aufruf. Sie können Update oder Löschen von Abfragen in lokalen und verknüpften Tabellen aus dem VBA -Code ausführen oder löschen. Sie können dies auch mit docmd.runsql erreichen, aber currentDB.execute ist die bevorzugte Methode, da Sie verbesserte Fehlermeldungen erhalten, wenn etwas fehlschlägt, wenn Sie ", dbfailonError" als zweites Argument angehängt.

ADO - ActiveX -Datenobjekte - Ich habe empfohlen, keine ActiveX -Steuerelemente zu verwenden, aber dies ist eine ActiveX -Technologie, die Sie möglicherweise benötigen. Meines Wissens ist ADO das einzige, was Sie verwenden können, um gespeicherte Verfahren vom Zugang auszuführen. Ado ähnelt DAO und sollte DAO ersetzen, obwohl es es nicht wirklich nicht getan hat. Ich neige dazu, beide in meinen Anwendungen zu verwenden. Es dauert eine Weile, um herauszufinden, welcher die Arbeit für Sie erledigt oder welches es besser macht. Im Allgemeinen bleibe ich bei DAO für alles, außer für die Ausführung gespeicherter Prozeduren oder die Verbindung zu externen Datenquellen (dh keine verknüpften Tabellen). DAO und ADO sind beide Teil von MDAC (Microsoft -Datenzugriffskomponenten), die mit MS Access installiert werden.

Dateisystemobjekt - Dieses oben erwähnte Objekt wird häufig zum Zugriff auf Dateien und Ordner verwendet. Sie werden feststellen, dass Sie es verwenden müssen, um Dateien zu kopieren, Textdateien zu erstellen, Textdateien zu lesen, in Textdateien zu schreiben usw. Es ist Teil der Microsoft -Skriptlaufzeit, die Teil des Windows -Skript -Host es kann "gebrochen" werden). Durch Access können Sie einige Möglichkeiten zu Zugriffsdateien und Ordnern verwenden, die die integrierten Funktionen/Methoden von VBA (z. B. Dir () verwenden, aber diese Funktionen decken nicht alle Basen ab.

SQL - Abfragesprache des Servers - Sie sind wahrscheinlich bereits mit SQL vertraut, aber Sie müssen sich an den Zugriff auf "Superset" der SQL -Sprache gewöhnen. Es ist nicht drastisch anders, aber Zugriff ermöglicht es Ihnen, Zugriffsfunktionen (z. B. links, rechts) oder Ihre eigenen benutzerdefinierten Funktionen zu verwenden. Ihre eigenen Funktionen müssen nur in einem Codemodul existieren und als öffentlich erklärt werden. Ein Beispiel für Ihre eigene Funktion wäre wiederholt (existiert nicht in MS -Zugriff, in MySQL), das manchmal verwendet wird, um Einrückungen auf der Grundlage von Zählungen (*) in Tabellen mit untergeordneten Elternbeziehungen zu erstellen. Ich gebe das als Beispiel, obwohl es unwahrscheinlich ist, dass Sie eine solche Funktion verwenden müssen, es sei denn, Sie werden das verschachtelte Set -Modell verwenden, um hierarchische Kategorien zu halten.

Variablen können nicht in buchstäblichen Zeichenfolgen sein - dies ist ein massiver Unterschied zwischen Zugang und PHP. Mit PHP können Sie schreiben: "SELECT * Aus dem Tag, wo TagText = '$ mytag'" In MS Access müssten Sie es so schreiben: "Wählen Sie müssen sich darüber keine Sorgen machen, es sei denn, Sie formatieren eine Abfrage in VBA, um einen DAO- oder ADO -Datensatz abzurufen. Was ich gerade hingewiesen habe Variablen in diesen.)

Abfrage - Nicht schwer herauszufinden, aber beim Zugriff auf eine Abfrage ist im Grunde eine MySQL -Ansicht. Ich speichere eigentlich nicht sehr oft Fragen. Ich benutze sie im Allgemeinen nur, um meinen SQL -Code abzuleiten, und nehme diese SQL und füge sie in mein Formular als Datensatz ein, anstatt ein Formular an eine gespeicherte Abfrage zu binden. Es spielt keine Rolle, wie Sie es tun möchten. In beiden Fällen gibt es Vor- und Nachteile. Als Randnotiz haben Sie keine Angst davor, Ansichten in MySQL zu erstellen und mit ihnen mit dem Zugriff zu verknüpfen. Wenn Sie mit ihnen verlinken, sieht der Zugriff sie als Tabellen. Ob es aktualisierbar/schriftlich ist oder nicht, hängt vom Konstruktion der Ansicht ab. Bestimmte Arten von Abfragen/Ansichten (wie Gewerkschaften) sind schreibgeschützt.

Als endgültiger Hinweis empfehle ich MS Access über OpenOffice.org Base. Ich habe Base vor ein paar Jahren ausprobiert und fand es nicht so viele Funktionen. Ich war jedoch bereits im MS -Zugang erfahren, daher bin ich mir nicht sicher, ob ich OpenOffice -Basis einen fairen Versuch gegeben habe. Was ich fand, waren Ereignisse. Ich bin es gewohnt, meine Formulare in MS Access fein abzustimmen, um den Benutzern eine sehr reaktionsschnelle Benutzeroberfläche mit viel Feedback zu geben, und ich konnte nicht herausfinden, wie man das in der Basis macht. Vielleicht haben sich die Dinge geändert, seit ich es das letzte Mal versucht habe, ich weiß es nicht. Hier ist ein Artikel, in dem Basis mit MS Access vergleicht.

Andere, also gurus zugreifen, zögern Sie nicht, Fehler in meiner Antwort zu verweisen. Ich betrachte mich immer noch als einen Anfänger im Programmieren.

Ich kann nicht für die Basis sprechen. Der Zugriff kann jedoch direkt mit der MySQL -Datenbank verknüpft werden, damit Sie die Daten nicht wiederholen müssen. Was das Erstellen der Code -Teile des Zugriffs angeht, wäre dies ganz einfach. Zugriff, Wort und Excel, verwenden Sie VBA, das identisch ist, mit Ausnahme von Zugriffs-, Wort- oder Excel -Objektmodellspezifischen Zügen, um Visual Basic 6.0 zu erhalten. In der Tat ist auch im VB6 -Editor ein kleiner dunkeler Fehler bei der Verwendung des VBA -Editors vorhanden.

Ich werde auch hinzufügen, dass eine meiner Zugriffsdatenbanken 160 Tabellen, 1200 Abfragen, 350 Formulare, 450 Berichte und 70.000 Codezeilen enthält. Ihre App ist also im Vergleich ziemlich klein.

In der Tabelle für Werbegeschenke würde ich das Feld IS_REDEED in ein Datum ändern. Ich stimme definitiv damit zu, jeden Briefmarken und Freebie als separate Datensätze in Tischen aufzunehmen. Diese Art und Weise ist es wirklich einfach, dem Kunden eine Geschichte zu zeigen, anstatt nur zu sagen, dass Sie nur X -Briefmarken erhalten haben.

Betrachten Sie auch einen Barcode -Leser und die Ausgabe der mit den Benutzern kodierten Plastik -Brieftaschenkarten. Dies beschleunigt die Zeit, die der Angestellte benötigt, um ihre Aufzeichnungen nachzuschlagen. Erwägen Sie in der Tat, dass Sie in Ihrer Region Treukarten, die sie möglicherweise bereits haben, wie eine Safeway- oder Airmiles -Karte haben. Ich würde diese Nummer in eine separate Tabelle einfügen, falls sie die erste Karte verlieren, die ihnen gegeben wurde. Wie können sie mehrere Karten verfolgen. Eine Familie möchte vielleicht Punkte auf ein Konto sammeln.

Danke für die Lenghty -Posting. Auf diese Weise können wir Ihnen einige Vorschläge zu verschiedenen Facetten machen, an die Sie vielleicht überhaupt nicht gedacht haben.

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