Popupmenu ile veri güncelleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Cemal Gümüş
Üye
Mesajlar: 8
Kayıt: 16 Nis 2020 07:14

Popupmenu ile veri güncelleme

Mesaj gönderen Cemal Gümüş »

Merhaba
Benim yapmak istediğim şey dbgriddeki bir veriye sağ tuş yapılıp ödeme yapa tıklanınca hali hazırda bulunan access veri tabanındaki tablomun fiyat ve taksit sayısı alanlarından fiyattan taksit miktarı(tablomda mevcut) kadar düşülecek ve taksit sayısı da ona bağlı olarak azalacak ve müşterinin ödemesi gereken taksiti kalmayınca " ödemesi bitenler " tablosuna kaydedilecek.

Bunu yapmak için gridin cellclik i yordamı ile griddeki seçilen satırın sayısını buldum ve veri tabanımdaki otomatik artan kimlik alanı ile eşleştirerek update etmeye çalıştım ancak sql kodu yazarken taksitsayisi=taksitsayisi -1 yapamadığım için devam edemedim.

Teşekkürler.
Ms_YiLDiRiM
Üye
Mesajlar: 35
Kayıt: 24 Ağu 2010 09:46
Konum: Samsun

Re: Popupmenu ile veri güncelleme

Mesaj gönderen Ms_YiLDiRiM »

Merhabalar, hocam öncelikle kesinlikle yanlış yol izliyorsun, madem müşteri ödeme yaptı, bunu siz borçtan düşmeyin, sisteme ödeme yapıldığını veri olarak girin sistem giren-çıkan yaparak borç durumunu hesaplasın. ayrıca bu işlemi yapmak için dbrid ile değil veritabanına bağlandığınız dataset üzerinden daha kolay yapabilirsiniz. isterseniz tablo yapınızı gönderin daha detaylı yorum yapalım.
Cemal Gümüş
Üye
Mesajlar: 8
Kayıt: 16 Nis 2020 07:14

Re: Popupmenu ile veri güncelleme

Mesaj gönderen Cemal Gümüş »

Merhabalar öncelikle cevap verdiğiniz için teşekkür ederim.

Sizin dediğiniz gibi yapmak çok mantıklı ama ben öğrenciyim ve ödevimde o kadar detaylı yapılmam istenmedi.
Sadece griddeki müşteride sağ tık yapıldığında ödeme yap gelir ona tıklandığında ise borçdan ve taksitten düşer.
Kişinin ödemesi bittiğinde Ödemesi Bitenler tablosuna eklensin şeklinde.

Delphi 7 kullanıyorum.Tablom müşteri ad,soyad,memleket gibi kişisel ürün bilgisi olarak ürün adı,fiyatı,ve taksit sayısı ve bir de aylık taksit tutarı(fiyat/taksitsayısı) alan adları mevcut.

Yardımlarınızı bekliyorum teşekkürler.
Ms_YiLDiRiM
Üye
Mesajlar: 35
Kayıt: 24 Ağu 2010 09:46
Konum: Samsun

Re: Popupmenu ile veri güncelleme

Mesaj gönderen Ms_YiLDiRiM »

o halde
tablonuzda ödemeye ilişkin 'fiyat' , 'taksit' , 'taksitsayisi' , 'aylikodeme' , 'kalanborc' sütünları olduğunu varsayalım. bu sütünların her biri için dbedit ekleyin,
yani DBfiyat , DBtaksitsayisi, DBaylikodeme, DBkalanborc gibi. bunların ilgili veritabanı bağlantılarını (dataset) yapın.


grid nesnesine bir popupmenu tanımlayın, bu menüye "ödeme al" ekleyin, ve onclick olayına

Kod: Tümünü seç

//var odemeal:ansistring;
odemeal:=inputbox('Taksit Sayısı','Ödeme alınacak taksit sayısını belirtiniz?','1';
dataset1.edit;
DBkalanborc.text:=inttostr(strtoint(kalanborc.text) - strtoint(odemeal));
dataset1.post;


yazınız. menüye tıkanıldığında kaç taksit ödendiğini gireceksiniz. daha sonra basit olarak dbeditler üzerinden toplama çıkarma işlemi yaptıracaksınız. eğer (if) komutları ile borç kalıp kalmadıığnı sorgulatabilir bakiyenin eksiye düşmesini engelleyebilirsiniz.

kodları denemeden varsayımsal cevap verdiğim için hata verebilirler ama en basit mantığıyla böyle yapabilirsin :)
Cemal Gümüş
Üye
Mesajlar: 8
Kayıt: 16 Nis 2020 07:14

Re: Popupmenu ile veri güncelleme

Mesaj gönderen Cemal Gümüş »

Merhabalar.
Mesajınız için teşekür ederim peki dbedit eklemeden nasıl halledebilirim bunu.

