Access oder MySQL

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
mschnell
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

Beitrag von mschnell »

MmVisual hat geschrieben:ZEOS nutzt immer eine DLL
Klar. Und was macht es auf Linux und Mac ?
MmVisual hat geschrieben:Die DLL wird je nach DB Typ dynamisch geladen.
Ok. Damit kann Zeos dann vermutlich auch Tebellen anlegen und solche erweiterten Features benutzen, die nicht Serer-Typ unabhängig gehen.

Und wie bestimmt man, welche DLL ?

Haben diese DLLs alle dieselbe Schnittstelle zum User-Programm oder hat ZEOS Code für 735 verschiedene Server-Typen eingebaut ?

-Michael

MmVisual
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

Beitrag von MmVisual »

> Klar. Und was macht es auf Linux und Mac ?
Linux/Mac haben natürlich auch Libraries, das sind die .so Dateien.

Um Datenbanken und Tabellen an zu legen gibt es entsprechende SQL Befehle, das hat nichts mit ZEOS oder der DLL/SO zu tun.
z.B.:
CREATE DATABASE
CREATE TABLE

Diese SQL Befehle werden der DLL übergeben und diese baut wie auch immer (z.B über TCP/IP) eine Verbindung direkt zum Datenbankserver auf.

ZEOS erkennt in der Regel die Namen der DLL alleine - sofern man die nicht ändert - Ansonsten hat die TZConnection auch einen Parameter "LibraryLocation" mit dem man den Pfad/Dateiname auch manuell angeben kann.

Da keine extra Treiber benötigt werden, ist die Geschwindigkeit der Datenabfrage sehr schnell, es ist ein "Nativer Datenzugriff" auf die Datenbank.
Auch die Installation eines Clients ist entsprechend leicht, da man nur die zur Datenbank passende DLL mit geben/installieren muss.
Bei ADO oder ODBC müssen extra noch Einstellungen im Betriebssystem gemacht werden und für Linux ist das mehr oder weniger nur als Krücke verfügbar.
Früher mal hatte ich ADO in einer Delphi Anwendung drin, als ich dann auf diese Komponente umgestellt hatte, war die Darstellung der Daten doppelt so schnell. Daher nie wieder ADO, wenn es nicht unbedingt sein muss.

Außerdem: Auch wenn man ADO verwendet und unterschiedliche SQL Server unterstützen möchte, so muss man dennoch entsprechend dem Server auch die SQL Syntax schicken. Informieren Dich mal welchen SQL Befehl man ausführen muss, um eine Tabellenspalte um zu benennen, für MySQL, SQLite und MsSQL, dann weißt Du was ich meine.
EleLa - Elektronik Lagerverwaltung - www.elela.de

mschnell
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

Beitrag von mschnell »

