2009-07-09 1 views
5

Ich bin ein 80% Ruby on Rails Entwickler, muss aber trotzdem einige Access VBA Arbeiten machen.Wie in Access VBA + SQL-Entwicklung produktiv sein?

Einige von ihnen sind sehr scheiße Systeme, wurden vor Ewigkeiten gebaut, von dem großen Unternehmen weltweit verwendet, so dass die meisten Arbeiten nur das alte System verbessern.

Die Techniken sind im Grunde MS Access als Front-End, verknüpfte Tabelle, die über ODBC als Back-End auf SQL-Server verlinken.

Jetzt glaube ich wirklich, ich brauche Hilfe, will nur wissen, ist da jemand kann die elegante VBA-Anwendung bauen die objektorientierten Patten folgen?

Noch besser, wenn Sie mir einen Ausschnitt Code zeigen können, wie gut es sein kann, danke.

+0

Ich bin ein Access-Benutzer, die in OO-Design zu stoßen versucht. Sie könnten durch meine Anfrage unter http://www.tek-tips.com/viewthread.cfm?qid=1552745&page=1 unterhalten werden Ich denke, ich kann helfen zu beantworten, aber müssen wissen, woran Sie gerade arbeiten: ein Benutzer Schnittstelle, Datenpflege, hierarchische Daten oder was? Wie Rik Garner sagt, ist OO für Access und VBA nicht selbstverständlich. OO-Techniken sind immer noch wertvoll, aber das ist ein großer Spielraum für ein Snippet. – Smandoli

+0

Ich verwende OO-bezogene Techniken, um mehrere Formulare zu verwalten, den Code wiederverwendbar zu halten und vor allem rekursive Daten zu verarbeiten. David Fentons Antwort ist relevant für meinen obigen Kommentar. Aspekte von OO sind anwendbar, und Sie können Ihre Erfahrung nutzen, um etwas wie Eleganz zu erreichen.Aber es hilft zu wissen, wo OO nicht angewendet wird, wie von David beschrieben. – Smandoli

+0

Es ist immer noch eine interessante Frage, sechs Jahre später: Wie sind Sie mit diesen Antworten zurechtgekommen? –

Antwort

8

Nun das erste Problem zu beachten ist, dass es keine magische Verknüpfung zum Erlernen von MS-Zugang gibt. Im Laufe der Jahre habe ich viele Entwicklungsplattformen von Mainframe-Systemen über Datenbanksysteme bis hin zum handcodierten Assembler auf einem PC gelernt. Ich habe zwei Gehaltsabrechnungssysteme von Grund auf neu geschrieben (mit den kanadischen Steuerformulierungen für Steuern, die in diesen Systemen enthalten sind). Ein System wurde von Anfang an Pascal geschrieben, wo ich sogar meine eigene Daten-Engine geschrieben habe.

Machen Sie keinen Fehler, ms-access ist ein komplexes Entwicklungssystem.

Sie können herrlich aussehende Drop-Dead-Anwendungen im Zugriff erstellen. werfen Sie einen Blick auf diese Screenshots:

http://www.fairsoftware.com/screenshots.aspx

Hinweis die kühlen Bänder in den obigen Screenshots.

Das Problem ist, dass Sie Unix an einem Tag nicht lernen können und Sie Oracle an einem Tag nicht lernen können. Sie können auch keinen MS-Zugang an einem Tag lernen. Wenn diese Anwendungen, die Sie verwalten müssen, komplex sind, dann brauchen Sie hier einen Entwickler mit 4-5 Jahren Erfahrung. Die Idee, dass man irgendwie schneller in ms-Zugriff kommt, als vb.net oder C# zu sagen, ist hier wirklich ein falsches Konzept.

In der Tat würde ich so weit gehen zu sagen, dass Sie Oracle schneller lernen können, als Sie MS-Zugang lernen können. Während die Lernkurve im MS-Zugang nicht so steil ist, ist sie sehr lang.

VB6 ist ein Spaziergang im Park im Vergleich zum Zugang. VB6-Formulare sind tot einfach, aber die Formulare im Zugriff sind sehr komplex (wir haben etwa 3 mal die Anzahl der Ereignisse und Eigenschaften für das gegebene Formular). Zum Beispiel haben wir beim Zugriff zwei Ereignisse, die ausgelöst werden, wenn ein Formular geladen wird (on-open und on-load). VB6-Formulare (und sogar .net-Formulare) haben nur ein Ereignis. Das On-Open-Ereignis hat eine Abbruchoption. Wenn Sie cancel = true setzen, wird das Formular nicht geladen und nicht angezeigt.

Logisch bedeutet dies, dass das Formular zwei verschiedene Ereignisse für zwei verschiedene Zwecke aufweist, wenn Sie das Formular aufrufen. Das on-open-Ereignis wird somit einen Code haben, der für die Verifizierung und das Testen bestimmter Datenbedingungen verwendet wird (und Ihnen ermöglicht, abzubrechen). Wenn das On-Open-Ereignis nicht abgebrochen wird, wird das On-Load-Ereignis ausgelöst und das Formular wird geladen.

