Committen once kayit neredeydi???

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
mrtblt
Üye
Mesajlar: 222
Kayıt: 02 Tem 2007 05:13

Committen once kayit neredeydi???

Mesaj gönderen mrtblt »

Merhaba

Fatura detay satirlarini girdigim tablonun Afterpost eventinde soyle bir kod var

Kod: Tümünü seç

var
  netsum,vatsum,grandsum : currency;
begin
  if (q_invheader.state in [dsinsert, dsedit]) and (q_invltemp.RecordCount > 0) then
  begin

    neytrns2.commit;
    netsum := 0;
    vatsum := 0;
    grandsum := 0;

    q_genel.Close;
    q_genel.SQL.Clear;
    q_genel.SQL.Add('select * from inv_lines_temp');
    q_genel.Open;

    q_genel.First;
    while not (q_genel.eof) do
    begin
      if (q_genel.FieldByName('crn').AsString = 'EUR') and (q_invheader.Fieldbyname('inv_type').asinteger in [1,2,11,12,13]) then
      begin
        netsum := netsum + (q_genel.FieldValues['line_net']*q_invheader.FieldValues['exch_rate']);
        vatsum := vatsum + (q_genel.FieldValues['line_vat']*q_invheader.FieldValues['exch_rate']);
        grandsum := grandsum + (q_genel.FieldValues['line_grand']*q_invheader.FieldValues['exch_rate']);
      end
      else
      begin
        netsum := netsum + q_genel.FieldValues['line_net'];
        vatsum := vatsum + q_genel.FieldValues['line_vat'];
        grandsum := grandsum + q_genel.FieldValues['line_grand'];
     end;
     q_genel.Next;
    end;
    q_invheader.FieldByName('net_sum').AsFloat := netsum;
    if q_invheader.Fieldbyname('inv_type').asinteger in [1,2,11,12,13] then
    q_invheader.FieldByName('vat_sum').AsFloat := vatsum else q_invheader.FieldByName('vat_sum').AsFloat := 0;
    q_invheader.FieldByName('grand_sum').AsFloat := grandsum;
    q_genel.Close;
    q_invltemp.Active := true;
  end;
Buradaki amac her post yada delete olayindan sonra fatura basligindaki rakamlari update etmek. Bunu yapmak icinde fatura detay tablosundaki kayitlarin ilgili toplamlarini almadan once fatura detay tablosunu commit ediyorum. Toplamlari aldiktan sonra da tabloyu yeniden aktiflestiriyorum. Ama bu dbgridde veri girerken her post olayindan sonra kaydi en ust satira konuslandiriyor ve buda hos degil.

Diyelim ki kullanici 14. satirdaki kaydi edit etti ve posttan sonra tablo gridin en usttarafina konuslaniyor. Burada nasil bir yol izlemem lazim insert yada posttan sonra tablo bir alt satira konuslansin.

Bunun icin soyle bir yol izledim

Kod: Tümünü seç

i := q_invltemp.fieldbyname('id').asinteger; //committen once
.
.
.
q_invltemp.locate('id',(i+1),[]); //tablo aktiflestirildikten sonra
Ama nafile... Sonuc alamadim
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: Committen once kayit neredeydi???

Mesaj gönderen Lost Soul »

BookMark deyimi işinizi görecektir.

Kod: Tümünü seç

var
 bm : TBookmark;
Begin
  bm := DataSet.GetBookMark;
  ...
  ...
  ...
  ...
  DataSet.BookMark := bm;
End;
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: Committen once kayit neredeydi???

Mesaj gönderen orhancc »

devexpresin gridinde şu satıra git diye özellik var mesela onun gibi birşey kullanabilirsin eğer varsa.
mrtblt
Üye
Mesajlar: 222
Kayıt: 02 Tem 2007 05:13

Re: Committen once kayit neredeydi???

Mesaj gönderen mrtblt »

Kayip ruhun gonderdigi kod super is gordu! :)
Cevapla