DBEdit Toplama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
mesuta
Üye
Mesajlar: 8
Kayıt: 30 Eyl 2017 11:32

DBEdit Toplama

Mesaj gönderen mesuta » 30 Eyl 2017 11:38

Öncelikle Tüm Herkeze
Selamünaleyküm.
bir program yazıyorum fakat bir yerde takılı kaldım
Orneğin program icinde Dbedit1 - Dbedit2 ve Dbedit3 var
dbedit1 ile dbedit2 çarpma yada toplama işlemini dbedit3 içine otomatik giriş yapmasını istiyorum
bu konuda uzman yardımlarınıza ihtiyacım var
şimdiden ellerinize sağlık..
görüşmek üzere
örnk...

procedure TForm23.BitBtn2Click(Sender: TObject);
VAR
s1,s2,s3,s4,s5 :integer;
btop,gtop :integer;
kdv :real;

begin
s1:=StrToInt(DBEdit61.Text);
s2:=StrToInt(DBEdit62.Text);
s3:=StrToInt(DBEdit63.Text);
s4:=StrToInt(DBEdit64.Text);
s5:=StrToInt(DBEdit65.Text);
btop:=s1+s2+s3+s4+s5;
DBEdit58.Text:= IntToStr(btop);
kdv:= btop*1.18;
DBEdit24.Text:= floattostr(kdv);
end;

mesuta
Üye
Mesajlar: 8
Kayıt: 30 Eyl 2017 11:32

Re: DBEdit Toplama

Mesaj gönderen mesuta » 02 Eki 2017 08:34

s.a tekrardan
Bir yardım eden Dost yokmu.?

ertank
Üye
Mesajlar: 835
Kayıt: 11 Eyl 2015 11:45

Re: DBEdit Toplama

Mesaj gönderen ertank » 02 Eki 2017 09:31

Aleyküm selam, sorduğunuz soruyu net bir şekilde anlayamadım. Daha farklı ifade ile sormanız ya da sorunu gösteren küçük bir proje paylaşmanız mümkün müdür?

Eğer foruma dosya eki olarak yükleme yapamazsanız www.dosya.tc sitesi üzerinen yükleme yapıp bağlantı adresini burada paylaşabilirsiniz.

mesuta
Üye
Mesajlar: 8
Kayıt: 30 Eyl 2017 11:32

Re: DBEdit Toplama

Mesaj gönderen mesuta » 02 Eki 2017 10:14

allah razı olsun.
kucuk bır proje access db var bunun ıcın yeter gıbı
bir tane sıparıs formu programı
bu access db ıcınde 15 tane daha kayıt yerı var
orn...
dbedit1
dbedit2
.
.
diye devam ediyor
modul ıcınde Dbedit1 - 2 - 3 ve 4 malzeme miktarı veriyor
dbedit5 - 6 - 7 - 8 bu malzemenin birim fiyatları veriliyor.
bunları dbedit5 * dbedit1 = dbedit9 olacak
sonrada dbedit9 - 10 - 11 - 12 toplam alınıp dbedit13 yazacak..


orn kod...
procedure TForm23.BitBtn4Click(Sender: TObject);
VAR
s12,s22,s32,s42,s52,s62,s72,s82,s92,s102 :integer;
a12,a22,a32,a42,a52,a62,a72,a82,a92,a102 :integer;
topla2,gtop,gtop12,top12 :integer;
kdv2 :real;
begin
s12:=StrToInt(DBEdit11.Text);
s22:=StrToInt(DBEdit50.Text);
a12:=s12*s22;
DBEdit71.Text:= IntToStr(a12);
s32:=StrToInt(DBEdit12.Text);
s42:=StrToInt(DBEdit51.Text);
a22:=s32*s42;
DBEdit72.Text:= IntToStr(a22);
s52:=StrToInt(DBEdit13.Text);
s62:=StrToInt(DBEdit52.Text);
a32:=s52*s62;
DBEdit73.Text:= IntToStr(a32);
s72:=StrToInt(DBEdit14.Text);
s82:=StrToInt(DBEdit53.Text);
a42:=s72*s82;
DBEdit74.Text:= IntToStr(a42);
s92:=StrToInt(DBEdit15.Text);
s102:=StrToInt(DBEdit54.Text);
a52:=s92*s102;
DBEdit75.Text:= IntToStr(a52);
topla2:=a12+a22+a32+a42+a52;
DBEdit60.Text:= IntToStr(topla2);
kdv2:= topla2*1.18;
DBEdit57.Text:= floattostr(kdv2);
end;

ertank
Üye
Mesajlar: 835
Kayıt: 11 Eyl 2015 11:45

Re: DBEdit Toplama

Mesaj gönderen ertank » 02 Eki 2017 03:03

