FireDAC - Aide pour composant TFDBatchMove
Bonjour à tous,
J'aurai besoin d'un peu d'aide.
J'ai créé une méthode qui doit copier une table source vers une table qui n'existe pas encore dans la DB (celle-ci serait en sorte un clone).
Je suis concrétement en train de tester les possibilités offertes par FireDAC.
Le composant TFDBatchMove est d'après la documentation d'Embarcadero capable de créer une table lors de la copie grâce à la propriété Options.
A noter que cette méthode fait partie d'une classe de connection. Raison pour laquelle des objets utilisés à l'intérieur de ma routine ne sont pas créés à l'intérieur de celle-ci.
J'ai ajouté en commentaire le code de l'ancêtre de TFDBatchMove (le TBatchMove du BDE) pour lequelle j'ai pu réaliser mon souhait sans soucis donc je pense que FireDAC en et capable.
Je me doute que je fais une erreur quelque part mais où ?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| // Ici je passe le nom de table source qui est bien présente et le nom de la table à créer
procedure TDBConnection.CopyTableToCloneTable(ASourceTableName, ACloneTableName: string);
var
FFDCloneTable : TFDTable;
begin
try
FFDBatchMove.Options := [poClearDestNoUndo, poIdentityInsert, poCreateDest]; // Ici je demande que la table soit bien créée
FFDCloneTable := TFDTable.Create(nil);
try
FFDTable.Active := False;
FFDTable.ConnectionName := FFDConnection.ConnectionName;
FFDTable.TableName := ASourceTableName;
FFDTable.Active := True;
FFDCloneTable.Active := False;
FFDCloneTable.ConnectionName := FFDConnection.ConnectionName;
FFDCloneTable.TableName := ACloneTableName;
FFDCloneTable.Active := True;
FFDBatchMoveDatasetReader.DataSet := FFDTable;
FFDBatchMoveDatasetWriter.DataSet := FFDCloneTable;
FFDBatchMove.Reader := FFDBatchMoveDatasetReader;
FFDBatchMove.Writer := FFDBatchMoveDatasetWriter;
FFDBatchMove.GuessFormat;
FFDBatchMove.Execute;
//******************** BDE Version ***************************
// FCloneTable.DatabaseName := FDatabase.DatabaseName;
// FCloneTable.TableName := ACloneTableName;
//
// FTable.Active := False;
// FTable.DatabaseName := FDatabase.DatabaseName;
// FTable.TableName := ASourceTableName;
// FTable.Active := True;
//
// FBatchMove.Source := FTable;
// FBatchMove.Destination := FCloneTable;
// FBatchMove.Mode := batCopy;
// FBatchMove.Execute;
finally
FreeAndNil(FFDCloneTable);
end;
except
raise;
end;
end; |
Merci mille fois à ceux qui pourront m'aider.