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...
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;
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
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...
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;
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.
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;