Bir if problemi

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
belizahmet
Üye
Mesajlar: 10
Kayıt: 20 Mar 2004 01:28
Konum: Niğde/Bor

Bir if problemi

Mesaj gönderen belizahmet »

Aşağıdaki koddaki hatayı bulamadım.Veri tabanından SEC1YSO alanı için de veri varsa hata vermiyor SEC1YSO alanını içi boşsa hata veriyor.Bir mantıksal hata var ama nerede?Yardımlarınız için şimdiden teşekkürler


if (Donem2.Query1SEC1YSO.Text)=' ' then
begin
qrlabel136.Caption:=' ';
qrlabel150.Caption:=' ';
qrlabel162.Caption:=' ';
end
else
begin
if strtoint(Donem2.Query1SEC1YSO.Text)=5 Then qrlabel136.Caption:='Beş';
if strtoint(Donem2.Query1SEC1YSO.Text)=4 then qrlabel136.Caption:='Dört';
if strtoint(Donem2.Query1SEC1YSO.Text)=3 then qrlabel136.Caption:='Üç';
if strtoint(Donem2.Query1SEC1YSO.Text)=2 then qrlabel136.Caption:='İki';
if strtoint(Donem2.Query1SEC1YSO.Text)=1 then qrlabel136.Caption:='Bir';
qrlabel150.Caption:=inttostr((strtoint(Donem2.Query1.FieldByName('SEC1YSO').AsString))*(strtoint(form2.Table1. FieldByName('DS11').AsString)));
qrlabel162.Caption := NumStr(StrToCurr(qrlabel150.Caption));
end;
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Mesaj gönderen abdulkadir »

Kodu tes etme sansım olmadı ama umarım iş ğörür bir dene bakalım

Kod: Tümünü seç

 if (Donem2.Query1SEC1YSO.Text)=' ' then  begin
qrlabel136.Caption:=' ';
qrlabel150.Caption:=' ';
qrlabel162.Caption:=' ';
  end
   else
    begin
  case StrToint(Donem2.Query1SEC1YSO.Text) of
   0: qrlabel136.Caption := 'Sıfır';
   1: qrlabel136.Caption := 'Bir';
   2: qrlabel136.Caption := 'İki';
   3: qrlabel136.Caption := 'Üc';
   4: qrlabel136.Caption := 'Dört';
   5: qrlabel136.Caption := 'Beş';
    else
  qrlabel136.Caption := ''; //Hiç biri degil
end;

qrlabel150.Caption:=inttostr((strtoint(Donem2.Query1.FieldByName('SEC1YSO').AsString))
*(strtoint(form2.Table1. FieldByName('DS11').AsString)));
qrlabel162.Caption := NumStr(StrToCurr(qrlabel150.Caption));
end;
Basarılar.
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Kod: Tümünü seç

strtoint(Donem2.Query1SEC1YSO.Text)
Neden Text kullanıyorsun anlamadım. Şöyle kullanabilirsin:

Kod: Tümünü seç

Donem2.Query1SEC1YSO.AsInteger;
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

içinde herhangi bir değer yoksa hata oluşmaması için; @naile hn.ın dediği gibi;

AsString veya AsInteger gibi kullanmalısın.

Yani;
if strtoint(Donem2.Query1SEC1YSO.Text)=5 Then qrlabel136.Caption:='Beş';
nun yerine

Kod: Tümünü seç

if Donem2.Query1SEC1YSO.AsInteger = 5 then qrlabel136.Caption:='Beş'; 
şeklinde kullanabilirsin. StrToInt() e de gerek kalmaz.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
belizahmet
Üye
Mesajlar: 10
Kayıt: 20 Mar 2004 01:28
Konum: Niğde/Bor

Mesaj gönderen belizahmet »

Kodu aşağıdaki şekilde düzelttim ama yine aynı sonuç ÇALIŞMIYOR...qrlabel150'i NumStr function'u içinde kullanıyorum hata buradan kaynaklanabilir mi? hesaplamayı[((Donem2.Query1SEC1YSO.AsInteger)*(form2.Table1DS11.AsInteger));]işlemini sabitlere atayıp yaptım değişiklik olmadı

