puantaj hesaplama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

puantaj hesaplama

Mesaj gönderen erdogan_ozkaya »

Arkadaşlar, bir puantaj yapmak istiyorum öncelikle elinde örnek olan varda paylaşırsa sevinirim :) aşağıdaki kod ile günleri sayıp hesaplatıyorum fakat 'X1 : Inc(GUN_X_1);' bu satırda hata veriyor nasıl çözebilirim ?

teşekkürler

Kod: Tümünü seç

procedure TPROJE_PUANTAJ_CIZELGESI.btn2Click(Sender: TObject);
var
      GUN_X_1,
      GUN_X_2,
      GUN_X_3,
      GUN_X_4,
      GUN_RT,
      GUN_HT,
      GUN_IZ,
      GUN_R,
      GUN_EG,
      GUN_YG,
      GUN_YI,
      GUN_UI : Integer;
      SAY: Integer;
Begin
    qryPUANTAJ_DB.DisableControls;
    qryPUANTAJ_DB.First;
    While not qryPUANTAJ_DB.Eof do
    Begin
        GUN_X_1  :=0;
        GUN_X_2  :=0;
        GUN_X_3  :=0;
        GUN_X_4  :=0;
        GUN_RT   :=0;
        GUN_HT   :=0;
        GUN_IZ   :=0;
        GUN_R    :=0;
        GUN_EG   :=0;
        GUN_YG   :=0;
        GUN_YI   :=0;
        GUN_UI   :=0;
        for SAY :=  01  to 31 do
            Begin
            Case qryPUANTAJ_DB.FieldByName({'A'+}IntToStr(SAY)).Asinteger of
                  X1 : Inc(GUN_X_1);
                  X2 : Inc(GUN_X_2);
                  X3 : Inc(GUN_X_3);
                  X4 : Inc(GUN_X_4);
                  R  : Inc(GUN_R);
                  RT : Inc(GUN_RT);
                  HT : Inc(GUN_HT);
                  IZ : Inc(GUN_IZ);
                  EG : Inc(GUN_EG);
                  YG : Inc(GUN_YG);
                  YI : Inc(GUN_YI);
                  UI : Inc(GUN_UI);
            End;
        End;
        qryPUANTAJ_DB.Edit;
        qryPUANTAJ_DB.FieldByName('GUN_X_1').Asinteger :=GUN_X_1;
        qryPUANTAJ_DB.FieldByName('GUN_X_2').Asinteger :=GUN_X_2;
        qryPUANTAJ_DB.FieldByName('GUN_X_3').Asinteger :=GUN_X_3;
        qryPUANTAJ_DB.FieldByName('GUN_X_4').Asinteger :=GUN_X_4;
        qryPUANTAJ_DB.FieldByName('GUN_RT').Asinteger  :=GUN_RT;
        qryPUANTAJ_DB.FieldByName('GUN_HT').Asinteger  :=GUN_HT;
        qryPUANTAJ_DB.FieldByName('GUN_IZ').Asinteger  :=GUN_IZ;
        qryPUANTAJ_DB.FieldByName('GUN_R').Asinteger   :=GUN_R;
        qryPUANTAJ_DB.FieldByName('GUN_EG').Asinteger  :=GUN_EG;
        qryPUANTAJ_DB.FieldByName('GUN_YG').Asinteger  :=GUN_YG;
        qryPUANTAJ_DB.FieldByName('GUN_YI').Asinteger  :=GUN_YI;
        qryPUANTAJ_DB.FieldByName('GUN_UI').Asinteger  :=GUN_UI;
        qryPUANTAJ_DB.Post;
        qryPUANTAJ_DB.Next;
    End;
    qryPUANTAJ_DB.EnableControls;
end;
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: puantaj hesaplama

Mesaj gönderen erdogan_ozkaya »

aslında rakam yapınca kabul ediyor ama harf olunca hata veriyor
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: puantaj hesaplama

Mesaj gönderen Lord_Ares »

