post işleminde aktif kaydın ilk kayda yönelmesi

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
zengin
Üye
Mesajlar: 233
Kayıt: 06 Ağu 2003 10:13

post işleminde aktif kaydın ilk kayda yönelmesi

Mesaj gönderen zengin »

s.a.
arkadaşlar vt fb 1.5 bağlantı bil. ibx pro. d7
carikart ve carihareket şeklinde iki adet tablom var birbirine foreign key ile bağlı carihareket tablosundaki borc toplamlarını carikart kısmında bulunan toplamborc alanına yazdırıyorum. bu işlemi carihareket i bağladığım datasetin afterpost olayına yazıyorum. carihareket tablosunu DBgrid içerisinde gösterdikten sonra DBGrid ile exel usulü kayıt yaparken kayıttan hemen sonra aktif kayıt ilk kayda yöneliyor. yani gridde 10. satırı kaydederken kayıt işleminden hemen sonra toplam işlemi carikart tablosuna edit olduktan sonra normal olarak detail yani carihareket tablosunun ilk kaydına gidiyor. bu işlem belki normal olabilir ancak herseferinde ilk kayda yönelmesi DBGrid içerisinde sorun yaşatıyor. bunu önlemenin bir çaresi varmı. yani kayıt işleminden sonra ilk kayda gitmesin.
Zengin
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

after post olayında tabloyu kapatıp acıyorsan ondandır
post isleminden onde Bookmark al islem sonrası o bookmarka giderek halledebilirsin
ÜŞENME,ERTELEME,VAZGEÇME
zengin
Üye
Mesajlar: 233
Kayıt: 06 Ağu 2003 10:13

Mesaj gönderen zengin »

s.a
üstadım kullanmış oldugum kod örnegine bir bakın bakalım ben nerede
hata yapıyorum amacım hareket toplamını kart kısmına toplam alanına
yazdırmak istiyorum.

Kod: Tümünü seç

procedure TMUSHAREKL.HARDataSet1AfterPost(DataSet: TDataSet);
begin
With IBDataSet1 do
begin
  IBDataSet1.Close;
  IBDataSet1.SelectSQL.Clear;
  IBDataSet1.SelectSQL.Add('select SUM(GENEL_TOPLAM) , SUM(ODEME_TUTAR) from CARIHAREKET where   CARIKODU = :CARIKODU');
  IBDataSet1.Prepare;
  IBDataSet1.Open;
  MUSKART.IBDataSet1.Edit;//Hatayı sanırım Burası Edit modunda Oldugu icin veriyor ve sekme yapıyor diye düşünüyorum fakat cözüm bulamadım?
  MUSKART.IBDataSet1.FieldByName('BORC').Value:=IBDataSet1.FieldByName('SUM').Value;
  MUSKART.IBDataSet1.FieldByName('ALACAK').Value:=IBDataSet1.FieldByName('SUM1').Value;
  MUSKART.IBDataSet1.FieldByName('BAKIYE').Value:=IBDataSet1.FieldByName('SUM2').Value;
  MUSKART.IBDataSet1.Post;

end;
Zengin
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

merhaba

Gördüğüm kadarıyla şunu diyebilirim.

Kod: Tümünü seç

 CARIKODU = :CARIKODU'); 

Parametre kullanmışsın,ama parametre değerini vermemişsin;
Prepare komutundan önce;

Kod: Tümünü seç

IBDataSet1.ParamByName('CARIKODU').Asstring:=ParametreDegerin;
demelisin...

+ birde;

Kod: Tümünü seç

MUSKART.IBDataSet1.FieldByName('BAKIYE').Value:=IBDataSet1.FieldByName('SUM2').Value;
demissin.Bu kodda da hata verecektir.Çünkü sorgunda SUM2 değerin yok..

iyi günler...
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Ek olarak; CARIKOD numeric ise parametre geçirirken ;

Kod: Tümünü seç

IBDataSet1.ParamByName('CARIKODU').Asstring := ParametreDegerin;
yerine

Kod: Tümünü seç

IBDataSet1.ParamByName('CARIKODU').AsInteger := ParametreDegerin;
olarak vermelisin..

Bir de select içinde aldığın SUM lara alias atamalısın :wink:

Kod: Tümünü seç