Öncelikle paylaştığınız kod ile ilgili olarak Pascal programlama dilinde genel kabul görmüş kullanım şekli olarak;
- begin..end, try..finally..end gibi bloklar arasında kalan kod satırlar en az iki boşluk verilerek yazılır. Böylece kod okunabilirliği artırılmış olur.
- Alan isimleri Kelimlerin ilk harfleri büyük olarak kullanılır. Birden fazla kelime var ise her bir kelimenin ilk harfi büyük yazılır.
Kural olmamak ile beraber bu kodlama yöntemlerini kullanmak yardım ihtiyacınız olduğunda paylaştığınız kod okunabilirliğini ve anlaşılabilirliğini artıracaktır.

Ayrıca; forumda mesaj yazar iken metin yazılan yerin altındaki "Tam Editör & Önizleme" butonunu tıklar iseniz kullanabileceğiniz üzerinde küçük butonlar olan bir bar açılır. Burada üzerinde "</>" şekli olan buton sizin için paylaşacağınız kod yazmanız adına gerekli ifadeyi metin içine yazacaktır. Kodunuzu bu ifade arsasında kalacak şekilde paylaşır iseniz okunması daha da kolay olacaktır.

Sorunuza gelince;
Her ne kadar hala problemin ne olduğunu açıkça anlayamasam dahi tahminim sizin DBEdit bileşenlerinin içine yaptığınız atamaların database içine kaydedilmediği yönünde. Gördüğüm kadarıyla sizin örnek kodunuz TDBEdit bileşenini sanki bir TEdit gibi kullanmış.

TDBEdit bileşeni bir TDataSource ile birlikte çalışır. Seçilen DataSource içindeki ilgili alanı DataField özelliğine atama yaparsınız. Böylece TDBEdit bileşeni ilgili TDataSet açıldığı zaman otomarik olarak seçili kayıt bilgilerini herhangi bir kod yazmadan otomatik görmenizi sağlar.

Eğer TDBEdit.DataSource.DataSet.State = dsBrowse ise bilgi girişine izin vermez. Sadece hangi alanı göstermesi gerekiyor ise o alanın kayıtlı değerini gösterir.

Eğer uygulamanızda kullandığınız bileşenlerin TDBEdit.DataSource ve TDBEdit.DataField özellikleri dolu ise; ilgili kod çalışmadan önce

Kod: Tümünü seç

TDBEdit.DataSource.DataSet.Append;
veya

Kod: Tümünü seç

TDBEdit.DataSource.DataSet.Edit;
gibi bir komut çalıştırdı iseniz aşağıdaki şekilde bir kod yazmanız mümkün olabilir.

Kod: Tümünü seç

procedure TForm23.BitBtn4Click(Sender: TObject);
var
  S12, S22, S32, S42, S52, S62, S72, S82, S92, S102: Integer;
  A12, A22, A32, A42, A52, A62, A72, A82, A92, A102: Integer;
  Topla2, GTop, GTop12, Top12: Integer;
  Kdv2: Double;  // Real türü Double türünün takma adıdır. Ana veri türü Double'dır.
begin
  S12 := StrToInt(DBEdit11.Text);
  S22 := StrToInt(DBEdit50.Text);
  A12 := S12 * S22;
  DBEdit71.DataSource.DataSet.FieldByName(DBEdit71.DataField).AsInteger := A12;

  S32 := StrToInt(DBEdit12.Text);
  S42 := StrToInt(DBEdit51.Text);
  A22 := S32 * S42;
  DBEdit72.DataSource.DataSet.FieldByName(DBEdit71.DataField).AsInteger := A22;

  S52 := StrToInt(DBEdit13.Text);
  S62 := StrToInt(DBEdit52.Text);
  A32 := S52 * S62;
  DBEdit73.DataSource.DataSet.FieldByName(DBEdit71.DataField).AsInteger := A32;

  S72 := StrToInt(DBEdit14.Text);
  S82 := StrToInt(DBEdit53.Text);
  A42 := S72 * S82;
  DBEdit74.DataSource.DataSet.FieldByName(DBEdit71.DataField).AsInteger := A42;

  S92 := StrToInt(DBEdit15.Text);
  S102 := StrToInt(DBEdit54.Text);
  A52 := S92 * S102;
  DBEdit75.DataSource.DataSet.FieldByName(DBEdit71.DataField).AsInteger := A52;

  Topla2 := A12 + A22 + A32 + A42 + A52;
  DBEdit60.DataSource.DataSet.FieldByName(DBEdit71.DataField).AsInteger := Topla2;

  Kdv2 := Topla2 * 1.18;
  DBEdit57.DataSource.DataSet.FieldByName(DBEdit71.DataField).AsFloat := Kdv2;
end;

