Zusätzliche Migrationshinweise (FireDAC)
Nach oben zu Migrieren von BDE-Anwendungen nach FireDAC
Inhaltsverzeichnis
Hinweis 1
Einige Eigenschaften müssen komplett entfernt werden, weil in FireDAC dazu keine Entsprechungen vorhanden sind:
- SessionName muss komplett entfernt werden. Gehen Sie dabei aber sehr sorgfältig vor, weil in Ihrer Anwendung mehrere, gleichnamige Verbindungen in unterschiedlichen Sitzungen verwendet werden könnten.
- PrivateDir muss komplett entfernt werden.
Hinweis: Dies wird vom Migrationsskript "FireDAC_Migrate_BDE.txt" ausgeführt.
Hinweis 2
Obwohl in FireDAC die Entsprechung "TFDTable" für die "TTable"-BDE-Komponente vorhanden ist, sollten Sie gleich bei der Migration alle "TTable"-Komponenten durch "TFDQuery"-Komponenten ersetzen.
Hinweis 3
BDE-Anwendungen mit persistenten Feldern müssen zusätzlich angepasst werden. Die BDE verwendet weder die Eigenschaften Origin und ProviderFlags für persistente Felder noch das Abfrage-DB-Dictionary oder stellt diese bereit, um die eindeutigen Kennzeichnungsfelder abzurufen. FireDAC verwendet die Eigenschaften Origin und ProviderFlags für persistente Felder und stellt diese Eigenschaften auch bereit. Das Migrationsskript "FireDAC_Migrate_BDE.txt" entfernt alle TField.Origin-Werte aus DFM-Dateien. Wenn Origin leer ist (wie in einer BDE-Anwendung), verwendet FireDAC den Feldnamen. Im Vorgabewert von ProviderFlags ist pfInKey jedoch nicht enthalten, und FireDAC fragt die DB nicht nach Primärschlüsselfeldern ab. FireDAC kann daher die eindeutigen Kennzeichnungsfelder nicht abrufen, und Sie müssen eine der folgenden Aktionen ausführen:
- Neuerstellen von persistenten Feldern.
- Manuelles Anpassen von ProviderFlags.
- Manuelles Festlegen von UpdateOptions.KeyFields.
Hinweis 4
Codefragmente, wie:
Screen.Cursor := crSQLWait;
try
......
finally
Screen.Cursor := crDefault;
end;
Sollten durch Folgendes ersetzt werden:
uses
FireDAC.Stan.Factory, FireDAC.UI.Intf;
......
var
oWait: IFDGUIxWaitCursor;
......
FDCreateInterface(IFDGUIxWaitCursor, oWait);
oWait.StartWait;
try
......
finally
oWait.StopWait;
end;
Hinweis 5
FireDAC verfügt über keine Entsprechung für die BDE-API. Daher muss sämtlicher Code, in dem die BDE-API direkt verwendet wird, mit der FireDAC-API neu programmiert werden. Es gibt keine direkte Lösung.
Hinweis 6
Für viele Produkte von Fremdherstellern, wie mehrschichtige oder Berichtserstellungsbibliotheken, ist eine DAC-Adapter-Unit erforderlich. Bitte erfragen Sie beim jeweiligen Hersteller, wie Sie einen Adapter erhalten.
Hinweis 7
EDBEngineError ist die BDE-spezifische Exception-Klasse. FireDAC enthält eine Entsprechung, nämlich die Klasse EFDDBEngineException. Bei der Behandlung von BDE-Exceptions ermitteln Programmierer mit der Eigenschaft ErrorCode den Fehlertyp. FireDAC verfügt über einen Eigenschaftstyp, der einen Aufzählungswert zurückgibt.
Ändern Sie zum Beispiel den folgenden Code:
if E is EDBEngineError then
begin
case EDBEngineError(E).Errors[0].ErrorCode of
DBIERR_KEYVIOL: MetaBaseDBError(SMb_DataSetInvalidPKeyValue, E);
end;
in:
if E is EFDDBEngineException then
begin
case EFDDBEngineException(E).Kind of
ekUKViolated: MetaBaseDBError(SMb_DataSetInvalidPKeyValue, E);
end;
Hinweis 8
Die Komponenten TBatchMove und TFDBatchMove unterscheiden sich in vielerlei Hinsicht. Code, in dem die Komponente TBatchMove verwendet wird, muss überarbeitet werden.
Hinweis 9
Das Ereignis TFDConnection.OnLogin ist nicht mit der Parameterliste des Ereignisses TDatabase.OnLogin kompatibel. Daher müssen Sie beispielsweise diese Ereignisbehandlungsroutine:
procedure TMyDataModule.dbLogin(Connection: TFDConnection; LoginParams: TStrings);
begin
LoginParams.Values['USER NAME'] := 'me';
LoginParams.Values['PASSWORD'] := 'pwd';
end;
durch folgende ersetzen:
procedure TMyDataModule.dbLogin (AConnection: TFDCustomConnection; const AConnectionDef: IFDStanConnectionDef);
begin
AConnectionDef.UserName := 'me';
AConnectionDef.Password := 'pwd';
end;
Hinweis 10
Für Anwendungen mit heterogenen BDE-Abfragen sollte in FireDAC Local SQL verwendet werden.
Hinweis 11
Um das Multithreading mit der BDE zu aktivieren, kann in der Anwendung TSession.AutoSessionName auf True gesetzt werden. FireDAC unterstützt das Konzept von benannten Sitzungen nicht. Daher müssen Sie in Ihrer Anwendung statt TFDQuery.ConnectionName (Bindung per Name) TFDQuery.Connection (Bindung per Verweis) verwenden. Weitere Einzelheiten zum Multithreading in FireDAC finden Sie unter Entwickeln von Multithreading-Anwendungen.