HEj.
Jeg har forsøgt med diverse onBeforeXXX og onAfterXXX (post, insert osv)
uden at have fundet den korrekte metode.
En clientdataset forbundet til en database med et felt, der er primærnøgle.
Når der indsættes en ny linie i min grid, der er forbundet med
clientdatasettet, så indsætter jeg automatisk 3 værdier i nogle af
postens felter( Dette er en form for standardforslag til slutbrugeren,
så felterne ikke er tomme fra starten). Det gør jeg med
Procedure Tform1.clientdataset1AfterInsert(Dataset: TDataSet);
Begin
Clientdataset1('Felt1'):= 'indhold';
...
End;
Vælger jeg efter at have indsat en ny linie at indtaste en værdi i
feltet, der har primær nøgle, er der ingen problemer. Posten "bogføres"
som den skal.
Vælger jeg derimod at forlade den nyligt indsatte linie uden at indtaste
yderligere end det ovenfor automatisk indtastede, så kommer en violation
key error, forståeligt nok.
Havde jeg valgt IKKE at indsætte de automatiske indsætninger, ville
posten blot have været automatisk annulleret, når jeg forlod den nye
linie uden at indtatte noget. Men idet jeg har indtastet de automatiske
værdier, så er min tanke, at jeg manuelt skal annullere posten (som jeg
ikke ønsker, når jeg ikke har indtastet en værdi i primær feltet.
Derfor har jeg prøvet med en onBeforePost, onBeforeINsert, onAfterPost
osv. uden a finde den rigtige kombination.
Eksempel herunder:
procedure Tform1.clientdatasetBeforePost(DataSet: TDataSet);
begin
If (clientdataset['Felt1'] = 'indhold') and
(clientdataset['Felt2'] = null) and
....
clientdataset1.delete;
end;
|