AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

BDE -> FIBPlus

Ein Thema von hoika · begonnen am 4. Aug 2009 · letzter Beitrag vom 4. Aug 2009
Antwort Antwort
hoika

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

BDE -> FIBPlus

  Alt 4. Aug 2009, 15:06
Datenbank: Firebird • Version: 1.5 • Zugriff über: BDE/FIBPlus
Hallo,

um ein grossen Programm (~600k DB-Code) umzustellen,
bin ich wie folgt vorgegangen.

Ich muss noch dazu sagen, dass das Programm dabei immer noch weiterentwickelt
und ausgeliefert wird.

Noch ein Vorwort.
Da ich mit Interfaces schon mal böse zusammengestossen bin,
verwende ich das Ableiten.

- Definition einer generischen TBaseQuery
alle Methoden/Properties (Open/Close/SQL) sind virtual abstract

- Ableitung einer BDE-Query
es gibt eine interne Query (TQuery)
die abstrakten Methoden werden an diese interne Query einfach weitergeleitet

- Entfernen jeglichen DB-Codes aus den Forms
unit DBTables entfernen, gucken wo es klemmt

- Ersatz aller TTable durch TBaseQuery in den einzelnen
Umschreiben des TTable-Codes auf
-> Heidenarbeit ;(

So !!!!

Das Erzeugen der Queries erfolgt so

Delphi-Quellcode:
function CreateQuery(const theDBEngineType: Integer): TBaseQuery;
begin
  Result:= NIL;

  case theDBEngineType of
    C_EngineType_Bde:
      begin
        Result:= TQuery_Bde.Create(NIL);
      end;
    C_EngineType_FIBPLUS:
      begin
        Result:= TQuery_FIBPlus.Create(NIL);
      end;
  end;
end; { CreateQuery }
theDBEngineType habe ich erst mal per IFDEF gesetzt


Ich kann jetzt also das Programm als BDE-Version kompilieren,
ohne im Code direkt die BDE zu benutzen.


Jetzt kommt der nächste Schritt .
Transaktionen !!!

Wie das in FIBPlus funktioniert, ist schon klar.

Ich muss aber immer noch den BDE-Code warten,
solange nicht alles funktioniert.

Der Einfachheit halber nehmen wir mal an,
ich brauche erst mal nur ein Transaktion (wie bei der BDE).
Aufrüsten kann man ja immer noch

Jetzt meine Frage.

Ich benutze stellenweise das AutoCommit der BDE,
will auch nicht alle Stellen abändern, um über TDataBase.Cmmit zu arbeiten.

Die TpFIBQuery hat ja auch so ein AutoCommit,
wirkt das genauso ?

Wie bilde ich das sonst am besten nach ?

Also
Query.ExecSQL ohne StartTransaction -> AutoCommit
Query.ExecSQL mit StartTransaction -> kein AutoCommit
(ExecSQL ist ein Bsp, ich weiss es heisst etwas anders)


Ausserdem wird bei der BDE ja per
Query.DataBaseName:= DataBase.DataBaseName das ganze ja per Namen gemacht.

Da ich stellenweise mehrere DB's zur gleichen Zeit abfrage
(verschiedene Queries), müsste ich das ähnlich machen.


Hat jemand eine paar Tips,
wie ich das mit den Transaktionen machen soll ?


Danke


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

Re: BDE -> FIBPlus

  Alt 4. Aug 2009, 15:24
Ich würde noch weiter gehen und das Brückenmuster umsetzen. Habens bei unserer App (1,4 Mio. Sourcecodezeilen) auch eingebaut und haben den DBMS-Spezifischen Teil jeweils in 1-2 Units zentriert.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
hoika

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

Query

  Alt 4. Aug 2009, 15:45
Hallo,

genau das benutze ich doch,
siehe meine CreateQuery-Methode


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Query

  Alt 4. Aug 2009, 15:53
Zitat von hoika:
genau das benutze ich doch,
siehe meine CreateQuery-Methode
Nicht ganz. Dir fehlt noch die Abstraktion-Klasse. Die implementierungs-Klassen werden von dieser Klasse verwendet und werden nicht zum Endkunden gebracht. Deine Implementierung ist eher eine Fabrikmethode
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
hoika

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

Re: BDE -> FIBPlus

  Alt 4. Aug 2009, 15:55
Hallo,

egal, Hauptsache es funktioniert


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: BDE -> FIBPlus

  Alt 4. Aug 2009, 15:59
Du könntest aber deine restlichen Sachen wie Transaktion auch in der Abstraktionsschnittstelle verstecken.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
hoika

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

Re: BDE -> FIBPlus

  Alt 4. Aug 2009, 17:46
Hallo,

ja, das habe ich auch vor !

Das soll ähnlich laufen, wie jetzt bei der BDE.

Der (interne) Code soll sich ja möglichst nicht ändern.

Die Frage ist halt, was mit dem autocommit bei FIBPlus ist.


Heiko
Heiko
  Mit Zitat antworten Zitat
hoika

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

Re: BDE -> FIBPlus

  Alt 4. Aug 2009, 18:38
Hallo,

hm,

vielleicht habe ch das mit dem bridge-pattern doch nicht so verstanden.
Jetzt steh ich dumm da ;(

Meine beiden von der abstrakten TBaseQuery abgeleiteten Klassen
brauchen ein FieldByName, umim Code (uiui) z.B. ein FieldByName().AsInteger
zu erlauben.

Jetzt ist die Rückgabe bei TQuery (BDE) aber ein TField
bei TFIBQuery vom Typ TFIBXSQLVAR.

Beide Klassen haben dann aber die entsprechenden AsXXX properties.

Das bringt mir aber nix ;(

Was mache ich denn nu ?
Muss ich etwa einen generische TBaseField-Klasse nehmen,
die erst mal die benötigten AsXXX abstract definiert ?
Das kann doch alles nicht war sein !!!

UIB : gar kein FieldByName
FIBPlus : anderer Typ ;(


*help* ;(


Heiko
PS: Den Link habe ich mir angesehen, Ruby als Quellcode, sind die denn total XXX
Heiko
  Mit Zitat antworten Zitat
hoika

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

Re: BDE -> FIBPlus

  Alt 4. Aug 2009, 19:09
Hallo,

erledigt ...
Naja, nicht wirklich ;(

Ich schau mir das jetzt bei tiOPF an.

Wie ich befürchtet habe,
wird dort das ganze TDataSet noch mal nachgebaut.

Vielleicht nehme ich ja das.

Schade um die FIBPlus-Euros.


Heiko
Heiko
  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 03:00 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