salut à tous ,
J'ai une base lié à un TTable lié avec un DBGrid , et j'ai un table Log qui doit contenir , la ligne modifier ainsi que la colomne exact que l'utilisateur a modifier le champ corresspondant plus quelques infos sur le temp , la table , et la date donc j'ai fait ceci:
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
procedure TForm1.Table1AfterPost(DataSet: TDataSet);
var
tmp,tabname,H: string;
newval : string;
lign: integer;
col : string;
 
begin
 
Lign :=table1.FieldValues['N°'];
col:=DBGrid1.SelectedField.DisplayName;
 
 tmp:= FormatDateTime('dd"/"mm"/"yyyy', Now);
 H:= FormatDateTime('hh":"mm":"ss', Now);
 tabname:= table1.TableName ;
 newVal:=DBGrid1.SelectedField.value;
 
 
//suppression d'une enregistrement ancien de meme champ s'il existe
 
table2.First;
while not table2.Eof do
begin
 if (tabname=table2.FieldValues['Tables']) and  (lign=table2.FieldValues['ligne']) and (col=table2.FieldValues['colomne']) then
  begin
 
    ///suppression de l'ancien ligne de la table logtable local
 
    Query1.SQL.Clear;
    query1.sql.add('delete * from logTable');
    query1.SQL.add('where Tables =:n and ligne=:l and colomne=:c');
    Query1.ParambyName('n').value:=tabname;
    Query1.ParambyName('l').value:=lign;
    Query1.ParambyName('c').value:=col;
    Query1.ExecSQL;
 
  end;
  table2.next;
end;
 
//insertion dans la table log :
 
  Query1.SQL.Clear;
  Query1.SQL.Add('INSERT INTO logTable (heure,Version,tables,ligne,colomne,nouvValeur)');
  Query1.SQL.Add('VALUES (:H,:tmp,:tabname,:lign,:col,:newval)');
 
  Query1.Params[0].AsString := H;
  Query1.Params[1].AsString := tmp;
  Query1.Params[2].AsString := tabname;
  Query1.Params[3].Asinteger := lign;
  Query1.Params[4].AsString := col;
  Query1.Params[5].AsString := newval;
  Query1.ExecSQL;
 end;

Ca marche 10/10 si on change une seul cellule et on clique sur un autre emplacement ,
mais Si on change un champ puis on change un 2eme dans le meme ligne ca capte seullement le 2eme changement , ces intruction vons se faire pour le 2eme champ , le premier se change sans insertion dans la table LOG .



j'attend votre aide