MmVisual hat geschrieben:Linux/Mac haben natürlich auch Libraries, das sind die .so Dateien.
Klar. Gibt es für alle relevanten Datenbanken diese DLLs für alle Betriebssysteme und Architekturen (z.B. Linux auf ARM) ? Auch für JET ? Wo kommen sie her ? Vom Hersteller der Datenbank-Server oder vom ZEOS Team ?
Ein ARM/LInux - Programm, das auf eine JET-Datenbank zugreift , die auf einem Fileserver liegt, wäre eine sehr interessante Anwendung... :twisted: Geht das mit ZEOS ?
MmVisual hat geschrieben:Um Datenbanken und Tabellen an zu legen gibt es entsprechende SQL Befehle, das hat nichts mit ZEOS oder der DLL/SO zu tun.
z.B.:
CREATE DATABASE
CREATE TABLE
Klar, aber die Parameters sind (vermutlich) nicht "SQL-Stadard" sondern Datenbank-Server--Hersteller-spezifisch.
MmVisual hat geschrieben:Diese SQL Befehle werden der DLL übergeben und diese baut wie auch immer (z.B über TCP/IP) eine Verbindung direkt zum Datenbankserver auf.
Einfach um SQL-Befehle unverändert per TCP/IP an einen (Client-Server) SQL Datenbank-Server zu übertragen (und "normale" Ergebnisse zu empfangen) brauche ich keine vom Datenbank-Server-Typ abhängige DLL/so. Da würde eine allgemeine Funktionalität, die für alle diese Datenbanken identisch ist, ausreichen (genau darum geht ja diese Diskussion). Für JET brauche ich natürlich immer eine DLL/so, um die SQL-Funktionalität auf dem "Flat-File" überhaupt erst einmal zu erzeugen.
MmVisual hat geschrieben:ZEOS erkennt in der Regel die Namen der DLL alleine...
Dafür müsste dann das Betriebssystem aber irgendeinen Mechanismus zur Verfügung stellen. Ich vermute, das ist "OLE-DB".
MmVisual hat geschrieben:... sofern man die nicht ändert - Ansonsten hat die TZConnection auch einen Parameter "LibraryLocation" mit dem man den Pfad/Dateiname auch manuell angeben kann.
Das ist vermutlich mindestens dann notwendig, wenn mehrere "Konnektoren" für verschiedene Datenbank-Server-Typen installiert sind. (Naja, in Windows ist "Jet" ja fast immer installiert...)
MmVisual hat geschrieben:Bei ADO oder ODBC müssen extra noch Einstellungen im Betriebssystem gemacht werden und für Linux ist das mehr oder weniger nur als Krücke verfügbar.
Es geht also auch ohne ADO und ODBC !?!?! Wo kommen dann die besagten DLLs her ? Die müssen ja eine genormte und dokumentierte Schnittstelle haben, die ZEOS kennt (außer ZEOS hat den Code für 735 verschiedene "DLLs" ausprogrammiert). Das Ding müsste ja irgendeinen Namen haben ?!?!? ("ADO", "ODBC" und "OLE-DB" hatten wir schon, gibt es noch einen vierten Begriff, der dann eindeutig die Schnittstelle zur Datenbank-Zugriffs-DLL benennt , die ZEOS verwende t ? )
MmVisual hat geschrieben:Auch wenn man ADO verwendet und unterschiedliche SQL Server unterstützen möchte, so muss man dennoch entsprechend dem Server auch die SQL Syntax schicken.
(...sofern das kein "common Standard" SQL-Befehl ist.) Dann verstehe ich nicht, wozu ADO denn im Endeffekt gut ist (außer um das Programm langsamer zu machen :evil: ) .
MmVisual hat geschrieben:... um eine Tabellenspalte um zu benennen, für MySQL, SQLite und MsSQL, dann weißt Du was ich meine.
Das ist mir schon klar. Das ist eben kein "common Standard" SQL-Befehl. Tabellen umbenennen geht u.U. in manchen Datenbanken überhaupt nicht.

Gruß,
-Michael

MmVisual
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

Beitrag von MmVisual »

Wenn Du Datenbanken in Lazarus ansprechen willst, dann kann ZEOS diese:
  • ASA7, ASA8, ASA9, ASA12
    firebird-1.0, firebird-1.5, firebird-2.0, firebird-2.1, firebird-2.5
    firebirdd-1.5, firebirdd-2.0, firebirdd-2.1, firebirdd-2.5
    FreeTDS_MsSQL<=6.5, FreeTDS_MsSQL>=2005, FreeTDS_MsSQL-2000, FreeTDS_MsSQL-7.0
    FreeTDS_Sybase<10, FreeTDS_Sybase-10+
    interbase-6
    mssql
    mysql, mysql-4.1, mysql-5, mysqld-4.1, mysqld-5
    oracle, oracle-9i
    pooled.*
    postgresql, postgresql-7, postgresql-8, postgresql-9
    sqlite, sqlite-3
    sybase