Aynı başlıkta iki gönderi açmışsınız, bence onu baştan düzeltmenizde fayda var. Paylaştığınız kod da sorun yok . Hata sizde, integer bir alanda string kullanmaya çalışıyorsunuz.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: puantaj hesaplama

Mesaj gönderen erdogan_ozkaya »

tamam sildim :)


Arkadaşlar aşağıdaki tablonun hesabını yapmak istiyorum

V1 kaç gün gelmişse GUN_X_1 okadar yazsın veya HT (HAFTA TATİLİ) kaç günse onu yazsın yardımlarınız için teşekkür ederim.

Resim
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: puantaj hesaplama

Mesaj gönderen erdogan_ozkaya »

çözemedim bir türlü :(
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: puantaj hesaplama

Mesaj gönderen erdogan_ozkaya »

Arkadaşlar rakam yerine harf sayınca hata veriyor :( fikri olan varmı acaba ?

teşekkürler

Kod: Tümünü seç

procedure TPROJE_PUANTAJ_CIZELGESI.btn3Click(Sender: TObject);
var
NORMAL_MESAI : Integer;
SAY: Integer;
Begin
    qryPUANTAJ_DB.DisableControls;
    qryPUANTAJ_DB.First;
    While not qryPUANTAJ_DB.Eof do
    Begin
         NORMAL_MESAI :=0;
        for SAY := 01 to 5 do
            Begin
            Case qryPUANTAJ_DB.FieldByName(IntToStr(SAY)).Asinteger of
            0:Inc(NORMAL_MESAI); ///HARF YAPINCA HATA VERIYOR
            End;
        End;
        qryPUANTAJ_DB.Edit;
        qryPUANTAJ_DB.FieldByName('NORMAL_MESAI').Asinteger := NORMAL_MESAI;
        qryPUANTAJ_DB.Post;
        qryPUANTAJ_DB.Next;
    End;
    qryPUANTAJ_DB.EnableControls;
end;
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: puantaj hesaplama

Mesaj gönderen erdogan_ozkaya »

Arkadaşlar,

takıldım kaldım projemde ilerleyemiyorum :( 2 haftadır bir türlü çıkamadım işin içinden yardımcı olabilecek biri.... :)

teşekkürler
Kullanıcı avatarı
kimimben
Üye
Mesajlar: 129
Kayıt: 28 Oca 2016 04:41
Konum: İstanbul

Re: puantaj hesaplama

Mesaj gönderen kimimben »

erdogan_ozkaya yazdı:

Kod: Tümünü seç

    qryPUANTAJ_DB.FieldByName(IntToStr(SAY)).Asinteger 
FieldByName şöyle bir anlam ifade etmektedir.
ad,isim yoluyla alan.

Şimdi bu kısa açıklamadan sonra sizi tekrar düşünmeye davet ediyorum.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: puantaj hesaplama

Mesaj gönderen erdogan_ozkaya »

hocam,

rakam olarak çalışıyor harf olunca hata veriyor ? çözmedim zaten :( paylaşmak istediğin bir şey varsa minnettar olacağım :)

teşekkürler
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: puantaj hesaplama

Mesaj gönderen Lord_Ares »

Aslında arkadaşım açıkça size gösterdi ama gözünüzden kaçıyor sanırım. Yazdığınızdan ,Delphi de çok yeni olduğunuz anlıyorum. Dolayısı ile size nacizane fikrim delphi eğitimlerini incelemeniz. Çünkü delphi de başlangıç seviyesinde bile olsanız değişkenler ve tipleri hakkında fikrinizin olması gerekir. Kodunuzda arkadaşımın belirttiği gibi SAY değişkeni integer tipte bir değişken. Alabileceği değerler rakamsal olmalı. Siz yukarıdaki kullanım şekliniz tamamen yanlış.
1) qryPUANTAJ_DB.FieldByName(IntToStr(SAY)).Asinteger ile kullanmak istediğiniz alanı belirtirken inttostr ile tip dönüşümü yapmanız yanlış. Doğru kulanım şekli ile deneyin.
2)Normal_ MEsai integer (rakamsal) tipte bir değişken ise, harf girdiğinizde hata vermesi normal.
Buları gözden geçirerek kodlamanızı baştan oluşturmanızı tavsiye ediyorum. Kolay gelsin
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: puantaj hesaplama