Teşekkürler
denizfatihi
Üye
Mesajlar: 254
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Re: Popupmenu ile veri güncelleme

Mesaj gönderen denizfatihi »

Merhaba,
Aşağıda ki kod mssql kodu ama yine de az çok bir fikir verecektir.

Kanaatimce Taksit ödemesi olması rağmen kısmi ödeme de yapılabileceğini düşünerek bence normal bir cari hesap hareketlerini takip edeceğin bir tablo oluştur (Fatura tarihi, Fatura no, Borç, Alacak, Bakiye vs gibi) buraya gelen ödemeleri işledikçe trigger ile aşağıdaki kodlarla anlattığım gibi vadesi gelen ilk taksiti kapatacak şekilde ilerler.

Kod: Tümünü seç

declare @Hareketlet Table (Fat_id int, islem_tarihi date, islem_Turu  varchar(10),Borc money, Alacak money)

 insert into @Hareketlet(Fat_id, islem_tarihi, islem_Turu, Borc,Alacak )
    values
        (1, '2020-1-5','Fatura',250,0),
        (2, '2020-1-10','Odeme',0,15),
        (3, '2020-1-20','Odeme',0,20),
        (4, '2020-1-22','Odeme',0,25),
        (5, '2020-1-23','Odeme',0,30),
        (6, '2020-1-24','Odeme',0,40)
 
 --SELECT * from @Hareketlet 
 
SELECT  a.islem_tarihi,COALESCE(Borc, 0) AS Borc,COALESCE(Alacak, 0) as Alacak,
(SELECT SUM(COALESCE(Borc, 0)) - SUM(COALESCE(Alacak, 0))  FROM @Hareketlet b 
WHERE b.islem_tarihi <= a.islem_tarihi ) AS Bakiye 
FROM @Hareketlet a
order by a.islem_tarihi


declare @Bakiye money = (SELECT SUM(COALESCE(Alacak, 0))  FROM @Hareketlet)  

-- Kesilen 250 Tl faturayı 5 taksite böldük varsayalım

declare @Taksit_Tablosu Table (Taksit_id int, vade_tarihi date, Taksit_Tutarı money, Taksit_Odemesi money)

insert into @Taksit_Tablosu (Taksit_id, vade_tarihi, Taksit_Tutarı, Taksit_Odemesi )
    values
        (1, '2020-2-1', 50,0),
        (2, '2020-3-1', 50,0),
        (3, '2020-4-1', 50,0),
        (4, '2020-5-1', 50,0),
        (5, '2020-6-1', 50,0)
        
  --  SELECT * from @Taksit_Tablosu 
 
 
declare @Taksit_Tablosu2 table(Taksit_id int, vade_tarihi date, Taksit_Tutarı money, 
Taksit_Odemesi money, Kalan_Tutar as (Taksit_Tutarı - Taksit_Odemesi))
  
    insert into @Taksit_Tablosu2 (Taksit_id, vade_tarihi, Taksit_Tutarı, Taksit_Odemesi)
    select
        Taksit_id,
        vade_tarihi,
        Taksit_Tutarı,
        0 as Taksit_Odemesi
    from @Taksit_Tablosu
 
declare @Taksit_id int = 1
declare @Kismi_Odeme money = @Bakiye
declare @Kalan_Kismi_Odeme money = 0
 
while @Kismi_Odeme > 0
begin
   
        select
            @Kalan_Kismi_Odeme = @Kismi_Odeme - Taksit_Tutarı
        from @Taksit_Tablosu2 t
        where
            t.Taksit_id = @Taksit_id
 
       update t
        set t.Taksit_Odemesi =
            case
                when @Kalan_Kismi_Odeme > 0 then t.Taksit_Tutarı
                else @Kismi_Odeme
            end
        from @Taksit_Tablosu2 t
        where
            t.Taksit_id = @Taksit_id
 
    set @Kismi_Odeme = @Kalan_Kismi_Odeme
    set @Taksit_id = @Taksit_id + 1
end

 --select * from @Taksit_Tablosu2
 
select Taksit_id, vade_tarihi, Taksit_Tutarı, Taksit_Odemesi,Kalan_Tutar,
CASE WHEN Kalan_Tutar = 0.00 THEN 'Ödeme Kapandı'
When Taksit_Odemesi > 0.00 THEN  'Kismi Ödeme'
ELSE 'Ödeme Bekliyor' END AS Durumu
from @Taksit_Tablosu2
Cemal Gümüş
Üye
Mesajlar: 8
Kayıt: 16 Nis 2020 07:14

Re: Popupmenu ile veri güncelleme

Mesaj gönderen Cemal Gümüş »

Merhaba,
İlgi alaka ve emekleriniz için teşekkür ederim.
Amacıma ulaştım .
Cevapla