Bonjour,
Je voudrais empêcher la modification d'une cellule en fonction d'une autre valeur . Par exemple , ma base de données contient 3 dates ces dates ne sont modifiables que dans les 24 heures suivant leur saisie !
Ce n'est pas forcément la meilleure structure de table , mais il s'agit d'une modification sur de l'existant et bien entendu pour hier !Table
CLE,
....
DATE_DEPART,
DATE_DEPART2,
DATE_DEPART3,
DATE1TIMESTAMP, // date de saisie de la date1 (D1) géré par trigger
DATE2TIMESTAMP, // " " " date2 (D2) " " "
DATE3TIMESTAMP // " " " date3 (D3) " " "
pour ce faire j'ai utiliser l'évènement onColEnter
cependant si ce code est correct , une problématique se pose si je change de ligne sans changer de colonne
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 procedure TMain.SMDBGrid1ColEnter(Sender: TObject); var DateSaisie,Delay : TDateTime; function Delai(DateField : TField) : TDateTime; begin if DateField.IsNull then Result:=IncDay(Now) else Result:=IncDay(DateField.AsDateTime); case DayOfTheWeek(Result) of 6 : result:=IncDay(Result,2); // samedi -> lundi 7 : result:=IncDay(Result); // dimanche -> lundi end; end; begin if SMDBGrid1.SelectedField=ZQ.FieldByName('DATE_DEPART') then begin delay:=Delai(ZQ.FieldByName('D1')); SMDBGrid1.SelectedField.ReadOnly:= (now>delay); end; if SMDBGrid1.SelectedField=ZQ.FieldByName('DATE_DEPART2') then begin delay:=Delai(ZQ.FieldByName('D2')); SMDBGrid1.SelectedField.ReadOnly:=(now>delay); end; if SMDBGrid1.SelectedField=ZQ.FieldByName('DATE_DEPART3') then begin delay:=Delai(ZQ.FieldByName('D3')); SMDBGrid1.SelectedField.ReadOnly:= (now>delay); end; end;
(Oui ! il s'agit en fait d'une SMDBGrid , mais je ne pense pas que cela ait un impact)
Question : Quel serait le bon évènement ? le OnSelectCell serait bien sur le meiux mais n'existe pas dans la DBGrid ni SMDBGrid du coup
Partager