Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Fragen zu Entwicklung eines TDataSet Descendant (https://www.delphipraxis.net/99264-fragen-zu-entwicklung-eines-tdataset-descendant.html)

anse 9. Sep 2007 17:16

Datenbank: MySQL • Zugriff über: TDataSet

Fragen zu Entwicklung eines TDataSet Descendant
 
Ich möchte einen simplen Descendant / Abkömmling von TDataset für MySQL entwickeln. Ziel ist es diese Komponente mit den bekannten visuellen DB-Komponenten wie z.B. TDBGrid, TDBMemo etc. nutzen zu können. Im Netz findet man so eine Komponente nur in der ZeosLib (TZQuery). Die ist aber leider alles andere als simpel, schlank und fehlerfrei. Wenn diese Komponente denn mal fertig ist, wird sie auf jeden Fall OpenSource :) Na jedenfalls habe ich dazu bisher 2 Komponenten halb fertig:

Delphi-Quellcode:
TMySQLConnection = class(TObject)
TMySQLQuery = class(TDataSet)
Die TMySQLConnection wird von TMySQLQuery als Property verwendet und kümmert sich um den Verbindungskram, was bereits wunderbar läuft (mithilfe der mysql.pas von Matthias Fichtner).

Die TMySQLQuery enthält bereits grundlegende Eigenschaften und soll am Ende ähnlich wie ein TQuery zu benutzen sein:

Delphi-Quellcode:
TMySQLQuery = class(TDataSet)
    private
      FSQL: TStrings;
      FConnection: TMySQLConnection;
      FRowsAffected: Int64;
      procedure SetQuery(Value: TStrings);
      procedure SetConnection(Value: TMySQLConnection);
    protected
      function GetConnection: TMySQLConnection;
    public
      constructor Create(AOwner: TComponent); override;
      procedure ExecSQL;
      property RowsAffected: Int64 read FRowsAffected;
    published
      property SQL: TStrings read FSQL write SetQuery;
      property Connection: TMySQLConnection read FConnection write SetConnection;
  end;
Das ist alles was bisher funktioniert.

Jetzt fehlt mir bei TMySQLQuery das Wissen, um die Schnittstelle zu TDataSource zu implementieren. Der Compiler nennt mir immerhin 6 abstrakte Methoden, die ich noch zu überschreiben habe:
Zitat:

W1020 constructing instance of 'TMySQLQuery' containing abstract method 'TDataSet.GetRecord'
W1020 constructing instance of 'TMySQLQuery' containing abstract method 'TDataSet.InternalClose'
W1020 constructing instance of 'TMySQLQuery' containing abstract method 'TDataSet.InternalHandleException'
W1020 constructing instance of 'TMySQLQuery' containing abstract method 'TDataSet.InternalInitFieldDefs'
W1020 constructing instance of 'TMySQLQuery' containing abstract method 'TDataSet.InternalOpen'
W1020 constructing instance of 'TMySQLQuery' containing abstract method 'TDataSet.IsCursorOpen'
Ich habe mir die entsprechenden Methoden in TBDEDataSet (TQuery) und TZAbstractRODataset (ZeosLib) angesehen und verstehe nur Bahnhof.

Kennt jemand FAQs, Starthilfen oder sonstwas mit denen ich mich in dieses Thema "reinlesen" kann?

Hansa 10. Sep 2007 05:35

Re: Fragen zu Entwicklung eines TDataSet Descendant
 
Gibt Dir das hier nicht selber zu denken :

Zitat:

Zitat von anse
Ich möchte einen simplen Descendant / Abkömmling von TDataset für MySQL entwickeln.

Zitat:

Zitat von anse
Die ist aber leider alles andere als simpel, schlank und fehlerfrei. Wenn diese Komponente denn mal fertig ist, wird sie auf jeden Fall OpenSource :)

in 2050 unter Hyper-Vista XXL, oder was ?

Zitat:

Zitat von anse
Jetzt fehlt mir bei TMySQLQuery das Wissen, um die Schnittstelle zu TDataSource zu implementieren.

Zitat:

Zitat von anse
Ich habe mir die entsprechenden Methoden in TBDEDataSet (TQuery) und TZAbstractRODataset (ZeosLib) angesehen und verstehe nur Bahnhof.

