Datenzugriff

Diskussionen über den Quellcode (Module, Klassenstruktur, Schnittstellen u.s.w.) der Access Code Library

Datenzugriff

Beitragvon Josef Pötzl » Fr 26. Mär 2010, 10:10

Hallo!

Eines wird bei Access bestimmt immer wieder benötigt werden: Datenzugriff per DAO, ADODB und ODBC.

Mein Vorschlag: Kapselung dieser Methoden in Klassen, damit sie auf die jeweiligen Bedürfnisse eingestellt werden können.
Ich selbst nutze so eine Struktur:
  • DbConnection
    • ADODB
      • OpenRecordset
      • ...
    • DAO
      • OpenRecordset
      • ...
    • ODBC
      • OpenRecordset
      • ...
(siehe Doxygen-Doku meiner Hilfs-COM-dll)

Verwendung der Klassenstruktur: Ich stelle in der Hauptklasse die Verbindungsdaten ein und die Hilfsklassen für DAO, ADODB und ODBC erhalten dann von der Hauptklasse die erforderlichen Verbindungsdaten. Natürlich können die Klassen für ADODB & Co. auch alleine verwendet werden.

Auf jeden Fall sollte der Code meiner Ansicht nach so gestaltet werden, dann man in der Anwendungskonfiguration einstellen kann, welche Datenverbindung verwendet werden soll.

mfg
Josef
Josef Pötzl
Moderator
 
Beiträge: 757
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2010 (2013)

Re: Datenzugriff

Beitragvon Josef Pötzl » Fr 26. Mär 2010, 16:38

Ein erster Entwurf der Klassen: SVN Rev 21
... oder in der Doxgen-Doku DbConnectionHandler
Josef Pötzl
Moderator
 
Beiträge: 757
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2010 (2013)

Re: Datenzugriff

Beitragvon Sten Schmidt » Fr 26. Mär 2010, 17:36

Hi,

ich habe in [1]

Code: Alles auswählen
Public Function InsertIdentityReturn(ByVal InsertSQL As String) As Variant


folgendes gesehen:

Code: Alles auswählen
Set rst = db.OpenRecordset("SELECT @@Identity") 'zuletzt zugewiesener Autowert / ... funktioniert nicht bei MySQL!


Wäre es denkbar / möglich den OdbcHandler sozusagen "Parametrisierbar" zu machen, so dass er auf die Eigenheiten der verschiedenen RDMS reagieren kann?



[1] http://source.access-codelib.net/filede ... cls&rev=21
Sten Schmidt
Entwickler
 
Beiträge: 139
Registriert: Do 18. Mär 2010, 22:24
Accessversion: 2007, 2010
Access-Erfahrung: Experte

Re: Datenzugriff

Beitragvon Josef Pötzl » Fr 26. Mär 2010, 17:51

Das ist bestimmt möglich und sollte auch gemacht werden. :)

Wobei du in diesem Beispiel beachten musst, dass das Jet/DAO-Synstax ist, da db auf eine DAO.Database verweist und außerdem nicht ODBCDirect nutzt.
Noch kritischer wird die DBMS-Abhängigkeit bei ADODB, wenn man über OLEDB fährt.

Die einfachste Variante wäre einen optionalen Parameter an diese Funktion anzufügen, mit dem man die Select-Anweisung zum Ermitteln des Autowertes angeben kann.
Oder man erweitert die Klasse um ein paar Eigenschaften zum Einstellen dieser Texte.

Ich persönlich neige aber eher zu einem Ereignis, dass in dieser Funktion ausgelöst wird, und über das man dann einerseits die Select-Anweisung einspeisen kann oder überhaupt aus einer anderen Klasse die Aufgabe der Prozedur übernimmt (so eine Art Hook-Mechanismus).
In die Klasse schreibt man dann jene Anweisung, die am meisten verwendet wird und für jene DBMS, die damit nicht klar kommen nimmt man eine Hilfsklasse mit, die auf die Ereignisse entsprechend reagiert und korrigierend eingreift.

... jetzt wären wir wieder beim Thema "Detailklassen". Könnte man in VBA sinnvoll erben, würde ich sagen: bauen wir doch für die jeweiligen DBMS die notwendigen Klassen ein.
Mit den ursuper Implements-Anweisungen von VBA wird das aber ein Wartungsaufwand, wenn ein paar Prozeduren ergänzt werden, der vermutlich nur zu Folgefehlern führt, weil irgendwo doch etwas übersehen wurde zu ändern.
Daher neige ich eher zu einer "offenen" Ereignis-Schnittstelle der Datenzugriffsklassen, an die sich beliebige Klassen anhängen können.

Was aber für DBMS bestimmt noch interessant werden wird, ist so etwas ähnliches wie die DbConnectionInfo-Klasse, mit der ich die Verbindungsdaten für die jeweiligen DBMS zusammenstelle. So eine Klasse könnte dann auch die richtigen SQL-Texte für @@Identity & Co. liefern.
Josef Pötzl
Moderator
 
Beiträge: 757
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2010 (2013)

Re: Datenzugriff

Beitragvon Josef Pötzl » Sa 27. Mär 2010, 09:50

Ich ergänzte den Code mit "Hook-Ereignissen". Zum Testen kann die OdbcHandler-Klasse inkl. Test-Module (ja/nein-Feld "inkl. Test-Klassen") importiert werden. (... aber zuvor SVN-Update nicht vergessen. ;))
Josef Pötzl
Moderator
 
Beiträge: 757
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2010 (2013)


Zurück zu Quellcode

cron