mesuta
Üye
Mesajlar: 8
Kayıt: 30 Eyl 2017 11:32

Re: DBEdit Toplama

Mesaj gönderen mesuta » 03 Eki 2017 04:15

tşk ederim ertan bey . size ozel bir mesaj attım.. okursanız sevinirim
mesut@haslider.com mail adresim
gorusmek uzere

ertank
Üye
Mesajlar: 835
Kayıt: 11 Eyl 2015 11:45

Re: DBEdit Toplama

Mesaj gönderen ertank » 03 Eki 2017 04:24

mesuta yazdı:
03 Eki 2017 04:15
tşk ederim ertan bey . size ozel bir mesaj attım.. okursanız sevinirim
mesut@haslider.com mail adresim
gorusmek uzere
Merhaba, özel mesaj kutusu sanırım yeni mesaj kabul etmiyor. Gelen bir bilgi yok. Buraya yazabilirsiniz.

mesuta
Üye
Mesajlar: 8
Kayıt: 30 Eyl 2017 11:32

Re: DBEdit Toplama

Mesaj gönderen mesuta » 03 Eki 2017 05:38

teşekkür ederim ilginize
şimdiden hakkınızı helal edin.
bir tane satınalma modulu yazdım ado connection - ado query ve datasource var ve gayet saglıklı calısıyor. zaten toplamda 20 civarı DBEdit var
sadece söyle bir sıkıntım oldu.
orn olarak

malzema adı 1 istenilen miktar 1 birim fiyat 1 toplam 1
malzema adı 2 istenilen miktar 2 birim fiyat 2 toplam 2
malzema adı 3 istenilen miktar 3 birim fiyat 3 toplam 3
Genel toplam
burada bulunanlar hepsı DBEdit... sadece yapamadıgım istenilen miktar ile birim fiyatı çarpacak toplam olan DBedit bolumune yazacak.
sonrada toplam1 - 2 ve 3 olan DBEditleri genel toplam bölümüne toplamasını istiyorum.

Meraktan ugrasarak yazdıgım bır uygulama oldu. arkadaslar manuel gırdıgı surece sıkıntımız yok.. ama malum hatun tarafı olunca bıraz ınatcı oluyorlar
engın bılgılerın ıcın sımdıden tsş ederım tekrardan
hakkını helal et
gorusmek uzere

ertank
Üye
Mesajlar: 835
Kayıt: 11 Eyl 2015 11:45

Re: DBEdit Toplama

Mesaj gönderen ertank » 03 Eki 2017 08:21

Projenin ilgili dosyalarını paylaşabilir misiniz?

Lord_Ares
Üye
Mesajlar: 997
Kayıt: 15 Eki 2006 03:33
Konum: Çorlu

Re: DBEdit Toplama

Mesaj gönderen Lord_Ares » 04 Eki 2017 11:26

Mesuta, parasal değerler tutacağın değişkenlerini integer değilde , currency olarak tutmanı tavsiye ederim. Çünkü editlere girilen veya matematiksel işlem sonucunda ortaya çıkan rakamlar her zaman (10- 15-20 ) gibi rakamlar olmayabilir. Örneğin çıkan sonuç 1,37 gibi bir rakam olursa programın hata verecektir. ( Birde sanırım kdv yi yanlış hesaplatıyorsun..)

mesuta
Üye
Mesajlar: 8
Kayıt: 30 Eyl 2017 11:32

Re: DBEdit Toplama

Mesaj gönderen mesuta » 06 Eki 2017 09:42

Tüm Dostlardan Allah razı olsun
sorunu çözdük çok şükür
vakit ayıran herkeze tekrar teşekkürler
selametle..hayırlı cumalar

archim
Üye
Mesajlar: 2
Kayıt: 09 Eki 2017 11:30

Re: DBEdit Toplama

Mesaj gönderen archim » 09 Eki 2017 11:52

haddim olmayarak ufak bir ilave yapmak isterim. veritabanı mantığı gereği gereksiz bilgiler veritabanına kaydedilmez. bu tür toplama ve hesaplama alanları datasetlerde calculated biçiminde tanımlanıp, oncalcfields olayına gerekli formuller yazılır. datasetteki ilgli satırlar her görüntülendiğinde veya kayıt girildiğinde otomatik hesaplanır. böylece hesaplama işi kullanıcılara bırakılmaz. fakat bu bilgi veritabanına kaydedilmez. (istenirse ayrı bir alana tabiiki kopyalanabilir)

mesuta
Üye
Mesajlar: 8
Kayıt: 30 Eyl 2017 11:32

Re: DBEdit Toplama

Mesaj gönderen mesuta » 12 Eki 2017 09:48

eyvallah archim kardesim
degerli bilgi paylasımın ıcın tesekkür ederim.

Cevapla