![]() |
Datenbank: Access, MySQL • Zugriff über: ADO
Datenbankzugriff in DLL auslagern?
Hallo,
ich möchte ein Programm schreiben, bei dem der eigentliche Zugriff auf die Datenbank möglichst ausgelagert ist. Meine Grundidee ist, dass das Programm nur eine Funktion, z.B. AddUser, aufrufen soll, welche dann an eine entsprechende DLL delegiert wird, in welcher dann der Datenbankzugriff stattfindet. Damit könnte ich dann z.B. eine DLL für die Benutzung von Access, eine für MySQL usw. schreiben. Umgesetzt habe ich dies momentan versuchsweise mit einem COM-Server. Meine Frage an euch: Ist dies ein halbwegs brauchbarer Ansatz oder gibts es elegantere Verfahren, um die gewünschte Flexibilität der Datenbankanbindung zu realisieren? Schon einmal danke für die Antworten, Peter |
Re: Datenbankzugriff in DLL auslagern?
COM einzubinden halte ich für oversized. Sowas kann man mittels Bridge-Pattern auch in eine Exe integrieren.
|
Re: Datenbankzugriff in DLL auslagern?
Hallo,
ich nehme mal an, die AddUser sieht unter Access etwa so aus
Delphi-Quellcode:
D.h., bei jedem DB-Aufruf muss die Connection neu aufgebaut werden.
var
conn: Connection; ds: TDataSet; begin ... conn.Connected:= True; ... ds.Insert; ... conn.Connected:= False end; Performance-mäßig wohl ein Grauen (wenn man keinen Connection-Pool hat). Ich würde entweder 1. abstrakte DB-Klasse function AddUser(): Boolean virtual; abstract; pro DB eine Ableitung 2. interfaces benutzen Ich würde 1. benutzen Interfaces gefallen mir unter Delphi überhaupt nicht wegen diesem COM drumrum Heiko |
Re: Datenbankzugriff in DLL auslagern?
Um State halten zu können, sollte das Ganze schon bbject-Orient, und nicht nur plattgedrückte C-kompatible exportierte Funktionen, sein (Sonst gibt es das Problem, was Hoika ansprache, dass zu oft Verbidnungen geöffnet/geschlossen werden).
Aber wie ich in letzter Zeit immer und immer wieder geschrieben habe, lässt sich das mit Interfaces ganz gut lösen, gänzlich ohne COM. Gerade bei Datenbankschnittstellen könnte man so Teile der Logik zum Beispiel in .Net schreiben und dadurch auch Zugriff auf die unzähligen kostenlosen DataProvider bekommen. Du überlegst dir also was du tatsächlich auslagern musst, und das verpackst du dann in ein paar Interfaces. Die PlugIns registrieren dann solche "Datenzugriffsstrategien", wodurch deine App plötzlich ihre Daten aus verschiedenste Quellen aggregieren könnte. |
Re: Datenbankzugriff in DLL auslagern?
Zitat:
|
Re: Datenbankzugriff in DLL auslagern?
Ich glaube, so in der Art hatte ich das hier auch realisiert. Ich hab zwar den Assistenten für COM verwendet (Delphi 5), am Ende bestand dies aber nur aus der Projektdatei mit den zu exportieren Funktionieren und einer Unit, in der die realisierende Klasse definiert war. Zumindest hatte ich in diesem Beispiel keine TLB erstellt oder gar den COM-Server registriert, einfach DLL per LoadLibrary laden, Einsprungadresse der Funktion suchen und fertig.
Momentan versuche ich die Variante mit dem Bridge Pattern, das wäre auch ne Möglichkeit. |
Re: Datenbankzugriff in DLL auslagern?
Zitat:
* hcOPF * tiOPF * InstantObjects (alle Open Source) Diese können dann für Zugriff auf diverse Datenbanken (z.B. auch XML) konfiguriert werden, ohne dass Code in der Anwendung geändert werden muss. Vorbilder dieser Mapper sind Hibernate, NHibernate, ECO, Bold, EclipseLink, die alle sehr populär sind. Viele Grüße, |
Re: Datenbankzugriff in DLL auslagern?
Zitat:
Wenn das nicht mehr der Fall war, oder ich mich beim Evaluieren damals zu sehr auf das verbohrt habe, was ich aus .Net kannte, dann wäre ein ORM natürlich das Mittel der Wahl! |
Re: Datenbankzugriff in DLL auslagern?
Mit InstantObjects hatte ich zumindest schonmal eine Demo zusammengestellt, ging an sich recht einfach. Bei tiOPF häng ich noch in der Anleitung fest, da komm ich demnächst hoffentlich mal weiter. Gibt es speziell für tiOPF gute Tutorials?
|
Re: Datenbankzugriff in DLL auslagern?
Ich nutze Datenbank funktionen in einer DLL ohne Probleme. Was genau Du alles einbinden musst, hängt von deiner Datenbank-Componente ab.
Auch solltest Du Transaktionen und das Datenbank-Objekt selbst in der DLL haben, um es wirklich austauschbar zu machen. Ein beispiel mit Source kannst Du Dir ja bei mir auf der Seite runterladen (unter Downloads das Projekt TCA ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz