AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datenbankzugriff in DLL auslagern?
Thema durchsuchen
Ansicht
Themen-Optionen

Datenbankzugriff in DLL auslagern?

Ein Thema von Peter1981 · begonnen am 16. Dez 2009 · letzter Beitrag vom 16. Dez 2009
Antwort Antwort
Peter1981

Registriert seit: 16. Dez 2009
17 Beiträge
 
#1

Datenbankzugriff in DLL auslagern?

  Alt 16. Dez 2009, 12:55
Datenbank: Access, MySQL • Zugriff über: ADO
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Datenbankzugriff in DLL auslagern?

  Alt 16. Dez 2009, 13:18
COM einzubinden halte ich für oversized. Sowas kann man mittels Bridge-Pattern auch in eine Exe integrieren.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Datenbankzugriff in DLL auslagern?

  Alt 16. Dez 2009, 14:54
Hallo,

ich nehme mal an, die AddUser sieht unter Access etwa so aus

Delphi-Quellcode:
var
  conn: Connection;
  ds: TDataSet;
begin
 ...
  conn.Connected:= True;
 ...
  ds.Insert;
 ...
  conn.Connected:= False
end;
D.h., bei jedem DB-Aufruf muss die Connection neu aufgebaut werden.

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
Heiko
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Datenbankzugriff in DLL auslagern?

  Alt 16. Dez 2009, 15:05
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.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Datenbankzugriff in DLL auslagern?

  Alt 16. Dez 2009, 15:06
Zitat von hoika:
Interfaces gefallen mir unter Delphi überhaupt nicht wegen diesem COM drumrum
Mann kann auch Interfaces verwenden ohne COM. Wenn man die 1-2 möglichen Fallen vermeidet hat man hier auch sowas wie "Garbage Collection"
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Peter1981

Registriert seit: 16. Dez 2009
17 Beiträge
 
#6

Re: Datenbankzugriff in DLL auslagern?

  Alt 16. Dez 2009, 15:21
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.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Datenbankzugriff in DLL auslagern?

  Alt 16. Dez 2009, 15:26
Zitat von Peter1981:
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?
O/R Mapper verwenden:

* 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,
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Datenbankzugriff in DLL auslagern?

  Alt 16. Dez 2009, 15:55
Zitat von mjustin:
O/R Mapper verwenden
Ist schon ewig her, dass ich mir Delphi ORMs angesehen habe, aber wa sich damals sah war schon sehr frickelig.
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!
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Peter1981

Registriert seit: 16. Dez 2009
17 Beiträge
 
#9

Re: Datenbankzugriff in DLL auslagern?

  Alt 16. Dez 2009, 16:10
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?
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
679 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Datenbankzugriff in DLL auslagern?

  Alt 16. Dez 2009, 17:58
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 www.maf-components.com). In der Projektgruppe ist ein DLL Projekt namens RouterFileDB.dll, welches eine kleine selbstgeschriebene File-Datenbank nutzt, aber es liegen dort noch mehr Projekte für andere Zugriffsarten (Firebird/Interbase, MySQL, MSSQL). Ich nutze dazu eine selbstgeschriebene Bridge-Komponente, die den jeweiligen DAC (DataAccessComponent) mit meinen Komponenten verbindet. Dadurch kann ich durch einfaches Austauschen der Router.dll die benutze Datenbank dahinter austauschen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz