Access oder MySQL
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: Access oder MySQL
Am besten die ZEOS Komponente nehmen, die geht auch mit Delphi und beherrscht durch einfaches Umparametrieren viele Datenbanken, z.B. MySQL, SQLite, MsSQL, Firebird, PostgreSQL, ASA, ... Und die Entwickler sind aktiv am Projekt und es wird ständig erweitert!
Ich nutze die schon seit Jahren und die funktioniert gut.
Ich nutze die schon seit Jahren und die funktioniert gut.
EleLa - Elektronik Lagerverwaltung - www.elela.de
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Access oder MySQL
Den Sinn des Satzes verstehe ich nicht ganz. Wenn die Datenbank einen ADO - Treiber zur Verfügung stellt braucht die Programmiersprache für den Zugriff nur die ADO Schnittstelle zu benutzen. Sie braucht von der Beschaffenheit des Datenbank-Programms nichts zu wissen. Nur für die Erstellung der Datenbank und der Tabels braucht man eine spezifische Kommunikation mit dem Server. Dafür kann man aber oft die jeweils mitgelieferten Bedien-Programme und Scripts verwenden.gocher hat geschrieben:Unter Delphi gibt es zahlreiche Implementierungen der ADO-Schnittstelle unter Windows...,
Ich habe z.B. ein Programm (nicht von mir) auf eine Postgres Datenbank zugreifen lassen, das von Postgres überhaupt nichts wusste (es war in der Doku nur von MSSQL die Rede). Dafür musste ich natürlich die Datenbank mit der Postgres Oberfläche erst einmal erstellen.
In Windows ist der SQL-Zugriff mit ADO also ziemlich gut normiert. Keine Ahnung, wie das in Linux aussieht.
-Michael
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: Access oder MySQL
Soweit ich weiß existiert ActiveX Data Objects (ADO) nur unter Windows,
C:\Program Files\Common Files\System\ado\msado15.dll genutzt wird im Regelfall C:\WINDOWS\system32\stdole2.tlb.
Die ADO-Schnittstelle ist sehr vereinfacht ausgedrückt ein Wrapper der den Zugriff auf Datenbankschnittstellen vereinheitlicht und so kann über eine Connection (http://www.connectionstrings.com/) auf unterschiedlichste Datenbanktreiber zugegriffen werden. Die ADO-Schnittstelle stellt einige Objekte zur Verfügung wie z.B. Connection, Recordset, Command und Fields.
Wenn man über Lazarus Werkzeuge -> Import Type Libray C:\Program Files\Common Files\System\ado\msado15.dll importiert wird eine ca. 4700 Zeilen lange Interface Datei angelegt über die bereits ein Zugriff möglich ist aber halt nicht sehr komfortabel.
Natürlich kann man auch mit OLE (CreateOleObject) und OleVariant arbeiten was aber noch unsauberer ist.
Das was ich mit "Implementierung der ADO-Schnittstelle" meinte ist eine saubere objektorientierte typensichere (also ohne Variant) Schnittstelle, die trotz dem nicht zu komplex ist und auch vielleicht noch andere schöne Möglichkeiten aus ADOX, JRO ... mit einbezieht um z.B. Eine Datenbank zu komprimieren und zu Reparieren usw.
C:\Program Files\Common Files\System\ado\msado15.dll genutzt wird im Regelfall C:\WINDOWS\system32\stdole2.tlb.
Die ADO-Schnittstelle ist sehr vereinfacht ausgedrückt ein Wrapper der den Zugriff auf Datenbankschnittstellen vereinheitlicht und so kann über eine Connection (http://www.connectionstrings.com/) auf unterschiedlichste Datenbanktreiber zugegriffen werden. Die ADO-Schnittstelle stellt einige Objekte zur Verfügung wie z.B. Connection, Recordset, Command und Fields.
Wenn man über Lazarus Werkzeuge -> Import Type Libray C:\Program Files\Common Files\System\ado\msado15.dll importiert wird eine ca. 4700 Zeilen lange Interface Datei angelegt über die bereits ein Zugriff möglich ist aber halt nicht sehr komfortabel.
Natürlich kann man auch mit OLE (CreateOleObject) und OleVariant arbeiten was aber noch unsauberer ist.
Das was ich mit "Implementierung der ADO-Schnittstelle" meinte ist eine saubere objektorientierte typensichere (also ohne Variant) Schnittstelle, die trotz dem nicht zu komplex ist und auch vielleicht noch andere schöne Möglichkeiten aus ADOX, JRO ... mit einbezieht um z.B. Eine Datenbank zu komprimieren und zu Reparieren usw.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Access oder MySQL
OK. Das sollte aber nur auf ADO zugreifen und damit unabhängig von der Art der Datenbank (Datei-basiert/Jet, MSSQL, MySQL, Postgres, ...) sein.gocher hat geschrieben:Das was ich mit "Implementierung der ADO-Schnittstelle" meinte ist eine saubere objektorientierte typensichere (also ohne Variant) Schnittstelle, die trotz dem nicht zu komplex ist
... und vor allem Datenbanken Erzeugen und Tabellen in ihnen definieren.gocher hat geschrieben:...und auch vielleicht noch andere schöne Möglichkeiten aus ADOX, JRO ... mit einbezieht um z.B. Eine Datenbank zu komprimieren und zu Reparieren usw.
Damit ist das natürlich abhängig von der Art der Datenbank und es muss eine Variante für jeden unterstützten Datenbank-Typ erstellt werden.
-Michael
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: Access oder MySQL
Also Tabellen erzeuge ich immer noch mit dem SQL Befehl CREATE TABLE natürlich variieren die Befehle ein wenig, alleine schon durch die Feldtypen, aber das sehe ich nicht als so kritisch an. Datenbanken zu erstellen inklusive Einrichtung der Rechte etc. ist ab einer bestimmten Komplexität sowieso problematisch, bei Access erzeuge ich schon mal eine neue Datenbank über ADOX da macht es noch Sinn.
Komprimieren geht auch noch über JRO
Funktionen losgelöst aus meiner Klasse
ADOX: C:\Programme\Gemeinsame Dateien\System\ado\msADOX.dll
JRO: C:\Programme\Gemeinsame Dateien\System\ado\msjro.dll
erforderlich!
Code: Alles auswählen
procedure CreateDB(const Filename: string);
var cat: ADOX._Catalog;
begin
try
cat := CreateADOObject(CLASS_Catalog) AS ADOX._Catalog;
cat.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + Filename + ';');
cat := nil;
except
on e: Exception do
raise Exception.Create(e.Message);
end;
end;
Code: Alles auswählen
procedure CompactDB(const Filename: string);
var
jro: JetEngine;
FilenameNeu:string;
begin
try
FilenameNeu := ChangeFileExt(Filename, '~.mdb');
jro := CreateADOObject(CLASS_JetEngine) AS JetEngine;
jro.CompactDatabase('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + Filename + ';',
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + FilenameNeu + ';');
if FileExists(FilenameNeu) then
begin
DeleteFile(PChar(Filename));
RenameFile(FilenameNeu, Filename);
end;
jro := nil;
except
DeleteFile(PChar(filenameNeu));
end;
end;
ADOX: C:\Programme\Gemeinsame Dateien\System\ado\msADOX.dll
JRO: C:\Programme\Gemeinsame Dateien\System\ado\msjro.dll
erforderlich!
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Access oder MySQL
Alles gut und schön.
Die Frage ist nur, welche Funktionalität die jeweilige ADO DLL in welcher Art realisiert.
Der SQL Zugriff auf Daten mit "normalen" Typen ist in jedem Fall immer gleich. Das Programm braucht also nicht zu wissen, welche Datenbank angeschlossen ist.
Die SQL-Befehle zum Erzeugen von Tabellen sind - soweit ich weiß - nicht genormt.
-Michael
Die Frage ist nur, welche Funktionalität die jeweilige ADO DLL in welcher Art realisiert.
Der SQL Zugriff auf Daten mit "normalen" Typen ist in jedem Fall immer gleich. Das Programm braucht also nicht zu wissen, welche Datenbank angeschlossen ist.
Die SQL-Befehle zum Erzeugen von Tabellen sind - soweit ich weiß - nicht genormt.
-Michael
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Access oder MySQL
Mich würde schon interessieren, ob es so eine "Standard-SQL-Daten-Zugriffs-Methodik" in Linux auch gibt.
Für .NET habe ich das gefunden:
http://blogs.msdn.com/b/adonet/archive/ ... linux.aspx
Ist das Thema hier "ODBC" ? http://www.easysoft.com/developer/inter ... linux.html
-Michael
Für .NET habe ich das gefunden:
http://blogs.msdn.com/b/adonet/archive/ ... linux.aspx
Ist das Thema hier "ODBC" ? http://www.easysoft.com/developer/inter ... linux.html
-Michael
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Access oder MySQL
Für Client-Server-Datenbanken ist ja eigentlich sogar das SQL-Protokoll (via TCP/IP) für den normalen Daten-Zugriff Hersteller-unabhängig genormt. Demzufolge sollte es noch nicht einmal nötig sein, auf dem Rechner einen zum Datenbank-Server passenden ADO-Treiber zu installieren. Eigentlich könnte das Programm auch ohne ADO direkt mit einem Socket SQL-Verkehr über TCP/IP machen. Das wäre dann auch Plattform-unabgängig. Ich vermute, die ADO-Schicht ist hauptsächlich erfunden worden, um Programmen einen SQL-konformen Zugriff zur Datei-basierten Microsoft JET Datenbank zu ermöglichen.mschnell hat geschrieben:Der SQL Zugriff auf Daten mit "normalen" Typen ist in jedem Fall immer gleich. Das Programm braucht also nicht zu wissen, welche Datenbank angeschlossen ist.
Besser wäre gewesen, eine JET-Server-DLL mit TCP-IP-(Server) Schnittstelle zu verwenden. Aber in Windows ist es - anders als in Linux - ja nicht üblich (und nicht performant) Programme Rechner-Intern über TCP/IP zu koppeln.
Vielleicht gibt es für Linux ja sogar so ein JET-Server-Ding ?!?!?
-Michael
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: Access oder MySQL
Zur Klarstellung der Datenbankzugriff mit ADO (ActiveX Data Objects) geschieht über den OLE DB-Provider unter Verwendung der ODBC-Schnittstelle, ADO an sich ist kein Treiber sondern ein ActiveX Objekt wie der Name schon sagt!
Zuletzt geändert von gocher am So 24. Mär 2013, 19:54, insgesamt 1-mal geändert.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: Access oder MySQL
Die ZEOS Komponente kann auch den FreeTDS Treiber verwenden. Damit wäre eine Verbindung zu einem MsSQL Server möglich.
EleLa - Elektronik Lagerverwaltung - www.elela.de
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Access oder MySQL
Danke für den Hinweis. Ich weiß damit zwar nicht mehr, was ADO eigentlich ist, aber ich meinte natürlich tatsächlich die Schnittstelle, die ein Programm verwenden kann und die heißt dann wohl "OLE DB-Provider".gocher hat geschrieben:Zur Klarstellung der Datenbankzugriff mit ADO geschieht über den OLE DB-Provider unter Verwendung der ODBC-Schnittstelle, ADO an sich ist kein Treiber!
Jedenfalls finde ich es eine blöde Idee diese "OLE DB-Provider" Schnittstelle zu erfinden, statt einfach SQL über TCP/IP auch lokal zu verwenden. (Ursprünglich ist SQL ja so gedacht, dass ein Programm über einen Socket einen Datenbank-Server anspricht. Dann braucht man weder OLE, noch ODBC noch ADO.)
-Michael
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Access oder MySQL
Und wie gehst du mit der Antwort um ? DIe kann sehr komplex ausfallen. Vom Fehler über einzelne Werte bis zu mehrer inhomogenen Datenmengen ist alles möglichmschnell hat geschrieben:Jedenfalls finde ich es eine blöde Idee diese "OLE DB-Provider" Schnittstelle zu erfinden, statt einfach SQL über TCP/IP auch lokal zu verwenden. (Ursprünglich ist SQL ja so gedacht, dass ein Programm über einen Socket einen Datenbank-Server anspricht. Dann braucht man weder OLE, noch ODBC noch ADO.)
-Michael

Zu Infos über ADO siehe auch auf der englischen Doku von Microsoft
ADO greift über OLE DB zu und stellt eigentlich eine Abstraktionsschicht für die verschiedenen OLE DB dar. Ähnlich wie das Konzept von der legendären BDE (Borland Database Engine). Der aktuelle Vergleich wäre ZEOS. Nachdem ADO von MS kommt ist es natürlich auf Windows abgestimmt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Access oder MySQL
Das dekodieren der Antworten ist doch ohnehin Aufgabe des Programmes (z.B. der ZEOS-Library) und nicht der OLE-db-Provider oder ADO Schicht. Oder täusche ich mich da ?af0815 hat geschrieben:Und wie gehst du mit der Antwort um ? DIe kann sehr komplex ausfallen. Vom Fehler über einzelne Werte bis zu mehrer inhomogenen Datenmengen ist alles möglichWie fragst du Metadaten ab ?
Die Syntax der Antworten sollte doch im SQL-Standard entsprechend definiert sein, solange keine Nicht-Standardmäßigen Erweiterungen verwendet werden, die bestimmte Datenbank-Server implementiert haben (aber sicherlich nicht JET)
Ich hoffe doch, dass alles, was man üblicherweise braucht vom SQL (über TCP/IP) -Standard Hersteller- und OS- unabhängig abgedeckt ist, neben den von Dir genannten "Antworten" auch Trigger/Events, Stored Procedures, Transaktionen, ...
-Michael
Zuletzt geändert von mschnell am Sa 23. Mär 2013, 14:09, insgesamt 3-mal geändert.
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Access oder MySQL
Verstehe ich nicht "OLE DB" und "ADO" sind doch außerhalb des User-Programms in Windows installiert, während die ZEOS Library in das User-Programm eingebaut wird. Welche Schnittstelle Richtung Datenbank-Server verwendet denn ZEOS ? Doch wohl nicht tatsächlich direkt einen TCP/IP Socket ? (Ich hatte vermutet, es verwendet zumindest auf Windows ADO / OLE DB.)af0815 hat geschrieben:ADO greift über OLE DB zu und stellt eigentlich eine Abstraktionsschicht für die verschiedenen OLE DB dar. Ähnlich wie das Konzept von der legendären BDE (Borland Database Engine). Der aktuelle Vergleich wäre ZEOS. Nachdem ADO von MS kommt ist es natürlich auf Windows abgestimmt.
-Michael
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: Access oder MySQL
>Welche Schnittstelle Richtung Datenbank-Server verwendet denn ZEOS ?
ZEOS nutzt immer eine DLL und hat keinen eigenen TCP/IP Treiber. Wenn man MySQL nehmen will, so benötigt ZEOS die Client DLL diese DB. So auch bei MsSQL oder PostgrSQL oder SQLite. Die DLL wird je nach DB Typ dynamisch geladen.
ZEOS nutzt immer eine DLL und hat keinen eigenen TCP/IP Treiber. Wenn man MySQL nehmen will, so benötigt ZEOS die Client DLL diese DB. So auch bei MsSQL oder PostgrSQL oder SQLite. Die DLL wird je nach DB Typ dynamisch geladen.
EleLa - Elektronik Lagerverwaltung - www.elela.de