Datasource ve tquery

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Datasource ve tquery

Mesaj gönderen PROGRAMADOR »

Merhaba arkadaşlar,
Datasource ve tquery arasındaki veri akışını nasıl kontrol edebilirim?

Kod: Tümünü seç

    Field2Update:='ENCCC';
    DataSource1.DataSet.Insert;
    DataSource1.DataSet.FieldByName(Field2Update).AsString:=Edit4.Text;
    DataSource1.DataSet.Post;
Kodu ile datasource’a ekleme yapıyorum. Doğal olarak query’e de işliyor bu. Daha sonra Tquery’nin BeforePost olayında kaydedilecek verideki değişiklikleri yapabiliyorum.
Ancak ben datasette değişiklik yapmak istemiyorum. Yalnızca kaydedilen veri farklı olsun istiyorum.

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;
Kodu ile Fieldların değerleri değişiyor. Yapmak istediğim değerleri değiştirmeden EncodeXXX fonksiyonunu işleterek kayıdı gerçekleştirmek. Böylelikle datasetteki decrypt edilmiş veriye dokunulmamış olacak.

İlginize teşekkürler.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: Datasource ve tquery

Mesaj gönderen PROGRAMADOR »

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.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
Cevapla