Migration von BDE-Anwendungen (FireDAC)
Nach oben zu Migrieren von BDE-Anwendungen nach FireDAC
In diesem Beispiel wird Schritt für Schritt gezeigt, wie Sie die klassische Embarcadero-Delphi-Demoanwendung "MastApp" nach FireDAC und auf ein InterBase-DBMS migrieren.
Inhaltsverzeichnis
Schritt 1
Wechseln Sie zum Ordner C:\Users\Public\Documents\Embarcadero\Studio\20.0\Samples\Object Pascal\Database\FireDAC\Tool\reFind\BDE2FDMigration\Demo
. Dieser Ordner enthält die Quelldateien der MastApp-Anwendung. Erstellen Sie ein neues Unterverzeichnis, und nennen Sie es FireDAC_MastApp. Kopieren Sie dann die MastApp-Quelldateien in das neue Verzeichnis, damit die Originalquelldateien erhalten bleiben.
Schritt 2
Öffnen Sie ein Befehlsfenster, und wechseln Sie in das Verzeichnis "FireDAC_MastApp", oder verwenden Sie dazu Ihren bevorzugten Verzeichnismanager, z. B. FAR. Führen Sie das RAD Studio-Tool reFind aus, um die BDE-Begriffe durch die entsprechenden FireDAC-Begriffe zu ersetzen:
C:\Program Files (x86)\Embarcadero\Studio\20.0\bin\reFind.exe *.pas *.dfm /X:C:\Users\Public\Documents\Embarcadero\Studio\20.0\Samples\Object Pascal\Database\FireDAC\Tool\reFind\BDE2FDMigration\FireDAC_Migrate_BDE.txt.
Schritt 3
Erstellen Sie mit dem FireDAC-Explorer eine FireDAC-Verbindungsdefinition. Konfigurieren Sie dann die Verbindungsdefinitionsparameter. Im Folgenden finden Sie die einfachste Verbindungsdefinition für "MastApp":
[MASTSQL]
DriverID=IB
Protocol=TCPIP
Server=127.0.0.1
DataBase=C:\MastApp.GDB
User_Name=sysdba
SQLDialect=3
CharacterSet=UTF8
ExtendedMetadata=True
Hinweis: Dies setzt voraus, dass Sie die InterBase-Datenbank C:\MastApp.GDB erstellt und die DBDEMOS-Datenbank (Paradox) in die Datenbank C:\MastApp.GDB geladen haben. Dafür können Sie Clever Components InterBase DataPump verwenden.
Schritt 4
Fügen Sie der Anwendung einen DBMS-spezifischen FireDAC-Treiber hinzu. Fügen Sie Ihrem Projekt eine der FireDAC.Phys.[DBMS-Treiber-ID]-Units hinzu. Wenn Sie z. B. InterBase verwenden, fügen Sie dem Projekt FireDAC.Phys.IB hinzu. Fügen Sie anschließend Ihrem Projekt die Unit FireDAC.VCLUI.Wait hinzu:
program Mastapp;
uses
Forms,
FireDAC.Phys.IB,
FireDAC.VCLUI.Wait,
MAIN in 'MAIN.PAS' {MainForm},
// …
Schritt 5
Öffnen Sie nun die Datei "DataMod.dfm" in einem Texteditor. Konfigurieren Sie die TFDConnection-Komponente im Datenmodul. Setzen Sie ConnectionDefName auf eine InterBase-Verbindungsdefinition. Ändern Sie auch den Benutzernamen und das Passwort entsprechend. Das Ergebnis könnte in etwa folgendermaßen aussehen:
Params.Strings = (
'ConnectionDef=MASTSQL'
'User_Name=sysdba'
'Password=masterkey')
Schritt 6
Die InterBase-SQLLink- und FireDAC-InterBase-Treiber verwenden unterschiedliche Datentypzuordnungen. Dies müssen Sie anpassen, damit die FireDAC-Typzuordnung mit der BDE kompatibel ist. Ansonsten müssen alle persistenten Felder neu erstellt werden. Zum Einrichten der Datentypzuordnung muss die Sammlungseigenschaft TFDConnection.FormatOptions.MapRules ausgefüllt werden. Dies wird im folgenden Code in der Datei "DataMod.DFM" vorgenommen:
object Database: TFDConnection
// …
FormatOptions.OwnMapRules = True
FormatOptions.MapRules = <
item
PrecMax = 10
PrecMin = 0
ScaleMax = 0
ScaleMin = 0
SourceDataType = dtFmtBCD
TargetDataType = dtInt32
end
item
SourceDataType = dtFmtBCD
TargetDataType = dtDouble
end
item
SourceDataType = dtDateTimeStamp
TargetDataType = dtDateTime
end>
// …
end
Setzen Sie außerdem die Eigenschaft FormatOptions.StrsTrim auf False, weil der Vorgabewert für diese Eigenschaft nicht mit der BDE kompatibel ist.
Schritt 7
FireDAC unterstützt keine Desktop-DBs, wie Paradox oder dBase. Daher muss der gesamte Code für Desktop-DBs (Paradox, dBase) aus der Anwendung entfernt werden:
- Die Methode TMastData.UseLocalData in "DataMod.pas".
- Die Methode TMainForm.ViewLocalClick in "Main.pas".
Schritt 8
Nun muss der Quellcode der Anwendung an InterBase angepasst werden:
- Ersetzen Sie in "Main.pas" in der Methode TMainForm.ViewRemoteClick den String "(Local Interbase)" durch "(InterBase)".
- Entfernen Sie die Ereignisbehandlungsroutine TMainForm.ViewMenuClick aus "Main.pas".
- Entfernen Sie die Methode TMastData.DataDirectory aus "DataMod.pas".
- Die Anwendung erstellt eine DB-Verbindungsdefinition, falls diese nicht vorhanden ist. Ändern Sie deshalb in "DataMod.pas" TMastData.UseRemoteData in:
procedure TMastData.UseRemoteData;
var
Params: TStringList;
begin
{ See if the ConnectionDef exists. If not, add it. }
if not FDManager.IsConnectionDef('MASTSQL') then
begin
Params := TStringList.create;
try
Params.Values['Protocol'] := 'TCPIP';
Params.Values['Server'] := '127.0.0.1';
Params.Values['DataBase'] := 'C:\MastApp.GDB';
Params.Values['User_Name'] := 'sysdba';
Params.Values['SQLDialect'] := '3';
Params.Values['CharacterSet'] := 'UTF8';
Params.Values['ExtendedMetadata'] := 'True';
FDManager.AddConnectionDef('MASTSQL', 'IB', Params);
finally
Params.Free;
end;
end;
SetDatabaseConnectionDef('MASTSQL');
end;
- Sie müssen nun die von der Anwendung verwendeten SQL-Anweisungen anpassen. In DataMod wird bei der Abfrage "CustByLastInvQuery" das Schlüsselwort DESCENDING verwendet, für InterBase muss dies aber DESC lauten.