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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.