Merhaba arkadaşlar,
Uzun uğraşlar sonucunda sanırım sorunu çözdüm. Yanılıp yanılmadığımı size sormak istedim.
Tquery'nin beforepost olayına aşağıdaki kodu yazarak kaydetmeden önce verinin encode edilmesini sağlıyorum.
Kod: Tümünü seç
procedure TForm1.FDQuery1BeforePost(DataSet: TDataSet);
var
i:integeR;
begin
with DataSet do begin
Edit;
for i := 1 to FieldCount - 1 do begin //id hariç
Fields[i].AsString:= EncodeXXX(Fields[i].AsString);
end;
end;
end;
Daha sonra Tquery'nin AfterGetRecord olayına aşağıdaki kodu yazarak veri tabanından çektiğim kayıtları decrypt ediyorum.
Kod: Tümünü seç
procedure TForm1.FDQuery1AfterGetRecord(DataSet: TFDDataSet);
var
i:integer;
begin
try
with DataSet do begin
for i := 1 to FieldCount - 1 do
Fields[i].AsString:=DecodeXXX(Fields[i].AsString);
end;
except;
end;
end;
Ama bunları yapmak da yetmiyor. En son eklediğim kayıt encode edilmiş olarak gridde görünüyor ve decrypt olmuyordu. Bunun sebebinin de veriyi veritabanından çekmediğinden memory tableden aldığından olduğunu düşündüm ve DataSource'un DataChange olayına aşağıdaki kodu yazdım.
Kod: Tümünü seç
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
var
i:integer;
str:string;
begin
with TDataSource(Sender).DataSet do begin
case State of
dsInactive: ;
dsBrowse: begin
for i := 1 to FieldCount - 1 do begin
str:= DecodeXXX(Fields[i].AsString);
if Length(str)<1 then exit;
Edit;
Fields[i].AsString:= str;
end;
end;
dsEdit: ;
dsInsert: ;
dsSetKey: ;
dsCalcFields: ;
dsFilter: ;
dsNewValue: ;
dsOldValue: ;
dsCurValue: ;
dsBlockRead: ;
dsInternalCalc: ;
dsOpening: ;
end;
end;
end;
Görüldüğü gibi dsBrowse olunca veriyi decode edebiliyorum. Kodlarımda bir hata var mı, ne gibi sorunlarla karşılaşabilirim?
Ayrıca ekleyim ki "for i := 1 to FieldCount - 1 do " dememin sebebi id kısmını encrypt etmek istemediğimden. Umarım başka arkadaşlar da faydalanırlar.