AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Native DB Ansteuerung (ohne BDE?)
Thema durchsuchen
Ansicht
Themen-Optionen

Native DB Ansteuerung (ohne BDE?)

Ein Thema von Phoenix · begonnen am 5. Jul 2002 · letzter Beitrag vom 10. Jul 2002
Antwort Antwort
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#1

Native DB Ansteuerung (ohne BDE?)

  Alt 5. Jul 2002, 15:55
Hi Leute,

eine Frage, die vielleicht trivial aussieht, es aber sicher nicht ist:

Wie kann ich verschiedene Datenbanken Native mit meinem Programm OHNE den Umweg über BDE / ODBC zu machen ansteuern?

Ich denke, es müsste da freie (open source?) Komponenten geben, habe aber in der Richtung noch nichts passendes gefunden

Was mir vorschwebt ist eine Komponente zu schreiben, der ich über bestimmte Parameter sage, welche DB sie anzusteuern hat, und das Programm nur noch über diese eine Komponente direkt mit der DB kommuniziert. Somit wäre es also für mich möglich eine Anwendung zu schreiben, der es egal ist, ob eine BDE installiert ist und ob da nun irgendwo MySQL oder Interbase oder Oracle oder MS SQL Server läuft.

Hat da jemand vielleicht ein- oder zwei Links für mich?

Vielen Dank,

Sebastian
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Alfons_G

Registriert seit: 7. Jun 2002
Ort: München
296 Beiträge
 
Delphi 2007 Architect
 
#2
  Alt 5. Jul 2002, 17:12

Um eine Datenbank ohne einen dazwischengeschalteten Treiber anzusteuern, muss man wissen, was für eine Datenbank es ist. Da in diesem Fall keine BDE oder dergleichen die Übersetzungsarbeit abnimmt, benötigst Du in diesem Fall Komponenten, welche direkt auf die jeweilige DB zugreifen.

Es gibt Freewarekomponenten für dBase, Paradox, mySQL, Interbase, Access, Oracle und etliche weitere Datenbanken. Du musst dann für alle in Frage kommenden DBs die passenden Komponenten mit einbinden.
Um Resourcen zu sparen, kannst Du für jede Datenbank ein eigernes Datenmodul verwenden und diese Module aus der Liste der automatisch erstellten Formulare rausnehmen. Beim Programmstart fragst Du die verwendete Datenbank ab, dann erzeugst Du das entsprechende Datenmodul. Alternativ kannst Du natürlich auch die Komponenten dynamisch zur Laufzeit erzeugen.

Alle SQL- und sonstige Manipulationsanweisungen sollst Du dann auch in eigene Funktionen auslagern. Dann gibt Dein Hauptprogramm nur vor, was gemacht wird, wie es gemacht wird, darum kümmert sich die entsprechende Routine. Diese weist Du dann je nach Datenbank zu
Code:
btnInsertOnClick := Daten.MSAccessInsert;
...
Alfons Grünewald



Alfons Grünewald
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#3
  Alt 5. Jul 2002, 20:30
Huhu,

Zitat von Alfons_G:
Es gibt Freewarekomponenten für dBase, Paradox, mySQL, Interbase, Access, Oracle und etliche weitere Datenbanken. Du musst dann für alle in Frage kommenden DBs die passenden Komponenten mit einbinden.
Sowas hab ich mir schon gedacht, aber ich habe leider noch keine solchen Komponenten im Netz gefunden. Wahrscheinlich bin ich einfach nur blind oder ich suche an den falschen Stellen

Hat mir da jemand vielleicht links zu? Oder noch Hinweise WO ich am geschicktesten nach solchen Kompos suche?

Zitat von Alfons_G:
Um Resourcen zu sparen, kannst Du für jede Datenbank ein eigenes Datenmodul verwenden und diese Module aus der Liste der automatisch erstellten Formulare rausnehmen. Beim Programmstart fragst Du die verwendete Datenbank ab, dann erzeugst Du das entsprechende Datenmodul. Alternativ kannst Du natürlich auch die Komponenten dynamisch zur Laufzeit erzeugen.
Ich würde versuchen, die Komponenten, (so sie denn Open Source sind) so weit es geht auf eine gleiche Basis herunterbrechen, so das ich letztlich nur noch ein globales Objekt TApplication.theDataBase habe auf dem dann die Anwendung arbeitet.

Sollten Statementoptimierungen wirklich pro Datenbanktyp nötig sein kann ich den ja dann über dieses Objekt abfragen und ggf. wirklich jeweils DB - Optimierte Funktionen zuweisen.

Die Einstellungen für welche DB usw. würde ich in einer "Art" BDE-Alias auf Registry-Ebene ablegen. So kann man eben verschiedene DB's konfigurieren und auf alle per Auswahl zugreifen. Ich will erstmal weniger eine DB-Anwendung programmieren als überhaupt erstmal in die BD-Materie einsteigen und erstmal den SQL-Explorer nachprogrammieren.

In diesen Sinne bis denne,

Sebastian
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Alfons_G

Registriert seit: 7. Jun 2002
Ort: München
296 Beiträge
 
Delphi 2007 Architect
 
#4
  Alt 5. Jul 2002, 21:52
Komponenten für den Direktzugriff auf Datenbanken findest Du z.B. bei Torry und bei VCL Components (für Interbase) und VCL Components (für mySQL).
Mit dem Versuch, diese Komponenten an sich funktional anzugleichen, dürftest Du Dir aber etwas viel vorgenommen haben.

Einfacher ist es sicher, die Aufrufe für die einzelnen DBs jeweils in eigenen Funktionen zu kapseln, um eine einheitliche Schnittstelle nach aussen zu haben.

Alfons Grünewald



Alfons Grünewald
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.3 Rio
 
#5
  Alt 7. Jul 2002, 10:15
Hi,

für diesen Zweck hat Borland in Delphi 6 / Kylix die dbExpress eingeführt. Diese soll eine Schnittstelle für SQL-Datenbanken (Interbase, MySQL,...) So einen Treiber kann man auch selbst erstellen, doch das wird vermutlich etwas schwieriger. Dabei verwendet aber dbExpress eine vergleichbare Methode wie die BDE für den Zugriff, auf spezielle Dinge einer Datenbank kann man damit nicht eingehen. Bleibt nur der Weg, der von Alfons_G beschrieben wurde.

Grüße
Lemmy
  Mit Zitat antworten Zitat
Klabautermann

Registriert seit: 22. Jun 2002
Ort: Münster (NRW)
63 Beiträge
 
#6

Re: Native DB Ansteuerung (ohne BDE?)

  Alt 10. Jul 2002, 15:12
Hallo,

Zitat von Phoenix:
Was mir vorschwebt ist eine Komponente zu schreiben, der ich über bestimmte Parameter sage, welche DB sie anzusteuern hat, und das Programm nur noch über diese eine Komponente direkt mit der DB kommuniziert. Somit wäre es also für mich möglich eine Anwendung zu schreiben, der es egal ist, ob eine BDE installiert ist und ob da nun irgendwo MySQL oder Interbase oder Oracle oder MS SQL Server läuft.
was du da beschreibst ist eine der Grundideen hinter ADO. Du konnectes über den ADO-Treiber auf einen Nativen Datenbanktreiber, welcher natürlich von DB-Hersteller zur verfügung gestellt werden muss. Danach arbeitest du nur noch mit ADO.
Leider funtioniert das in der Praxis nicht so gut, da die einzelnen Datenbanken sich in Leistungsmerkmalen und SQL-Dialekten zu sehr unterscheiden.

Dennoch ist ADO glaube ich Technick, mit der du momentan an dichtesten an deine Wunschvorstellung kommst.

Gruß
Klabautermann
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#7
  Alt 10. Jul 2002, 16:06
Huhu,

eine Statement-Optimierung muss logischerweise beim Generieren des Statements passieren. Das wird sicher nicht in der Funktionalität des Programms sondern im geplanten DBAL (Database abstraction layer) passieren, der zusammen mit der Direct Access - Komponente arbeitet.

ADO ist hier wieder zu sehr auf den Zugriff basierend, als das man hier dann noch sauber zwischen Datenbank und Funktionalität trennen könnte.

Die Baustelle sieht folgendermassen aus und ist in Schichten organisiert:

- Funktionalität arbeitet auf:
- Tabellenobjekt (ggf. verjoined mit anderen Tabellenobjekten): greift zu auf
- Funktionen: Statementoptimierung auf DB-Ebene: verwendet zum ausführen
- Direktzugriff auf die DB - verwendet
- Die geplante Komponente.

Das Ding wird also schon was grösseres
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  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 08:07 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