Bonjour,

je cherche une documentation synthétique pour utiliser le couple TFDQuery + TFDUpdateSQL. Jusqu'à présent en Lazarus comme en Delphi, j'utilisais 2 DataSet : un pour le rafraîchissement de la Grid (Open) et l'autre pour toutes les opérations d'insertion, suppression, modification et duplication (ExecSQL). L'avantage de ma solution étant de réduire les temps de chargement avec une méthode adaptée et la complication étant le rafraîchissement de la table. Par contre, je dispose de la duplication. Je ne sais pas si on peut l'émuler avec le TFDUpdateSQL.

Après avoir lu un article récent dans ce forum, j'ai testé la TMSFMXLiveGrid et en effet même sur une table MySQL distante conséquente on peut rendre l'affichage des données assez rapide. C'est même assez surprenant. Le problème c'est que le FDUPdateSQL m'est totalement étranger. Je me lance, consulte des docs, mais non synthétiques et je ne suis pas loin d'abandonner... Je peux y passer une journée de mon WE pour faire le point mais guère plus. J'ai consommé 50% du temps et les lacunes sont encore très nombreuses.

Le DataSet est en LiveBindings avec une TDGrid. La Grid est en lecture seule. Je voudrais supprimer et insérer des enregistrements. Dans le FDUpdateSQL, voici les requêtes de suppression
Code : Sélectionner tout - Visualiser dans une fenêtre à part
DELETE FROM test WHERE teID = :OLD_teID LIMIT 1;
et d'insertion
Code : Sélectionner tout - Visualiser dans une fenêtre à part
INSERT INTO test (teID, teNOM, tePRENOM) VALUES (:NEW_teID, :NEW_teNOM, :NEW_tePRENOM);
Le code du bouton de suppression pour supprimer l'enregistrement sélectionné dans la Grid :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.BtDELClick(Sender: TObject);
begin
with FDQuery1 do
 try
     Delete;
   except
     on e: Exception do
     begin
       ShowMessage(e.Message);
     end;
   end;
end;
Cela semble fonctionnel (dans la Grid et dans la table). Trop simple certainement.

Pour l'insertion, il me semble avoir compris à la lecture de la documentation éparpillée de Delphi que pour changer les paramètres, on utilise
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
FindField('teID').NewValue := 'AAAAA';
FindField('teNOM').NewValue := 'NOM A ';
FindField('tePRENOM').NewValue := 'Prénom A' ;
Je vois en effet des changements dans la Grid.
Postit : Et quid d'un champ NUL ? En Params, FireDac est mauvais (peu simple) pour cette gestion.
Mais c'est après que cela se complique. Comment articule-ton la gestion de la transaction ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
with FDQuery 1 do begin
  Connection.StartTransaction;
  try
     [???]
end;
J'utilise quoi exactement dans les CachedUpdates := True; Insert; ApplyUpdates(); CommitUpdates; CachedUpdates := False; Connection.Commit; ?
Pour l'instant mon FDQuery et son FDUpdateSQL sont réglés avec les réglages par défaut.

Merci de votre aide. Zac.