JUST İN TİME computed source olayı nasıl olur?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

JUST İN TİME computed source olayı nasıl olur?

Mesaj gönderen nitro »

s.a.
bir stok giriş tablom var. (firebird)
bu tabloda computed field'ler var.
delphide bir dbgrid koydum.
şöyle düşünün. girişadet'i girdim.
enter tuşuna bastım. cursor birimfiyat kısmına geldi. birimfiyatı yazdım. enter'a bastım. tutar (girisadet*birimfiyat) olarak tanımlanan field değerini dbgridde gösterdi ve ben aynı row (!) da indirim oranı fieldine geldim. indirim oranını girdim ve enter tuşuna bastım. indirimtutar(tutar*indirimoran/100) olarak tanımlı. ve bu field yine değerini hesapladı. vs.vs.
bilmem anlatabildim mi?
ben şöyle bir şey düşündüm çözüm olarak:
bu field'lere bağlı bi kaç dbedit koyayım ve dbeditlerin onchange olayına da ibtransaction1.commitretining; yazayim. nasıl olur. daha iyi bir çözüm var mı?
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Bu tür olaylarınızı Delphi tarafına yığmanız daha mantıklı olabilir diye düşünüyorum zira, indirimdi KDV idi benzeri şeyleri yaparken DB ile sürekli iletişimde bulunmuk gereksiz Network trafiği ve Server'a yük bindirmek olur.

Kanımca Delphi tarafında hesaplarmalarınızı yapıp, bir defada sonuçları servera göndermeniz olacaktır.

Ancak, madalyonun öbür yüzü de şu, eğer bu işlemi birden fazla (yani binlerce kayıt için tekrarlayacaksanız, bu işlemi bir SP'ye atmanız ve ilgili SP'yi Execute etmenizi şiddetle tavsiye ederim.

Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

öneriniz için teşekkürler.
üzerinde çalıştığım programın bir önceki versiyonunda olayı stringgridde yapıyordum. daha sonra da veritabanına aktarıyordum. ama daha sonradan kayıtlar üzerinde değişiklik yapmak veya row silmek için girildiği zaman çok sıkıntı yaşıyordum. ayrıca stringgridde kullanıcının görmesini istemediğim primary key fieldini de göstermek zorunda kalıyordum. stringridde yapılan bir değişikliği algılamak ve veritabanına yansıtmak da hayli zor oluyordu. o nedenle dbgrid kullanmayı daha uygun görüyorum şimdi. ayrıca programın kullancı sayısı 10'u geçmeyeceği için server'ı aşırı zorlama durumum da olmayacak diye düşünüyorum.
şöyle bir kod olsa. mesela :
table1deki bir field'in onexit olayı olsa. yani bir fielde geldiniz, o fieldden çıkınca tetiklenecek bir olay olsa: oraya yazacağım kodlarla ben bu olayı hallederim diye düşünüyorum. mümkün mü bööle bişey?
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Zaten benim tavsiye ettiğim (eğer veri girişinde ise) Delphi tarafında bu hesaplamaları yapmanız. Ayrıca String Grid kullanarak kendinizi büyük bir sıkıntıya sokmuşsunuz !... Harika Grid componentleri var, mümkünse Developer Express'in Quantum Grid'ini tavsiye ederim. İstediğini pek çok şeyi hem de çok güzel görsellikte yapabilirsiniz.

Sorunuza gelince, Table veya Query'lerin Field'ları üzerinde OnChange ve OnValidate gibi Eventler vardır. Burada bunları kullanrak hesaplamalarınız yaptırabilirsiniz. Yani kolonlarla uğraşmadan daha derine inerek Field'ın kendisine bir takım eventler bağlayın.

Field'a bağladığınız eventler Grid dışında da değer yüklemesi yaptığınızda tetikleneceği için sizi rahatlatacaktır. Eğer gridin klolonlarına bu tür olayları yazarsanız, o kolon için yaptığınız hesapları manuel olarak da yapmanız gerekecektir.

Bu sebeple ilgili formdaki veya datamodulünüzdeki fieldlara event bağlayın ve olayı orda çözün.

Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Cevapla