TFDUpdateSQL et ses méthodes
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:
DELETE FROM test WHERE teID = :OLD_teID LIMIT 1;
et d'insertion
Code:
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:
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:
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.
Citation:
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:
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.