Warum sind die Personal-Versionen immer ohne DB-Komponenten ? Oder die Turbos nur mit BDE oder sonstigem halberzigem Kram zu haben (nicht mal IBX) ? Warum gibt es keine kostenlosen vernünftigen kostenlosen DB-Komponenten ? Zeos sind vielleicht kostenlos, aber wer benutzt denn die vernünftig ? :mrgreen:

Da das aber wohl alles egal ist 8) : Stichwort ist TDataLink -> F1. Baue damit alles selber zusammen. :stupid:

uligerhardt 10. Sep 2007 07:35

Re: Fragen zu Entwicklung eines TDataSet Descendant
 
Zitat:

Zitat von anse
Kennt jemand FAQs, Starthilfen oder sonstwas mit denen ich mich in dieses Thema "reinlesen" kann?

Vielleicht hilft dir das.

Uli.

Hansa 10. Sep 2007 23:22

Re: Fragen zu Entwicklung eines TDataSet Descendant
 
Ging unter : Marco Cantu kann dir sicher helfen. Der hat auch das mit dem Datalink gesagt. Glaube 50 Seiten beschäftigen sich mit den Grundlagen. Dann kommen noch mehrere hundert dazu. Die insgesamt 1000 englischen Seiten für 45 EUR sind durchaus zu empfehlen. :zwinker:

anse 11. Sep 2007 09:04

Re: Fragen zu Entwicklung eines TDataSet Descendant
 
Vielen Dank für die wertvollen Tips. Der Artikel von GExperts zu "Custom Datasets" ist sehr gut. Habe noch einen weiteren Artikel gefunden, der etwas weniger informativ ist, dafür aber den ersten um ein paar Details ergänzt: Create your own Custom Dataset.

Beide Artikel gehen auf die Implementierung der Prozeduren ein, die man in einer TDataSet-Ableitung überschreiben muß.

Und wie wahr:
Zitat:

Zitat von GExperts
Many programmers are turned off by having to manipulate pointers and move memory

:lol:

uligerhardt 11. Sep 2007 09:17

Re: Fragen zu Entwicklung eines TDataSet Descendant
 
Zitat:

Zitat von anse
Und wie wahr:
Zitat:

Zitat von GExperts
Many programmers are turned off by having to manipulate pointers and move memory

:lol:

Das ist doch das einfachste am Programmieren. Erinnert mich etwas an das Rechnen mit diesen bunten Holzstäbchen in der Grundschule. :)


http://www.siscompar.com/loja/images...ire%203057.JPG

anse 14. Sep 2007 09:38

Re: Fragen zu Entwicklung eines TDataSet Descendant
 
Der erste Schritt und mehr ist bereits getan - habe das Grundgerüst inklusive vieler Methoden bereits lauffähig. Bei Interesse siehe hier:
http://fisheye.heidisql.com/trunk/extra/mysql_dataset

Vor allem die TMySQLConnection funktioniert schon ganz passabel. Außer das Herstellen einer normalen Verbindung kann sie bereits:
  • Versions-abhängige Server-Features in einem Set bereitstellen, um zu vermeiden, daß die Client-Anwenung Sachen machen muß wie
    Delphi-Quellcode:
    if Connection.ServerVersion >= 40001 then ... else ...
    Stattdessen macht man einfach
    Delphi-Quellcode:
    if cpTruncateTable in Connection.Capabilities then ... else ...
  • Escaping von Strings mithilfe von mysql_real_escape_string
  • Properties wie ThreadId, CharacterSet, LastError sind auch drin.

Die mysql_api.pas habe ich aus Teilen der mysql.pas von Matthias Fichtner und des Pendants in der ZeosLib zusammengebastelt, sodaß diese jetzt auch auf dem aktuellen Stand für die 5er MySQL ist.

Nur mit dem Holzstäbchen verschieben für die internen Methoden der TMySQLQuery(TDataSet) tue ich mich echt schwer - genauer gesagt mit den Methoden GetFieldData, SetFieldData, GetRecordSize u.ä. . Wird also noch seine Zeit brauchen.

Falls natürlich jemand Interesse hat, an dieser OpenSource Komponente mitzuarbeiten, der ist herzlich eingeladen :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 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