Welche davon jetzt mit welchem Betriebssystem funktionieren ist erst mal davon abhängig ob die Firma/Entwickler der Datenbank für dieses Betriebssystem/Prozessor Architektur auch eine DLL/SO bereit stellt. Machen die das nicht, dann wird auch das ZEOS Team das nicht machen. Die bieten nur eine Schnittstelle zwischen der spezifischen DLL und dem eigenen Programm.

Das ganze hat mit ADO oder ODBC nichts zu tun. ADO ist was ganz was anderes.

Egal welche DB Komponente Du nimmst, das Lazarus eigene, ZEOS oder andere Komponenten. Schlussendlich sind ALLE abhängig von den Möglichkeiten des Datenbank-Herstellers.

>>>ZEOS erkennt in der Regel die Namen der DLL alleine...
>>Dafür müsste dann das Betriebssystem aber irgendeinen Mechanismus zur Verfügung stellen. Ich vermute, das ist "OLE-DB".
Nein, der Name der DLL ist fest einprogrammiert. ZEOS braucht nichts vom Betriebssystem um eine Datenbank zu erkennen. Genau deshalb geht das auch mit vielen Betriebssystemen relativ einfach. Hingegen ADO/ODBC ist vom Betriebssystem maßgeblich abhängig. Somit muss die DLL/SO entweder im im Suchpfad vom System drin sein oder man muss das manuell selbst einprogrammieren mit dem Parameter TZConnection.LibraryLocation.

Das ganze JET-Datenbank System kenne ich nicht so gut. Ich nutze hauptsächlich MySQL/SQLite und die gehen mit so gut wie allen Betriebssystemen. Ich mag Dinge nicht, die nur von Microsoft abhängig sind.
EleLa - Elektronik Lagerverwaltung - www.elela.de

mschnell
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

Beitrag von mschnell »

MmVisual hat geschrieben:Wenn Du Datenbanken in Lazarus ansprechen willst,...
Will ich im Moment gar nicht. Ich will nur das Prinzip verstehen.
MmVisual hat geschrieben:dann kann ZEOS diese: ...
Eine beeindruckende Liste.

Kann ZEOS tatsächlich nicht mit JET-Datenbanken umgehen ? Das wäre aber ein sehr großer Nachteil. Zumindest auf Windows wäre ich davon ausgegangen.

hier http://www.delphipraxis.net/22650-hilfe ... ccess.html steht:

1. Also du nimmst eine ZConnection und plazierst sie z.B. auf deinem Formular!
2. Unter Protocol wählst Du aus "ado"
3. Bei Database auf die ... klicken. Neues Fenster geht auf.
4. Bei Provider "Microsoft Jet 4.0 OLE DB Provider wählen"
5. Bei Verbindung auf ... klicken und gewünschte .mdb raussuchen!

Scheint also doch möglich zu sein (via ADO).

MmVisual hat geschrieben:Welche davon jetzt mit welchem Betriebssystem funktionieren ist erst mal davon abhängig ob die Firma/Entwickler der Datenbank für dieses Betriebssystem/Prozessor Architektur auch eine DLL/SO bereit stellt.
Klar. Aber da ja bestimmt kein Hersteller mit der Anfrage "Mach mir eine ZEOS DLL" anfangen kann, was für eine DLL/so ist das dann ?
MmVisual hat geschrieben:Machen die das nicht, dann wird auch das ZEOS Team das nicht machen.
Es gibt aber eine Anleitung: http://zeos.firmos.at/kb.php?mode=article&k=10 . Als irgendwer scheint sowas zu tun.... Es sieht da so aus als müsse ZEOS tatsächlich dezidierten Code für jede einzelne verwendbare Datenbank bereits in die Library eingebaut haben und ein eventuelle gemeinsame "Normierung" der verschiedenen DLLs/so nicht explizit berücksichtigt wird. :(

MmVisual hat geschrieben:Das ganze hat mit ADO oder ODBC nichts zu tun.
... sondern besser :D . Das hatte ich aus Deinen bisherigen Ausführungen bereits verstanden. Und wie bereits gefragt: was ist denn dann ?

