Benim Sorunum DBEditlerde Noktalı ,Virgüllü,Sayılarda..

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
HBV
Üye
Mesajlar: 114
Kayıt: 30 Haz 2005 09:28

Benim Sorunum DBEditlerde Noktalı ,Virgüllü,Sayılarda..

Mesaj gönderen HBV »

Benim Sorunum DBEditlerde Noktalı ,Virgüllü,Sayılarda(Örnek: 7.5 - 23,6)
Çıkarma,Bölme,Toplama işlemi yaparken Hata veriyor.Yani;
DBEdit1=35 / DBEdit2=7,5 = 4.66 Sonucu Aşağıdaki Kodlarla alamıyorum.

Kod: Tümünü seç

Label1.Caption:=inttostr( strtoint(dbedit1.text) / strtoint(dbedit2.text) );
veya

Kod: Tümünü seç

Var
Sayi1,sayi2:Integer;
begin
Sayi1:=StrToFloat(DBEdit1.Text);
Sayi2:=StrToFloat(DBEdit2.Text);
Label1.Caption:=FloatToStr(Sayi1 / Sayi2);
end;
Bu DBeditler Bazen boş da olabiliyor.Yukarıda kodlar her iki şekildede hata veriyor,Yardım ederseniz çok memnun olurum.(Alanlar Varchar Olarak tanımlı)
vesper
Üye
Mesajlar: 78
Kayıt: 28 Tem 2005 08:23

Mesaj gönderen vesper »

öncelikle sisteminde ondalık sembolü ne ise (, yada .) diğer tipe çevirmen gerekiyor. örneğin ondalık sembolü , ise 2.6 stringini 2,6 ya çevirmelisin.
daha sonra bölen yani dbedit2 0 a eşitmi diye bakmalı 0 değilse bölme yapmalısın. Bu arada değerler null ise veya boşluk ise 0 olarak değerlendirmelisin. Sanırım birde editteki sayıyı bölmeye çalışmak yerine label1.caption:=floattostr(table.field[n].asfloat/table.field[m].asfloat) diye hesaplarsan hata vermez sanırım.
birde unutmadan

Kod: Tümünü seç

Var 
Sayi1,sayi2:Integer; 
demişsin sonrada

Kod: Tümünü seç

Sayi1:=StrToFloat(DBEdit1.Text); 
Sayi2:=StrToFloat(DBEdit2.Text); 
ile integer sayılara float değer atamışsın. Kolay gelsin
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Atadığın değişken tiplerine dikkat etmelisin. Bölüm sonuçları küsüratlı çıkacağından real / float değişken çevrimi FloatToStr(...) yi kullanmalısın..

Bir de DBEdit ler boş olabilir demişsin.. O zaman da try / except / end; bloğunu kullanabilirsin;

Kod: Tümünü seç

begin
  try
    Label1.Caption:=FloatToStr(StrToFloat(DBEdit1.Text) / StrToFloat(DBEdit2.Text));
  except
    Label1.Caption:='....';
  end;
end;
  
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
a_o
Üye
Mesajlar: 84
Kayıt: 18 Eki 2005 04:41
Konum: Tekirdağ

Mesaj gönderen a_o »

merhaba , veya . işlemlerini ayarlamak için editlerin çıkışına aşağıdaki kodu yazabilirsin. böylece ayraçların hepsi . haline dönüşmüş olur

Kod: Tümünü seç

DBEdit1.Text:=AnsiReplaceText(DBEdit1.Text,',','.');


kolay gelsin
Kullanıcı avatarı
HBV
Üye
Mesajlar: 114
Kayıt: 30 Haz 2005 09:28

Mesaj gönderen HBV »

Yukarıdaki kodları denedim Maalesef Olmuyor,Verdiği hata ;

.........exception class Econver Error With message"7.5 is not avalit Floating.Point value" Process Stopped.

Burada a valit olduğunu(Kural dışı) nokta göstermede hata olduğunu söylüyor.

program çalıştığı anda DBEditlerde değer olsun olmasın veya ben değer gireyim veya girmiyeyim Label'de boş sa "0" Doluysa Labelde sonuç gösterecek. olaylarda mı bir yanlışım var....

Kod: Tümünü seç

if edit1.text='' then
begin 
Dbedit1.text:=0;
end else
Label1.Caption:=inttostr( strtoint(dbedit1.text) / strtoint(dbedit2.text) );
end;
yukarıdaki kod da çalışmadı.."0" değer ne olursa olsun ama yemedi.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

merhaba,

sanırım yanlış biliyor olabilirimde kodunda inttostr kullanıyorsun integeri stringe çeviriyorsun stringi ise integere çeviriyorsun ama edit lere girdiğin sayılar float. yani noktalı integer tam sayı değil bu yüzden hata veriyor olabilir.

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ı
mucar
Kıdemli Üye
Mesajlar: 247
Kayıt: 17 May 2005 01:14

Mesaj gönderen mucar »

rsimsek hocamın verdiği kod işinizi görür. hata çıkmasının nedeni ise Dbedit kullanmanız. veritabanında gerekli alanları doğru şekilde tanımlamalısınız. integer değil float olarak tanımlamalısınız. zira dbedit yerine edit kullanıp bunu denerseniz, sorunun bundan kaynaklandığını görürsünüz. kolay gelsin
"Evine bakmaktan aciz olan; ilerici, üç kıtaya hükmeden ecdadın mı gerici?"
Kullanıcı avatarı
HBV
Üye
Mesajlar: 114
Kayıt: 30 Haz 2005 09:28

Mesaj gönderen HBV »

Evet Bende Editlere aktarmayı düşünüyordum...RŞimsek Hocamın Kodlarınıda deniyorum.......Zaten DBEdit Olması problem..Tam sayı girmek lazım ama proğram gereği Noktalı veya virgül girilmek zorunda.
Kullanıcı avatarı
HBV
Üye
Mesajlar: 114
Kayıt: 30 Haz 2005 09:28

Mesaj gönderen HBV »

Aşağıdaki Kodlar DBEdit ler doluyken çalışıyor.Üzerinde tekrar işlem normal ama Silip yeni değer yazmağa kalkarsam hata veriyor.
RSimsek Hocamın Kod u iş görecek gibi..sağolsun.

Kod: Tümünü seç

begin 
try 
Label1.Caption:=FloatToStr(StrToFloat(DBEdit1.Text) / StrToFloat(DBEdit2.Text)); 
except 
DBEdit1.Text:='....'; 
end; 
end;
.......

Kod: Tümünü seç

DBEdit1.Text:=AnsiReplaceText(DBEdit1.Text,',','.');
Bu kodu eklersem değiştirme yapıyor.....
Cevapla