Logischerweise bedeutet dies, dass Code, der Variablen oder Anfangswerte von Steuerelementen auf dem Formular einrichtet, in dem On-Load-Ereignis platziert werden muss (in der Tat können Steuerelemente nicht geändert werden, sondern nur im Open-Ereignis untersucht werden)). Es gibt also eine sehr schöne Granularität und Unterscheidung zwischen den beiden Prozessen, die bei einer typischen Formlast auftreten. Es ist auch interessant festzustellen, dass die meisten Produkte auf dem Markt nicht diese zwei separaten Ereignisse haben.

Als Entwickler legen Sie also den entsprechenden Code und verwenden das richtige Ereignis für einen bestimmten Zweck. Es wird einige Erfahrung brauchen, um Zugang zu haben, um herauszufinden, welches Ereignis für diese Dinge verwendet wird. Sie könnten fragen, ob es ein Buch gibt, das dieses Problem erklärt, aber das ist wie die Frage, gibt es ein Buch, das Ihnen sagt, wann Sie ein Kombinationsfeld über dem einer Listbox verwenden sollen? Ich glaube nicht, dass es ein solches Buch gibt.

Die Dokumentation für ein Kombinationsfeld erklärt, was ein Kombinationsfeld ist und wie es verwendet wird. Dasselbe gilt für den Dokumentationszugriff für das offene Ereignis. Sie können lesen, was on-open tut, aber dann müssen Sie als Entwickler herausfinden, wann es angemessen ist, dieses Ereignis zu verwenden. Das gleiche gilt, wenn es sinnvoll ist, ein Kombinationsfeld oder ein Listenfeld zu verwenden. Am Ende des Tages wird die einzige Lösung und wie Sie diese Probleme kennen, Ihre Erfahrung als Entwickler mit dem Produkt sein.

Ich habe einen Artikel, der über die Verwendung von Klassenobjekten in MS Zugriff spricht, und wenn sie hier zu verwenden:

http://www.members.shaw.ca/AlbertKallal/Articles/WhyClass.html

Wenn Sie Codebeispiele von allem Formulare Berichte freuen zu verwenden Windows-API, eine gute Referenz ist hier:

http://www.mvps.org/access/

1

Sie haben mein Mitgefühl - Access VBA ist in keiner Hinsicht objektorientiert wie Ruby. Sie müssen Ihre Denkweise ändern, wenn Sie die Entwicklung in Access angehen; Solche Anwendungen sind fast immer auf das Konzept von Datenzeilen und -sätzen statt auf Objekte ausgerichtet. Die Benutzerschnittstelle ist oft an Datenzeilen und -sätze gebunden, so dass viele Installationen blockiert sind.

Mit den Worten, dass es möglich ist, mit der Sorgfalt und Aufmerksamkeit sorgfältig zu wartende Anwendungen in Access zu erstellen. Viel Glück.

+0

Danke für deine Antwort, großartig !! Es macht Schmerzen, die Access VBa zu tun, hast du eine Idee, wie man einige Tipps lernt? wie eine Screencast-Website? –

0

Werfen Sie einen Blick auf die Implements Anweisung, d. H. Polymorphismus über Schnittstellen. Das ist ungefähr so ​​wie OO wie VBA.

+0

Danke, schau dir das jetzt an. –

1

eine Sache, die um in Access nur futzing werden Sie nicht lehren, wie und eigenständige Klassenmodule verwenden erstellen. Diese haben einige Aspekte der Objektorientierung, aber nicht eine ganze Menge, aber sie können äußerst nützlich sein, um Ihren Code besser zu verwalten, da Sie viele Operationen in einem eigenständigen Klassenmodul umbrechen und dann als ein Objekt behandeln können, das es haben kann Mehrere Instanzen. Du bekommst nicht Vererbung und Polymorphismus und viele andere Schlagworte, die mit dem OO-Evangelium einhergehen, aber es lohnt sich, einen Blick darauf zu werfen, was sie tun können, wenn du sie nie umfassend benutzt hast.

+1

"Sie bekommen nicht ... Polymorphismus" - sicher, Sie tun: jemals das Schlüsselwort implementiert? – onedaywhen

+0

"Implementiert" wurde hinzugefügt, lange nachdem ich gelernt habe, Klassenmodule in Access zu verwenden, weshalb ich nicht weiß, was es tut. Dies ist eines der Probleme der langjährigen Erfahrung mit Access - oft werden neue Funktionen nicht erkannt. –

+1

Trotzdem lohnt es sich, einen Blick darauf zu werfen, was Implements können - nie zu spät, um etwas Neues zu lernen :) – onedaywhen