-Michael

MmVisual
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

Beitrag von MmVisual »

>Klar. Aber da ja bestimmt kein Hersteller mit der Anfrage "Mach mir eine ZEOS DLL" anfangen kann, was für eine DLL/so ist das dann ?

Der Hersteller der DB macht keine Zeos DLL. Sondern der Hersteller macht seine eigene Client DLL und dokumentiert die DLL Schnittstelle. Das Zeos-Team kann lesen und implementiert diese DLL Schnittstelle. Der Datenbank Hersteller hat keine Ahnung von Zeos, weiß aber wie man eine Dokumentation schreibt. Wenn die DLL einen Bug drin hat, dann muss den der Hersteller raus machen. Diese DLL wird auch nicht nur von Zeos verwendet, sondern auch von vielen anderen Herstellern von Software (z.B. andere Komponente).

>2. Unter Protocol wählst Du aus "ado"
Kann man nicht auswählen.

Ich empfehle Zeos, wenn man eine praktische Anwendung vor hat zu programmieren, die hinterher auch funktioniert.
>> Will ich im Moment gar nicht. Ich will nur das Prinzip verstehen.
Was verstehst Du denn jetzt nicht? Dass ich abrate von JET / ADO / ODBC und eine andere DB empfehle? :twisted:
EleLa - Elektronik Lagerverwaltung - www.elela.de

gocher
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

Beitrag von gocher »