IBDataSet1.SelectSQL.Add('select SUM(GENEL_TOPLAM) as "GenelToplam", SUM(ODEME_TUTAR) AS "OdemeToplami" from CARIHAREKET ...
Kolay gelsin.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
zengin
Üye
Mesajlar: 233
Kayıt: 06 Ağu 2003 10:13

Mesaj gönderen zengin »

s.a
Degerli üstadlarım önermiş oldugunuz hatalı Olan Kodları düzelttim fakat DBgrid icerisinde sekme işlemi hala devam ediyor

Kod: Tümünü seç

With IBDataSet1 do
begin
  IBDataSet1.Close;
  IBDataSet1.SelectSQL.Clear;
  IBDataSet1.SelectSQL.Add('select SUM(GENEL_TOPLAM)AS TOPLAM , SUM(ODEME_TUTAR)AS ODEME from CARIHAREKET where   CARIKODU = :CARIKODU');
  IBDataSet1.ParamByName('CARIKODU').AsInteger := 0 ;
  IBDataSet1.Prepare;
  IBDataSet1.Open;
Buraya kadar Olan Kodlarda hata vermiyor proplem yok herşey normal fakat Aşagıdaki Kodla DBGrid icinde her bir kayıt veya kursiyer degiştiginde sekmeler başlıyor Örnegin On kayıt varsa İlk kayda üste gidiyor buda cok büyük bir sorun oluyor

Kod: Tümünü seç

MUSKART.IBDataSet1.Edit;
  MUSKART.IBDataSet1.FieldByName('BORC').Value:=IBDataSet1.FieldByName('TOPLAM').Value;
  MUSKART.IBDataSet1.FieldByName('ALACAK').Value:=IBDataSet1.FieldByName('ODEME').Value;
  MUSKART.IBDataSet1.FieldByName('BAKIYE').Value:=IBDataSet1.FieldByName('KALAN_BAKIYE').Value;
  MUSKART.IBDataSet1.Post;
Zengin
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

başa dönmemesi için tbookmark kullanmalısın..


birinci kullanım şekli..

Kod: Tümünü seç

var
yerimi : tbookmark;
begin
yerimi := sorgu.GetBookmark;
// işlemler ekleme, silme, vs vs
sorgu.GotoBookmark(yerimi);
sorgu.FreeBookmark(yerimi);
end;

ikinci kullanım şekli ise d6 ve üstü için geçerlidir..

Kod: Tümünü seç

var
yerimi : tbookmarkstr;
begin
yerimi := sorgu.Bookmark;
//işlemler ekleme, silme, vs vs
sorgu.Bookmark := yerimi;
end;
..
ikinci seçenek d6 ve üstü için geçerli.. bu metod ta bookmark ı free yapmaya gerek kalmıyor
zengin
Üye
Mesajlar: 233
Kayıt: 06 Ağu 2003 10:13

Mesaj gönderen zengin »

s.a


Degerli arkadaşlarım önermiş oldugunuz Bookmark ile yeterli bir sonuca varamadım ve AfterPost ? DBgrid ile burada sürekli işlem yapacagı icin
herdefasında sekmeye vede kasmaya musayit bir ortamı var ?
Daha Farklı bir yol veya bir öneri ile bu hatayı nasıl cözebilirim.
Zengin
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
tablolar master detail bağlı. (mantık olarak);
sen master tablonu kapatıp açtığın zaman (refresh olayı cariahareketin afterpost olayı)
detail tablonda kapanıp açılıyor. ve ilk kayıt seçiliyor.
bunu engellemek için
tablonun kapanıp açılmasını engellemen gerekiyor.
o zaman after post olayında carikart tablonu açıp kapama.
onun yerine toplam borcu normal bir editte göster.
şöyle bir genel yapı olabilir.
  • 1. Vatandaş listeden seçtiği cari nin hareketlerini görmek ister.
    2. Carihareketleri formu açılır formun onshow olayında carinin carihareketler tablosundaki borcu toplanır ve ekranda gösterilir.
    3. vatandaş carihareketlerde değişiklik yapar carinin borcu tekrar hesaplanıp editte gösterilir.
böyle bir yapı olabilir.
veya ikinci bir master tablo kullanabilirsin.
iki masterda aynı kaydı gösterir. birini carihareketleri seçmek için kullanırsın diğerinide carinin borçlarını göstermek için kullanabilirsin.


kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla