dbgrid'de harf ve numara göstermek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
dr_ebuzer
Üye
Mesajlar: 30
Kayıt: 29 Eki 2005 08:26

dbgrid'de harf ve numara göstermek

Mesaj gönderen dr_ebuzer »

selam arkadaşlar şöyle bir problemim var yardım ederseniz sevinirim
kasa programında müşteriye ait tahsilatları topladım
müşteriye ait ödemeleride topladım toplamları belli
problem şu ödemelrei tahsilattan çıkardıktan sonra kalan sonucu dbgridde
şöyle göstermek istiyorum
müşterinin borcu varsa borc tutarını göstersin ve (B) harfi yazsın
müşterinin borcu varsa alacak tutarını göstersin ve (A) harfi yazsın

tolam_tahsilat toplam_ödeme net_borc_alacak
50.000.000 100.000.000 50.000.000(B)

bunu nasıl bir kod ile yapabilirim şimdiden teşekkürler
En son dr_ebuzer tarafından 29 Kas 2005 03:07 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

merhaba,

kod olarak veremesemde mantık olarak şöyle bişi olabilirmi,

eğer kişinin borcu alacağından fazla ise dbgrid1 şu alanına b yaz eğer az ise a yaz gibi

bunu datasetin oluşturulan calc alınna göre yaptırabilirsin

kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

if (borç-alacak) >0 then
begin
edit1.text:= (borc-alacak)+' '+'(A)';
end
else
begin
edit1.text:= (borc-alacak)+' '+'(B)';
end;

buna benzer bişey olacak hocam. kısaca yazdım hata varsa affola.

Saygılarımla
Kolay gelsin.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
dr_ebuzer
Üye
Mesajlar: 30
Kayıt: 29 Eki 2005 08:26

dbgrid'de sayı ve numara göstermek

Mesaj gönderen dr_ebuzer »

arkadaşlar olmadı benim yapmak istediğim şu biraz daha açayım
müşteri tablomda diyelim şöyle 3 alanım var
1-müşterialacak {müşterinin bizden alacağı}
2-müşteriborc {müşterinin bize olan borcu}
3-netborcalacak {müşterinin alacağı borcundan düştükten sonra kalan borç veya alacak}

şimdi ben 3 cü alanı string diye tanıtsam içinde rakam ve harfler olacağı için dönüştürmeyi nasıl yapıp sonucunda tablonun içinde ve dbgridde

şu görüntüyü nasıl yaparım lütfen bilenler yardım etsin

netborcalacak
500.000.000(B)
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

Mesaj gönderen ASE »

datasetin oncalc olayında o alana mask verebilirsin

Kod: Tümünü seç

if (borc-alacak)>0 then
begin
datasetbakiye.displaymask:='###,### A'
end
else
begin
datasetbakiye.displaymask:='###,### B'
end;
gibi birşey olabilir
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

Merhaba;

Kod: Tümünü seç

coalesce(cast(netborcalacak as float),0)
Bu şekilde string olan alanı floata çevirmiş vede bu alan nul dönse bile sorun vermeyecek şekilde yapmış olacaksın bunu sql koduna yerleştirisen hocam.

Sonrada Queryde bu alan için Display Format #,000 Yaparsan sorunu çözmüş olursun.

Hocam eğer yapamazsan sen kendi konud yaz buraya koddan hareketle yardımcı olmaya çalışalım.

Saygılarımla
Kolay gein.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
dr_ebuzer
Üye
Mesajlar: 30
Kayıt: 29 Eki 2005 08:26

dbgrid'de harf ve numara göstermek

Mesaj gönderen dr_ebuzer »

selam
ben şöyle yapıyorum
------------------------------------------------------
var
netsonuc:real;
begin
tblmusteri.first;
while not tblmusteri.eof do
begin
netsonuc:=tblmusteriborc.value-tblmusterialacak.value;
if tblmusteriborc.value>tblmusterialacak then
begin
tblmusterisonuc.value:=netsonuc;{burda net sonuçta yazan rakamın önüne (B) gelmesi gerekiyor) }

işte takıldığım yer ase arkadaşımın dediği şekilde edit mask yaptım ama sonuçta o harfi göstermiyor

pro imaj arkadaşımınkini deneyemedim çünkü sql ile aram henüz iyi değil
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
Siz bir sonuç çıkarmak için tabloyu baştan sona tarıyorsunuz. Bu kayıtların artması durumunda sakınca teşkil ediyor. Fahrettin abi bakiyeyi başka bir tabloda saklamamımızı tavsiye ediyor. Yani her hareket giriş çıkışında o ikinci tabloya borç alacak durumunu ekleyip çıkarıyoruz. Böyle yaparsanız işiniz daha kolaylaşır. Şöyleki o tabloda borc alacak sonuc ve de durum dediniz.
borc alacak alanlarınının sonucunu sonuc alanına atarsınız. sonuc alanı - ise durum kısmına B veya A yazarsınız.
Daha sonra dbgride alırken sonuc ve durum alanının string toplamını alırsınız.