Unter ADO braucht man nichts für einen Zugriff zu konfigurieren, die ADO Implementierung unter Delphi fand ich allerdings auch nicht perfekt! Übrigens das Ergebnis wird als Recordset-Object geliefert in diesem Recordset werden die Felder über das Field-Object abgebildet, also alles objektorientiert.
Kleines Beispiel gefällig (z.B. mit Access, übrigens für MSSQL und andere DB's muss nur der Connectionstring geädert werden):

Code: Alles auswählen

 
program ADOTest;
{$APPTYPE CONSOLE}
{$mode objfpc}{$H+}
uses Classes, SysUtils, ComObj, Variants;
 
function IIF(b: boolean; sTrue: string; sFalse: string = ''): string;
begin if b then result := sTrue else result := sFalse; end;
 
const
  adOpenForwardOnly = $00000000; 
  adLockReadOnly = $00000001;
var
  cn, rs: OleVariant;
  i:integer;
begin
//connect db
  cn := CreateOleObject('ADODB.Connection');
  cn.Open('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\test.mdb');
//  cn.Open('Provider=MSDASQL.1;Extended Properties="Driver={MySQL ODBC 3.51 Driver};Server=localhost;Port=3306;Database=test;User=root;Option=3;"'); //MySQL
//  cn.Open('Provider=SQLOLEDB.1;Password=mypass;User ID=root;Initial Catalog=test;Data Source=localhost;'); //MSSQL
//select
  rs := CreateOleObject('ADODB.Recordset');
  rs.Open('SELECT * FROM tblTable', cn, adOpenForwardOnly, adLockReadOnly);
//list fieldnames
  for i:=0 to rs.Fields.count-1 do
  Write(IIF(i>0, ';') + rs.Fields[i].name);
  WriteLn();
//list values
  while not rs.eof do
  begin
    for i:=0 to rs.Fields.count-1 do
    Write(IIF(i>0, ';') + VarToStr(rs.Fields[i].Value));
    WriteLn();
    rs.MoveNext;
  end;
//close recordset
  rs.Close;
  rs := unassigned;
//close connection;
  cn.Close;
  cn := unassigned;
end.
Für dieses Beispiel ist nicht einmal der Import der Type Library von ADO erforderlich, da ich für dieses Beispiel einfach mal auf OLE Objects aufgesetzt habe, mal so kurz zum Test, ist zwar nicht komfortabel aber geht auch :shock: !
Ach so ADO steht seit Windows 2000; Windows 98; Windows ME; Windows NT zur Verfügung, bei allen Späteren Windows-Versionen ist es bereits im System Vorhanden.

Übrigens habe ich bei Zeos gerade im Verzeichnis /src/dbc/ ZDbcAdo.pas und ein paar weitere Dateien mit Ado im Namen gefunden, also dürfte sich wohl die Aussage darüber was schneller ist erledigen, da Zeos wohl selbst über Ado auf einige Datenbanken unter Windows zugreift.
Zuletzt geändert von gocher am Mi 27. Mär 2013, 23:29, insgesamt 3-mal geändert.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

mschnell
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

Beitrag von mschnell »

MmVisual hat geschrieben:Was verstehst Du denn jetzt nicht? Dass ich abrate von JET / ADO / ODBC und eine andere DB empfehle? :twisted:
Das verstehe ich und werde es mir merken :D

Was ich nicht verstehe ist, warum der "SQL-Standard" über TCP/IP nicht einfach direkt verwendet wird - und man damit Hersteller, Betriebssystem und Architektur-unabhängig und mit voller Performance auf jeden beliebigen SQL Datenbank-Server zugreifen kann (natürlich nur mit den im Standard enthaltenen Möglichkeiten), sondern dass da immer irgendwelche Zwischen-Schichten involviert sind.

-Michael

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Access oder MySQL

Beitrag von hde »

Sorry, ich will keinem zu Nahe treten, aber ich hab hier das Gefühl, es reden viele über Datenbanken die über Datenbanken genau sowenig wissen, wie Milchkühe übers Eierlegen.

Alle Begriffe gehen hier völlig durcheinander und es werden Äpfel mit Birnen und Pflaumen verglichen.

Jeder Datenbankhersteller liefert eine API/DLL mit, über die direkt von der jeweiligen Programmsprache aus auf die Datenbank zugegriffen werden kann, aber nicht so einfach mit Pascal sondern mit C++. Wer in C++ ein Prog schreibt für eine spezielle Datenbank braucht weder ODBC noch ADO und auch nicht Zeos. Man bindet einfach die DLL ein und greift direkt zu.

Viele aber nicht alle Hersteller liefern auch ODBC-Treiber mit, die den Zugriff weitgehend vereinfachen, aber nur für Windows und es erfordert Einstellungen im OS per ODBC-Administrator auf jedem Client der zugreifen soll. ADO ist etwas ähnliches. Man baucht aber dann den Zugriff von PAscal auf ODBC usw. also Zeos, die Lazarus-Tools oder de BDE bei Delphi.

Beides verlangsamt den Zugriff weil zusätzliche Interpretationen notendig sind, hin und hercodiert wird ud die Umwandlung von Ansi auf UTF8 und zurück muss man ggf. selbst machen.

Zeos bietet für alle Datenbanken die MmVisual genannt hat den direkten Zugriff von Lazarus aus auf die jeweilige API/DLL des Datenbankhersteller und liefert tatsächlich für jede dieser Datenbanken Anpassungen mit, außerdem für verschiedene Betriebssysteme und codiert gleichzeitig die diversen Codes um (UTF8, usw.). Auf den Clients sind KEINE Einstellung im OS notwenig, der Zugriff ist schnell und so direkt wie es möglich ist.

Auch die Lazarus-Tools kapseln die API/DLL des Herstellers, nur nicht so einheitlich.

Für mich sind ODBC, ADo u.ä. alles Krampflösungen die man wenn immer möglich vermeiden sollte.

Nur nebenbei: SQL ist zwar bedingt genormt, aber es gibt trotzdem Abweichungen. Bei Zeos kann man einige Datenbanken einfach im Protokoll umstellen, bei einzelnen ist aber trotzdem ggf. ein Änderung Code nötig.

XDEV3 liefert deshalb eine eigene Schicht mit die auch dies vereinheitlicht.

hde

mschnell
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

Beitrag von mschnell »

hde hat geschrieben:Nur nebenbei: SQL ist zwar bedingt genormt, aber es gibt trotzdem Abweichungen.
Da scheint aber eine ganze Menge Hersteller-unabhänging genormt und verwendbar zu sein:
http://de.wikipedia.org/wiki/SQL:
SQL ist eine Datenbanksprache zur Definition von Datenstrukturen in relationalen Datenbanken sowie zum Bearbeiten (Einfügen, Verändern, Löschen) und Abfragen von darauf basierenden Datenbeständen.
Sprachstandard

Ziel der Standardisierung ist es, Anwendungsprogramme so erstellen zu können, dass sie vom verwendeten Datenbanksystem unabhängig sind. Heutige Datenbanksysteme implementieren mehr oder weniger große Teile des Sprachstandards. Darüber hinaus stellen sie oftmals herstellerspezifische Erweiterungen bereit, die nicht dem Standard-Sprachumfang entsprechen. In der Vor-SQL-Zeit strebte man die Portabilität von Anwendungen über die kompatible Schnittstelle an.

Der Standard besteht insgesamt aus 9 einzelnen Publikationen[3]:

ISO/IEC 9075-1:2011 Part 1: Framework (SQL/Framework)
ISO/IEC 9075-2:2011 Part 2: Foundation (SQL/Foundation)
ISO/IEC 9075-3:2008 Part 3: Call-Level Interface (SQL/CLI)
ISO/IEC 9075-4:2011 Part 4: Persistent Stored Modules (SQL/PSM)
ISO/IEC 9075-9:2008 Part 9: Management of External Data (SQL/MED)
ISO/IEC 9075-10:2008 Part 10: Object Language Bindings (SQL/OLB)
ISO/IEC 9075-11:2011 Part 11: Information and Definition Schemas (SQL/Schemata)
ISO/IEC 9075-13:2008 Part 13: SQL Routines and Types Using the Java TM Programming Language (SQL/JRT)
ISO/IEC 9075-14:2011 Part 14: XML-Related Specifications (SQL/XML)

und wird durch 5 bzw. 6 ebenfalls standardisierte SQL multimedia and application packages ergänzt:

ISO/IEC 13249-1:2007 Part 1: Framework
ISO/IEC 13249-2:2003 Part 2: Full-Text
ISO/IEC 13249-3:2011 Part 3: Spatial
ISO/IEC 13249-5:2003 Part 5: Still image
ISO/IEC 13249-6:2006 Part 6: Data mining
ISO/IEC 13249-8:xxxx Part 8: Metadata registries (MDR) (noch nicht verabschiedet)
hde hat geschrieben:XDEV3 liefert deshalb eine eigene Schicht mit die auch dies vereinheitlicht.
Ah, so heißt das Ding also ! (ich gebe zu dass ich davon noch nie gehört habe.)

-Michael

gocher
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

Beitrag von gocher »

hde hat geschrieben:Sorry, ich will keinem zu Nahe treten, aber ich hab hier das Gefühl, es reden viele über Datenbanken die über Datenbanken genau sowenig wissen, wie Milchkühe übers Eierlegen.
Sorry, ich möchte Dir auch nicht zu nahe treten aber wir sprechen alle von Zugriffen auf Datenbanken, wir haben nur andere Kenntnisstände, es sind wohl immer einige die etwas mehr und einige die etwas weniger wissen, das ist nun mal so in einem Forum. Und genau das ist der Grund für ein Forum!
hde hat geschrieben:Jeder Datenbankhersteller liefert eine API/DLL mit, über die direkt von der jeweiligen Programmsprache aus auf die Datenbank zugegriffen werden kann, aber nicht so einfach mit Pascal sondern mit C++. Wer in C++ ein Prog schreibt für eine spezielle Datenbank braucht weder ODBC noch ADO und auch nicht Zeos. Man bindet einfach die DLL ein und greift direkt zu.
Das macht man als C++ Entwickler auch nur wenn man blöd ist, dann ist man ja abhängig von einer Datenbank! Außerdem gibt es kaum eine API die nicht auch in Pascal anzusprechen ist, oft ist sogar nur ein einfacher Import erforderlich oder eine Konvertierung der C-Header-Files und man muss nicht einmal selbst Hand anlegen.
hde hat geschrieben:Viele aber nicht alle Hersteller liefern auch ODBC-Treiber mit, die den Zugriff weitgehend vereinfachen, aber nur für Windows und es erfordert Einstellungen im OS per ODBC-Administrator auf jedem Client der zugreifen soll. ADO ist etwas ähnliches. Man baucht aber dann den Zugriff von PAscal auf ODBC usw. also Zeos, die Lazarus-Tools oder de BDE bei Delphi.
Wie ich auch schon erwähnt habe benötigt man für ADO nur einen Connectionstring die Benutzung des ODBC-Administrator ist nicht erforderlich. Von ADO hast Du wohl keine Ahnung und mein Beispiel enthält alles für einen Zugriff (CSV-Export), keine einzige Datenbank-Komponente ist unter Pascal erforderlich nur (Windows, ActiveX, Classes, Variants).
hde hat geschrieben:Zeos bietet für alle Datenbanken die MmVisual genannt hat den direkten Zugriff von Lazarus aus auf die jeweilige API/DLL des Datenbankhersteller und liefert tatsächlich für jede dieser Datenbanken Anpassungen mit, außerdem für verschiedene Betriebssysteme und codiert gleichzeitig die diversen Codes um (UTF8, usw.). Auf den Clients sind KEINE Einstellung im OS notwenig, der Zugriff ist schnell und so direkt wie es möglich ist.
hde
Zeos ist sicher eine Tolle Sache ich habe mir die Sourcen gerade mal angesehen und nach ca. 5Minuten wusste ich schon, was ich für Dich noch einmal wiederhole falls Du es überlesen hast, Zeos nutzt wohl auch die ADO Schnittstelle, die Implementierung erinnert mich ein Wenig an die von Delphi. (siehe Verzeichnis /src/dbc/)

Wir sind auf die Anbindung / Zugriff auf Datenbanken erst gekommen um uns nicht direkt für die "richtige Datenbank" festlegen zu müssen, für alte Hasen ist die richtige Wahl der passenden Datenbank sicher kein Problem, aber für Neulinge ist es die längste Praline der Welt.

Und nun noch einmal was von einer Milchkuh, ich lege jetzt schon seit ca. 12 Jahren Eier mit ADO. ADO ist nicht langsam, zumindest nicht langsamer als Zeos, doch ADO ist durch ActiveX für alle Programmiersprachen die eine OLE-Schnittstelle haben und das haben selbst alle gängigen Scriptsprachen unter Windows, nutzbar.

Nun noch was an Michael TCP/IP ist ein Protokoll zum Datentransfer, die Kommunikation funktioniert also Client-Server, was natürlich bei vielen Serverdatenbanken möglich ist, für den Zugriff auf die Daten wird also ein Client (Treiber) benötigt, der die Befehle und die Rückgabe zur Verfügung stellt. Da leider fast jede Datenbank einen etwas anderen Weg geht gibt es davon einige, die unter Windows von der ADO Schnittstelle gekapselt werden und über diese Schnittstelle ist ein vereinheitlichter Zugriff möglich. Zeos vereinheitlicht nun über die eigene Schnittstelle, das bedeutet wenn man nun von Windows nach Linux wechselt geht das auch, nur nicht unbedingt mit der selben Datenbank. Denn wenn man unter Windows einen MSSQL Server zur Verfügung hat, gibt es den unter Linux nicht. Ob ein Zugriff über Zeos->ADO->ODBC->Datenbank schneller ist als über ADO->ODBC->Datenbank ist bezweifele ich, denn dann müsste Zeos schon optimierend sein, also was für dumme Entwickler, ein Schritt mehr geht selten schneller.

Ich hoffe Ihr anderen im Forum versteht mich nicht falsch, jemand der flexibel sein möchte, also auch zwischen Windows und Linux, der ist bei ADO falsch, aber der sollte sich auch eine passende Datenbank auswählen die unter Windows und Linux existiert denn sonst hilft Zeos auch nichts (wie z.B. bei MSSQL & Access).

Viel Spaß bei der Wahl!
Zuletzt geändert von gocher am Mo 25. Mär 2013, 08:28, insgesamt 1-mal geändert.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Access oder MySQL

Beitrag von hde »

Solange hier behauptet wird Zeos greife überer ADO zu macht eine Diskussion keinen Sinn. Glaube nur selbst an deine Märchen.
hde

gocher
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

Beitrag von gocher »

Ok, dann hat Zeos halt nur Units zum Zugriff über ADO und nutzt diese nicht:
  • ZeosLib\src\plain\ZPlainAdo.pas (übrigens diese Datei entspricht dem Import der Type Library)
  • ZeosLib\src\plain\ZPlainAdoDriver.pas
  • ZeosLib\src\dbc\ZDbcAdo.pas
  • ZeosLIb\src\dbc\ZDbcAdoMetadata.pas
  • ZeosLib\src\dbc\ZDbcAdoResultSet.pas
  • ZeosLib\src\dbc\ZDbcAdoStatement.pas
  • ZeosLib\src\dbc\ZDbcAdoUtils.pas
  • ZeosLib\test\bugreport\ZTestBugCompADO.pas
und zum Erstellen eine SQL speziell für ADO:
  • ZeosLib\database\populate_any_ado.sql
oder habe ich eine falsche Komponente erwischt: http://svn.code.sf.net/p/zeoslib/code-0/trunk dann stell doch bitte den LInk oder die Subversion URL ein.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

MmVisual
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

Beitrag von MmVisual »

hde hat recht. Zeos nutzt direkt die Client DLL / SO. Und wo ist jetzt die ADO DLL dazwischen?

Außerdem kann Zeos mit/über dem FreeTDS Treiber kommunizieren und somit sind MsSQL Zugriffe auch unter Linux möglich!

Wenn Du meinst, die Geschwindigkeit sei über ADO schneller, dann mache doch mal einen Test:
- DB mit 10000 Datensätzen
- SELECT Abfrage
- Query.Last um alle Datensätze zu lesen
- Mit Deiner ADO Komponente
- Mit ZEOS
- Mit der Lazarus eigenen Komponente


Jedenfalls finde ich dieses komische "cn := CreateOleObject('ADODB.Connection');" sehr unpraktisch. Wenn man nun ein cn. im Editor eintippt, dann erscheinen alle möglichen Dinge in der Auswahlliste, aber niemals die, die mit dem ADO Objekt zusammen passen. Also man muss alle Methoden vom OLE Objekt auswendig wissen. Und das soll eine tolle und einfache Programmierung sein :?: Na dann viel Spaß mit ADO / OLE Objekten.
Zuletzt geändert von MmVisual am Mo 25. Mär 2013, 09:07, insgesamt 2-mal geändert.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Access oder MySQL

Beitrag von Christian »

Irgendwo habt ihr alle recht aber doch auch keiner :)

Zeos nutzt nämlich das was der Programmierer vorgibt.
Man kann mit Zeos ADO oder ODBC oder Direktzugriff nutzen (wenn der für die entsprechende DB unterstützt wird)
Für MSSQL z.b.
kann man entweder direkt über ntwdblib.dll zugreifen (Windows only und unterstützt nur alle Features bis MSSQL 2000 funktioniert aber auch mit aktuelleren Servern)
oder direkt über freetds.dll (Windows,Linux,MacOS volle Features)
oder über ADO (etwas langsamer da ADO Treiber noch dazwischen ist, Windows only)
oder über ODBC (einiges langsamer das OSBC Treiber dazwischen und oft schlecht optimiert) (Im Fall von MSSQL Windows Only, oft gibts aber auch Datenbanktreiber für Linux und MacOS)
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten