Saat toplamı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
dogan
Üye
Mesajlar: 173
Kayıt: 17 Eki 2014 10:11

Saat toplamı

Mesaj gönderen dogan »

İyi akşamlar.


Listview de seçili olan satırları, databasedeki saat süresine göre toplama işlemi yaptırıyorum, ancak saat toplamı 24 geçince 01 olarak toplama yapıyor.

Örnek:
23:00:00 + 05:00:00 = 28:00:00 olması gerekirken, 23:00:00 + 05:00:00 = 04:00:00 olarak vermekte saat toplamını istediğim gibi nasıl yaptırabilirim...

Kod: Tümünü seç

procedure TForm11.Button2Click(Sender: TObject);
var
  Saat: TTime;
begin
  try
    with ListView1 do
    begin
      if Items.Count > 0 then
      begin
        for I := 0 to Items.Count - 1 do
        begin
          if Items[I].Selected then
          begin
            try
              with ListemQuery do
              begin
                Close;
                SQL.Clear;
                SQL.Add('Select * From LIST');
                Prepared := True;
                Open;
                if Not IsEmpty then
                begin
                  while Not Eof do
                  begin
                    Saat := Saat + FieldByName('TOTALSAAT').Value;
                  end;
                end;
              end;
            except
            end;
          end;
        end;
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1269
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Re: Saat toplamı

Mesaj gönderen ALUCARD »

Ben sonuçlara göre bir yanlış lık göremedim. Saat 23:59:59 da biter 00:00:00 olur. Ama sen illa 28:00:55 yapacam diyosan saati parçalara ayirip öyle işlem yapmalısınız. Ancak sonu 24 rdn büyükse saate geri ceviremessin
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Re: Saat toplamı

Mesaj gönderen hido »

ALUCARD yazdı:Ben sonuçlara göre bir yanlış lık göremedim. Saat 23:59:59 da biter 00:00:00 olur. Ama sen illa 28:00:55 yapacam diyosan saati parçalara ayirip öyle işlem yapmalısınız. Ancak sonu 24 rdn büyükse saate geri ceviremessin
Evet saat mantğında haklısınız, olayı bir işcinin yaptığı mesai olarak düşünürsek, 23 saat çalışdı sonra 3 saat daha mesai yaptı bu durumda 26 saat oluyor, bunu nasıl yaptırabilirim...
Kullanıcı avatarı
Dostk
Üye
Mesajlar: 144
Kayıt: 22 Ağu 2015 12:21

Re: Saat toplamı

Mesaj gönderen Dostk »

Deneyin işinizi görecektir...

Kod: Tümünü seç

var
  Saat: TTime;
  I: Integer;
begin
  try
    with ListView1 do
    begin
      try
        if Items.Count > 0 then
        begin
          for I := 0 to Items.Count - 1 do
          begin
            if Items[I].Selected then
            begin
              Saat := Saat + StrToTime(Items[I].SubItems[2]);
            end;
          end;
        end;
      except
      end;
    end;
  finally
    Caption := TimeToStr(Saat);
  end;
end;
ertank
Kıdemli Üye
Mesajlar: 1668
Kayıt: 12 Eyl 2015 12:45

Re: Saat toplamı

Mesaj gönderen ertank »

Sanırım bu işi TTime değişkeni ile yapman mümkün değil. Aşağıdaki gibi birşey önerebilirim. Senin için uygun olur mu emin değilim. Kontrol edip bir bakarsın.

Kod: Tümünü seç

procedure TForm11.Button2Click(Sender: TObject);
var
  ToplamSaat: Double;  // Çalışılan saat küsüratlı olabilir.
  s,d,ss,ff:Word;
begin
  ToplamSaat := 0.0;
  try
    with ListView1 do
    begin
      if Items.Count > 0 then
      begin
        for I := 0 to Items.Count - 1 do
        begin
          if Items[I].Selected then
          begin
            try
              with ListemQuery do
              begin
                Close;
                SQL.Clear;
                SQL.Add('Select * From LIST');
                Prepared := True;
                Open;
                if Not IsEmpty then
                begin
                  while Not Eof do
                  begin
                    DecodeTime(FieldByName('TOTALSAAT').AsDateTime, s, dd, ss, ff);
                    ToplamSaat := ToplamSaat + s; // Saat kısmını topla
                    ToplamSaat := ToplamSaat + (dd / 60);  // Dakika kısmını topla
                    ToplamSaat := ToplamSaat + (ss / 3600); // Saniye kısmını topla
                  end;
                end;
              end;
            except
            end;
          end;
        end;
Cevapla