if Donem2.Query1SEC1YSO.AsString='' then
begin
qrlabel136.Caption:='';
qrlabel150.Caption:='';
qrlabel162.Caption:='';
end
else
begin
if Donem2.Query1SEC1YSO.AsInteger=5 then qrlabel136.Caption:='Beş';
if Donem2.Query1SEC1YSO.AsInteger=4 then qrlabel136.Caption:='Dört';
if Donem2.Query1SEC1YSO.AsInteger=3 then qrlabel136.Caption:='Üç';
if Donem2.Query1SEC1YSO.AsInteger=2 then qrlabel136.Caption:='İki';
if Donem2.Query1SEC1YSO.AsInteger=1 then qrlabel136.Caption:='Bir';
qrlabel150.Caption:=inttostr((Donem2.Query1SEC1YSO.AsInteger)*(form2.Table1DS11.AsInteger));
qrlabel162.Caption := NumStr(StrToCurr(qrlabel150.Caption));
end;

Kod yazım yanlışı mı Mantık hatası mı var bilemiyorum?....
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Çalışmıyor ne demek? hangi satırda ne hatası alıyorsun?? :?:
qrlabel150.Caption:=inttostr((Donem2.Query1SEC1YSO.AsInteger)*(form2.Table1DS11.AsInteger));
buradaki form2.Table1DS11.AsInteger bir alan mıdır? ve Table1 in field properties inde eklenmişmidir? Eklenmemiş ise

Kod: Tümünü seç

 form2.Table1.FieldByName('DS11').AsInteger 
şeklinde kullanmayı dene.. Aynı olay Donem2.Query1SEC1YSO.AsInteger için de geçerli.. :!: Yani bu SEC1YSO alanı ekli değilse eklemen lazım yada ParamByName() ile kullanman lazım... :!:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
belizahmet
Üye
Mesajlar: 10
Kayıt: 20 Mar 2004 01:28
Konum: Niğde/Bor

Mesaj gönderen belizahmet »

Sayın rsimsek Bey inanın her yolu denedim ama sonuç aynı....
Kodun son ve geniş hali Şöyle;

Kod: Tümünü seç

if (Donem2.Query1.fieldByName('SEC1YSO').AsString='')  then
begin
qrlabel136.caption:='';
qrlabel162.Caption:='';
qrlabel150.Caption:='';
end
else
begin
if Donem2.Query1SEC1YSO.AsInteger=5 THEN qrlabel136.Caption:='Beş';
if Donem2.Query1SEC1YSO.AsInteger=4 then qrlabel136.Caption:='Dört';
if Donem2.Query1SEC1YSO.AsInteger=3 then qrlabel136.Caption:='Üç';
if Donem2.Query1SEC1YSO.AsInteger=2 then qrlabel136.Caption:='İki';
if Donem2.Query1SEC1YSO.AsInteger=1 then qrlabel136.Caption:='Bir';
if form2.Table1.FieldByName('DS11').AsString='' then DS11:=0
else DS11:= form2.Table1.FieldByName('DS11').Asinteger;
SEC1:= Donem2.Query1.FieldByName('SEC1YSO').Asinteger;
qrlabel150.Caption:=inttostr(SEC1*DS11);
qrlabel162.Caption := NumStr(StrToCurr(qrlabel150.Caption));
end;

if Donem2.Query1SEC2YSO.Text='' then
begin
qrlabel137.Caption:='';
qrlabel163.Caption:='';
qrlabel151.caption:='';
end
else
begin
if strtoint(Donem2.Query1SEC2YSO.Text)=5 THEN qrlabel137.Caption:='Beş';
if strtoint(Donem2.Query1SEC2YSO.Text)=4 then qrlabel137.Caption:='Dört';
if strtoint(Donem2.Query1SEC2YSO.Text)=3 then qrlabel137.Caption:='Üç';
if strtoint(Donem2.Query1SEC2YSO.Text)=2 then qrlabel137.Caption:='İki';
if strtoint(Donem2.Query1SEC2YSO.Text)=1 then qrlabel137.Caption:='Bir';
if form2.Table1.FieldByName('DS12').AsString='' then DS12:=0
else DS12:= form2.Table1.FieldByName('DS12').Asinteger;
SEC2:= Donem2.Query1.FieldByName('SEC2YSO').Asinteger;
qrlabel151.Caption:=inttostr(SEC2*DS12);
qrlabel163.Caption := NumStr(StrToCurr(qrlabel151.Caption));
end;