Kolay gelsin.
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,

ibdatasete durum diye bir calculated alan tanımladım.
ibdataset in autocalcfield propertisi true olacak.

ibdatasetin oncalcfields ına aşağıdaki kodu yazdım.

Kod: Tümünü seç

procedure TForm1.IBDataSet1CalcFields(DataSet: TDataSet);
begin
       with   ibdataset1 do begin

                 if (fieldbyname('BORCU').AsInteger-fieldbyname('ALACAGI').AsInteger)>0  THEN
                          FIELDBYNAME('DURUM').ASSTRING:=INTTOSTR(fieldbyname('BORCU').AsInteger-fieldbyname('ALACAGI').AsInteger)+' B'
                      ELSE
                        FIELDBYNAME('DURUM').ASSTRING:=INTTOSTR(fieldbyname('ALACAGI').AsInteger-fieldbyname('BORCU').AsInteger)+' A';

       end;
end;


bu şekilde bakiyeyi veriyordu. Hatta borc alacağın rakamları ile oynadım. Anında yansıtıyordu.

Umarım işinizi görür. Öbür türlü de yukarıdaki mesajıma geçmeniz daha iyi olur. Fahrettin abi öyle tavsiye ediyor.

Kolay gelsin.
dr_ebuzer
Üye
Mesajlar: 30
Kayıt: 29 Eki 2005 08:26

dbgrid'de harf ve numara göstermek

Mesaj gönderen dr_ebuzer »

arkadaşlar cevaplarınız için çok teşekkür ederim ofenx arkadaşımdan şunu rica ediyorum bana bu yazdığın kodu ibdatabase ile değilde normal tablede bu kodu nasıl yazacağımı yazarsan herhalde problemim hallolacak çünkü yavaş yavaş sona doğru ierliyoruz
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,

Pek fark eden bir şey olmuyor sadece ibdataset table oluyor.

Kod: Tümünü seç

procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
      with   table1 do begin

                 if (fieldbyname('BORCU').AsInteger-fieldbyname('ALACAGI').AsInteger)>0  THEN
                          FIELDBYNAME('DURUM').ASSTRING:=INTTOSTR(fieldbyname('BORCU').AsInteger-fieldbyname('ALACAGI').AsInteger)+' B'
                      ELSE
                        FIELDBYNAME('DURUM').ASSTRING:=INTTOSTR(fieldbyname('ALACAGI').AsInteger-fieldbyname('BORCU').AsInteger)+' A';

       end;



end;


Kolay gelsin.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

ofenX yazdı:Fahrettin abi bakiyeyi başka bir tabloda saklamamımızı tavsiye ediyor. Yani her hareket giriş çıkışında o ikinci tabloya borç alacak durumunu ekleyip çıkarıyoruz.
Selamlar.

Bahsettiğiniz yöntem de çok sağlıklı değil, zira borç ve alacak alanlarını update ederken türlü sıkıntılar çıkabiliyor, koca koca programlar da dahi bu sıkıntı olabiliyor (gördüklerime istinaden söylüyorum bunu..).Ben böyle işlemler bir SP yazıyorum, kayıt sayısı ne kadar fazla olursa olsun hiçbir kasılma sözkonusu olmuyor..

Soruya istinaden;
Bahsettiğiniz işlemi bir sorgu ile yapmak daha stabil bir çözüm olacaktır.

Kolay gele..
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba
bLue aLonE yazdı:
Bahsettiğiniz yöntem de çok sağlıklı değil, zira borç ve alacak alanlarını update ederken türlü sıkıntılar çıkabiliyor, koca koca programlar da dahi bu sıkıntı olabiliyor (gördüklerime istinaden söylüyorum bunu..)..
Siz bu yöntemi bir table için mi söylüyorsunuz yoksa mesela ibx için de mi söylüyorsunuz. Yani sizin yönteminiz tüm db bileşenleri için mi geçerli yoksa bde için mi diyorsunuz? onu merak ettim. O türün örneğini Logo'nun Lks programında da görmüştüm. onlar da mssql kullanıyor.
Toplamlar için ayrı bir table kullanıyorlar.

Kolay gelsin.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Stored Procedure kullanabildiğiniz herhangi bir veritabanı...
dr_ebuzer
Üye
Mesajlar: 30
Kayıt: 29 Eki 2005 08:26

dbgrid'de harf ve numara göstermek

Mesaj gönderen dr_ebuzer »

selam arkadaşlar ofenx arkadaşımızın kodu güzel bir şekilde çalışıyor
hem kendisine hemde diğer cevaplayan arkadaşlara teşekkür ederim
Cevapla