Mesaj gönderen erdogan_ozkaya »

hocam :( bilsem zaten sormazdım :)
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: puantaj hesaplama

Mesaj gönderen erdogan_ozkaya »

Arkadaşlar,

bir türlü işin içinden çıkamadım :(
Kullanıcı avatarı
RADCoder
Üye
Mesajlar: 129
Kayıt: 21 Ara 2013 04:03

Re: puantaj hesaplama

Mesaj gönderen RADCoder »

Arkadaşlar haklıdır, siz sütun ismini tip dönüşümü ile kullanamazsınız..
Zaten sonda Asİnteger ifadeniz var..

Kod: Tümünü seç

qryPUANTAJ_DB.FieldByName('SAY').Asinteger
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: puantaj hesaplama

Mesaj gönderen erdogan_ozkaya »

hocam her türlü denedim olmadı bir türlü çözemedimki aşağıdaki kod çalıştıramadım bir türlü


özetle
V1 kaç gün gelmişse GUN_X_1 okadar yazsın veya HT (HAFTA TATİLİ) kaç günse onu yazsın


Resim

Kod: Tümünü seç

procedure TForm1.btn3Click(Sender: TObject);
  var
    NORMAL_MESAI : Integer;
    i: Integer;

Begin
    qryPUANTAJ_DB.DisableControls;
    qryPUANTAJ_DB.First;
    While not qryPUANTAJ_DB.Eof do
    Begin
        NORMAL_MESAI :=0;
        for i := 02 to 05 do
            Begin
            Case qryPUANTAJ_DB.FieldByName(IntToStr(i)).AsInteger of

                 0:Inc(NORMAL_MESAI);
            End;
        End;
        qryPUANTAJ_DB.Edit;
        qryPUANTAJ_DB.FieldByName('NORMAL_MESAI').Asinteger := NORMAL_MESAI;
        qryPUANTAJ_DB.Post;
        qryPUANTAJ_DB.Next;
    End;
    qryPUANTAJ_DB.EnableControls;

end;
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: puantaj hesaplama

Mesaj gönderen esistem »

erdogan_ozkaya yazdı:

Kod: Tümünü seç

procedure TForm1.btn3Click(Sender: TObject);
  var
    NORMAL_MESAI : Integer;
    i: Integer;
Begin
    qryPUANTAJ_DB.DisableControls;
    qryPUANTAJ_DB.First;
    While not qryPUANTAJ_DB.Eof do
    Begin
        NORMAL_MESAI :=0;
        for i := 02 to 05 do
            Begin
            Case qryPUANTAJ_DB.FieldByName(IntToStr(i)).AsInteger of

                 0:Inc(NORMAL_MESAI);
            End;
        End;
        qryPUANTAJ_DB.Edit;
        qryPUANTAJ_DB.FieldByName('NORMAL_MESAI').Asinteger := NORMAL_MESAI;
        qryPUANTAJ_DB.Post;
        qryPUANTAJ_DB.Next;
    End;
    qryPUANTAJ_DB.EnableControls;

end;
Ne yapmak istediğinizi anlamamakla birlikte kodda gördüğüm hatanızı düzeltmenize yardımcı olayım;
for next döngüsünde 2 den 5 e kadar say demişsiniz, alanlarınızda gördüğüm kadarı ile A01,A02..... şeklinde,
for next döngüsünde, öncelikle dönen değer 02,03,04 gibi olmayacaktır 2,3,4 şeklinde olacaktır, FieldByName kısmına da 2,3,4... şeklinde basacaktır ki buda hatalı olur zira tablolarda alan isimleri rakam ile başlayamaz, A02 şeklinde yazmasınız istiyorsanızda;

Kod: Tümünü seç

            Case qryPUANTAJ_DB.FieldByName('A0'+IntToStr(i)).AsInteger of
şeklinde yapmalısınız, ama bu kodda delphide çalışırımı onuda bilemem
Cevapla