//HESAPLAMALA
//
if (Donem2.query1.FieldByName('SEC1YSO').AsString<>'') and (Donem2.query1.FieldByName('SEC2YSO').AsString<>'') then qrlabel164.Caption:=inttostr(strtoint(qrlabel138.Caption)+strtoint(qrlabel140.Caption)+strtoint(qrlabel142.Caption)+strtoint(qrlabel143.Caption)+strtoint(qrlabel144.Caption)+strtoint(qrlabel145.Caption)+strtoint(qrlabel146.Caption)+strtoint(qrlabel147.Caption)+strtoint(qrlabel148.Caption)+strtoint(qrlabel149.Caption)+strtoint(qrlabel150.Caption)+strtoint(qrlabel151.Caption));
if (Donem2.query1.FieldByName('SEC1YSO').AsString='') and (Donem2.query1.FieldByName('SEC2YSO').AsString<>'') then qrlabel164.Caption:=inttostr(strtoint(qrlabel138.Caption)+strtoint(qrlabel140.Caption)+strtoint(qrlabel142.Caption)+strtoint(qrlabel143.Caption)+strtoint(qrlabel144.Caption)+strtoint(qrlabel145.Caption)+strtoint(qrlabel146.Caption)+strtoint(qrlabel147.Caption)+strtoint(qrlabel148.Caption)+strtoint(qrlabel149.Caption)+strtoint(qrlabel151.Caption));
if (Donem2.query1.FieldByName('SEC1YSO').AsString<>'') and (Donem2.query1.FieldByName('SEC2YSO').AsString='') then qrlabel164.Caption:=inttostr(strtoint(qrlabel138.Caption)+strtoint(qrlabel140.Caption)+strtoint(qrlabel142.Caption)+strtoint(qrlabel143.Caption)+strtoint(qrlabel144.Caption)+strtoint(qrlabel145.Caption)+strtoint(qrlabel146.Caption)+strtoint(qrlabel147.Caption)+strtoint(qrlabel148.Caption)+strtoint(qrlabel149.Caption)+strtoint(qrlabel150.Caption));
if (Donem2.query1.FieldByName('SEC1YSO').AsString='') and (Donem2.query1.FieldByName('SEC2YSO').AsString='') then qrlabel164.Caption:=inttostr(strtoint(qrlabel138.Caption)+strtoint(qrlabel140.Caption)+strtoint(qrlabel142.Caption)+strtoint(qrlabel143.Caption)+strtoint(qrlabel144.Caption)+strtoint(qrlabel145.Caption)+strtoint(qrlabel146.Caption)+strtoint(qrlabel147.Caption)+strtoint(qrlabel148.Caption)+strtoint(qrlabel149.Caption));

qrlabel167.Caption := NumStr(StrToCurr(qrlabel164.Caption));

