Conseils supplémentaires sur la migration (FireDAC)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Migration des applications BDE vers FireDAC


Conseil 1

Certaines propriétés doivent être entièrement supprimées, car FireDAC n'a pas d'équivalents :

  • SessionName doit être supprimée entièrement. Mais soyez prudent, car votre application utilise peut être plusieurs connexions portant le même nom dans différentes sessions.
  • PrivateDir doit être supprimée entièrement.

Remarque : Ceci est effectué par le script de migration FireDAC_Migrate_BDE.txt.

Conseil 2

Bien que FireDAC ait un équivalent au TTable du BDE, nommé TFDTable, nous vous recommandons de remplacer directement toutes les occurrences de TTable par TFDQuerys lors de la migration.

Conseil 3

L'application BDE avec champs persistants doit être également ajustée. BDE ne fournit pas et n'utilise pas les propriétés Origin et ProviderFlags des champs persistants, ni le dictionnaire de requêtes de base de données pour obtenir les champs d'identification unique. FireDAC fournit et utilise les propriétés Origin et ProviderFlags des champs persistants. Le script de migration FireDAC_Migrate_BDE.txt supprime toutes les valeurs TField.Origin des fichiers DFM. Lorsque Origin est vide (comme c'est le cas dans l'application BDE), FireDAC utilise le nom du champ. Mais la valeur par défaut de ProviderFlags n'inclut pas pfInKey, et FireDAC n'interroge pas la base de données pour obtenir les champs de clé primaire. Il ne peut donc pas obtenir les champs d'identification unique et vous devez effectuer l'une des actions supplémentaires suivantes :

  • Recréer des champs persistants.
  • Ajuster manuellement ProviderFlags.
  • Spécifier manuellement UpdateOptions.KeyFields.

Conseil 4

Les extraits de code tels que

Screen.Cursor := crSQLWait;
try
  ......
finally
  Screen.Cursor := crDefault;
end;

doivent être remplacés par :

uses
  FireDAC.Stan.Factory, FireDAC.UI.Intf;
  ......
var
  oWait: IFDGUIxWaitCursor;
  ......
  FDCreateInterface(IFDGUIxWaitCursor, oWait);
  oWait.StartWait;
  try
    ......
  finally
    oWait.StopWait;
  end;

Conseil 5

FireDAC n'a pas d'équivalent de l'API BDE. C'est pourquoi chaque code qui utilise directement l'API du BDE doit être modifié en utilisant uniquement l'API de FireDAC. Il n'existe pas de solution directe.

Conseil 6

De nombreux produits tiers, comme les bibliothèques de rapports ou multi-niveaux, requièrent une unité d'adaptateur DAC. Contactez le fournisseur du produit tiers pour savoir comment vous procurer un adaptateur.

Conseil 7

EDBEngineError est la classe d'exception spécifique au BDE. FireDAC a un équivalent - la classe EFDDBEngineException. Lors de la gestion des exceptions du BDE, le programmeur utilise la propriété ErrorCode pour obtenir le type d'erreur. FireDAC a le type de propriété, qui retourne une valeur énumérée.

Par exemple, remplacez le code suivant :

if E is EDBEngineError then
begin
  case EDBEngineError(E).Errors[0].ErrorCode of
    DBIERR_KEYVIOL: MetaBaseDBError(SMb_DataSetInvalidPKeyValue, E);
end;

par :

if E is EFDDBEngineException then
begin
  case EFDDBEngineException(E).Kind of
    ekUKViolated: MetaBaseDBError(SMb_DataSetInvalidPKeyValue, E);
end;

Conseil 8

TBatchMove et TFDBatchMove sont très différents par de nombreux aspects. Vous devrez remanier tout code utilisant le composant TBatchMove.

Conseil 9

L'événement TFDConnection.OnLogin est incompatible avec la liste des paramètres de l'événement TDatabase.OnLogin. Par exemple, vous devrez remplacer le gestionnaire suivant :

procedure TMyDataModule.dbLogin(Connection: TFDConnection; LoginParams: TStrings);
begin
  LoginParams.Values['USER NAME'] := 'me';
  LoginParams.Values['PASSWORD'] := 'pwd';
end;

par celui-ci :

procedure TMyDataModule.dbLogin (AConnection: TFDCustomConnection; const AConnectionDef: IFDStanConnectionDef);
begin
  AConnectionDef.UserName := 'me';
  AConnectionDef.Password := 'pwd';
end;

Conseil 10

Lorsque l'application utilise des requêtes BDE hétérogènes, avec FireDAC elle doit utiliser le SQL local.

Conseil 11

Pour activer le multithread avec BDE, l'application peut définir TSession.AutoSessionName sur True. FireDAC ne supporte pas le concept des sessions nommées. A la place, vous devez configurer votre application pour qu'elle utilise TFDQuery.Connection (liaison par référence) au lieu de TFDQuery.ConnectionName (liaison par nom). Renseignez-vous sur le développement d'applications multithreads avec FireDAC.