//Ders saatlerini topla
if form2.Table1.FieldByName('TU45').AsString='' then aaa:=0
else aaa:=strtoint(form2.Table1.FieldByName('TU45').AsString);
if form2.Table1.FieldByName('M45').AsString='' then bbb:=0
else bbb:=strtoint(form2.Table1.FieldByName('M45').AsString);
if form2.Table1.FieldByName('F').AsString='' then ccc:=0
else ccc:=strtoint(form2.Table1.FieldByName('F').AsString);
if form2.Table1.FieldByName('S').AsString='' then ddd:=0
else ddd:=strtoint(form2.Table1.FieldByName('S').AsString);
if form2.Table1.FieldByName('YD').AsString='' then eee:=0
else eee:=strtoint(form2.Table1.FieldByName('YD').AsString);
if form2.Table1.FieldByName('DK').AsString='' then fff:=0
else fff:=strtoint(form2.Table1.FieldByName('DK').AsString);
if form2.Table1.FieldByName('R45').AsString='' then oo:=0
else oo:=strtoint(form2.Table1.FieldByName('R45').AsString);
if form2.Table1.FieldByName('MU45').AsString='' then jj:=0
else jj:=strtoint(form2.Table1.FieldByName('MU45').AsString);
if form2.Table1.FieldByName('B45').AsString='' then kk:=0
else kk:=strtoint(form2.Table1.FieldByName('B45').AsString);
if form2.Table1.FieldByName('SE').AsString='' then ll:=0
else ll:=strtoint(form2.Table1.FieldByName('SE').AsString);
 if form2.Table1.FieldByName('DS11').AsString='' then mm:=0
else mm:=strtoint(form2.Table1.FieldByName('DS11').AsString);
if form2.Table1.FieldByName('DS12').AsString='' then nn:=0
else nn:=strtoint(form2.Table1.FieldByName('DS12').AsString);
ggg:=(aaa+bbb+ccc+ddd+eee+fff+jj+kk+ll+mm+nn+oo);
qrlabel166.Caption:=inttostr(ggg);

//ağırlıklı ortalama için; ders ssati not çarpımını toplam ders saatine böl 
qrlabel165.Caption:=floattostr(trunc(strtoint(qrlabel164.Caption)/strtoint(qrlabel166.Caption)*100)/100);
İşin Özü 2 tane seçmeli Ders Alanım var Bu seçmeli ders notları Ders saatleri ile çarpılıp Sonuç rakam ve sayı ile yazdırılıyor Eğer SEC1YSO veya SEC2YSO notu girilmezse sonuçlara etki ederek ağırlıklı ortalamayı hesaplatmak istiyorum.Ama.....
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Program kodlarını

Kod: Tümünü seç

 [code] 
[/code] içinde yazarsanız daha okunaklı olur, sorunuzun anlaşılma ve cevaplanma ihtimalı artar :!:

Yine baştan alırsak, her ne kadar bir sürü kod yazdıysan da ben şöyle bir öneride daha bulunacağım (ki fazla kod yazmaktansa sorunu açık ve net yazmak daha yeğdir diye düşünüyorum) ;

senin Donem2.Query1SEC1YSO.Text text bir alan ise

Kod: Tümünü seç

if not Donem2.Query1SEC1YSO.IsNull and (StrToInt(Donem2.Query1SEC1YSO.Text)=5) ...... then ... 
şeklinde de yazabilirsin. yada ;

Kod: Tümünü seç

if not Donem2.Query1SEC1YSO.IsNull and (trim(Donem2.Query1SEC1YSO.Text)<>'') and (StrToInt(Donem2.Query1SEC1YSO.Text)=5) ...... then ... 
şeklinde de yazabilirsin.

Sorunu çözmez ise hangi satırda ne hatası aldığını yazarsan birlikte çözmeye çalışırız.

Kolay gelsin.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
belizahmet
Üye
Mesajlar: 10
Kayıt: 20 Mar 2004 01:28
Konum: Niğde/Bor

Mesaj gönderen belizahmet »

Sayın rsimsek Önerilerinizi Uyguladım ve uygulayacağım.Hatayı buldum Veri tabanı olarak BDE kullanıyorum. SQL'de ve Programda bütün SEC1YSO alanlarına boşluk kontrolü koydum.Böylece işlemim tamamlandı.Çok Teşekkür Ederim.Elimdeki programı degerlendirmenizi istiyorum.Eger ilgilenirseninz size nasıl ulaştırabilirim.Yayınlanmaya değer bulurda Dosyalar kısmında yayınlarsanız sevinirim.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Problemi çözmenize sevindim. İncelemek için vakit olmadığını üzülerek belirtmek isterim. Hem her yiğidin bir yoğurt yiyişi vardır. Önemli olan işinizin görülmesi... :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla