Kodbank İndir

! CODEBANK 2012 !

İNDİRMEK&DETAYLI BİLGİ ALMAK İÇİN BURAYI TIKLAYINIZ.

ÖNEMLİ AÇIKLAMA: MUTLAKA OKUYUNUZ!

Gönderen Konu: dbgrid iki tarih arası dakika toplamı  (Okunma sayısı 456 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı wahsiii

  • Kıdemli Üye
  • *****
  • İleti: 50
  • Rep: +0/-0
dbgrid iki tarih arası dakika toplamı
« : 29 Temmuz 2010 07:47:56 »
merhaba
sql query ile 2 tarih arasını dbgrid 'e aktarıyorum.
griddeki alanlarda giris ve cıkış saatleri adında 2 field var.
forma 1 edit nesnesi koydum ve butona aşagıdaki kodu yazdım.

    edit3.text:=floattostr(MinuteSpan(StrtoDatetime(QryHesaplaGirisSaati.text),(strtodatetime(QryHesaplaCikisSaati.Text))));


kod çalışıyor ve giris saati ile çıkış saati arasındaki dakikayı edit' e aktarıyor.Ama birden fazla kayıt varsa tek kayıt varmış gibi dakika çıkıyor.
Yardımlarınızı rica ediyorum.

Çevrimdışı redcoder

  • Kıdemli Üye
  • *****
  • İleti: 253
  • Rep: +2/-0
  • Coder
Ynt: dbgrid iki tarih arası dakika toplamı
« Yanıtla #1 : 29 Temmuz 2010 07:54:28 »
Next kodu ile bir sonraki kayda geçme işlemini gerçekleştir. Muhtemelen Son veya ilk kayıt üzerinde duruyor kayıt kafası
Application.MessageBox('Zor yapılabilir?','Imkansız sadece zaman alır',0+32+0);

Çevrimdışı wahsiii

  • Kıdemli Üye
  • *****
  • İleti: 50
  • Rep: +0/-0
Ynt: dbgrid iki tarih arası dakika toplamı
« Yanıtla #2 : 29 Temmuz 2010 08:54:03 »
Kardeş aşagıdaki kodu denedim fakat hesaplarken hataya düşüyor.Yardıımcı olabılırmısın


procedure TfrmHesapla.BitBtn3Click(Sender: TObject);
var
i,s:integer;
begin
i:=0;
s:=0;
while not QryHesapla.Eof do
i:=floattostr(DbAltGrid1.Columns[7].Field.Value);
s:=floattostr(DbAltGrid1.Columns[8].Field.Value);
QryHesapla.Next;
edit3.text:=floattostr(MinuteSpan(StrtoDatetime(i),(strtodatetime(s))));
end;
« Son Düzenleme: 29 Temmuz 2010 09:04:47 by wahsiii »

Çevrimdışı redcoder

  • Kıdemli Üye
  • *****
  • İleti: 253
  • Rep: +2/-0
  • Coder
Ynt: dbgrid iki tarih arası dakika toplamı
« Yanıtla #3 : 29 Temmuz 2010 10:17:02 »
for a:=0 to QryHesapla.recordcount -1 do
begin
edit3.text:=floattostr(MinuteSpan(StrtoDatetime(QryHesaplaGirisSaati.text),(strtodatetime(QryHesaplaCikisSaati.Text))));
QryHesapla.next;
end;

Kullandığın veri tabanı hakkında bilgi sahipi olmadığım için tepeden inme bir cevap verdim kusuruma bakma.

var
i,s:integer;
begin
i:=0;
s:=0;
while not QryHesapla.Eof do
i:=floattostr(DbAltGrid1.Columns[7].Field.Value); //Veri tipi nedir ?
s:=floattostr(DbAltGrid1.Columns[8].Field.Value);//Veri tipi nedir ?
edit3.text:=floattostr(MinuteSpan(StrtoDatetime(i),(strtodatetime(s))));
QryHesapla.Next;
end;
Application.MessageBox('Zor yapılabilir?','Imkansız sadece zaman alır',0+32+0);

Çevrimdışı wahsiii

  • Kıdemli Üye
  • *****
  • İleti: 50
  • Rep: +0/-0
Ynt: dbgrid iki tarih arası dakika toplamı
« Yanıtla #4 : 29 Temmuz 2010 10:35:44 »
Cevap için teşekkür ederim kardeşim.
Veritabanı olarak sql kullanıyorum.
Toplanacak alanlar time

Çevrimdışı wahsiii

  • Kıdemli Üye
  • *****
  • İleti: 50
  • Rep: +0/-0
Ynt: dbgrid iki tarih arası dakika toplamı
« Yanıtla #5 : 29 Temmuz 2010 10:51:16 »
kardeş bu kodu kullandım fakat deger sadece tek kayıt varmıs gıbı gelıyor.
for a:=0 to QryHesapla.recordcount -1 do
begin
edit3.text:=floattostr(MinuteSpan(StrtoDatetime(QryHesaplaGirisSaati.text),(strtodatetime(QryHesaplaCikisSaati.Text))));
QryHesapla.next;
end;

tablo yapım
girissaati | cikissaati            bana bu iki saatin dakika cinsinden toplamı lazım.

Çevrimdışı redcoder

  • Kıdemli Üye
  • *****
  • İleti: 253
  • Rep: +2/-0
  • Coder
Ynt: dbgrid iki tarih arası dakika toplamı
« Yanıtla #6 : 29 Temmuz 2010 10:57:28 »
Bunun için ufak bir kod bloğu yazmıstım. Yani Copy fonksiyonu ile istediğim bilgileri integer tipinde tanımladığım bir değişkene(A) atıyordum. Daha sonra Next komutu ile sonraki kayıt içinde aynı işlemi tekrar ettirip daha önceden tanımladığım değişkene (A) ilave edip kesin sonuca ulaşıyordum. Sende öyle yap. Daha kolay yolu vardır ama hiç merak edipte kullanmadım ;)

var b,c:string;
for a:=0 to QryHesapla.recordcount -1 do
begin
b:=copy(DbAltGrid1.Columns[8].Field.asstring,0,2) // Başlangıç noktasını salladım
c:=inttostr(b)+inttostr(b);//Hatam olabilir kontrol et
QryHesapla.next;
end;
showmessage(pchar(inttostr(c));

Yazdığın kod bloğunda Edit3 değeri gelen değer ile toplamayı denedin mi? ;)
var s:string;
for a:=0 to QryHesapla.recordcount -1 do
begin
s:=floattostr(MinuteSpan(StrtoDatetime(QryHesaplaGirisSaati.text),(strtodatetime(QryHesaplaCikisSaati.Text))));
edit3.text:= inttostr(edit3.text)+inttostr(s);
QryHesapla.next;
end;
 Gibi gibi hatalarım olabilir.
Application.MessageBox('Zor yapılabilir?','Imkansız sadece zaman alır',0+32+0);

Çevrimdışı wahsiii

  • Kıdemli Üye
  • *****
  • İleti: 50
  • Rep: +0/-0
Ynt: dbgrid iki tarih arası dakika toplamı
« Yanıtla #7 : 29 Temmuz 2010 11:12:58 »
sabrın için ve cevabın için teşekkür ederim kardeşim.
var s:string;
a:integer;
begin
for a:=0 to QryHesapla.recordcount -1 do
begin
s:=floattostr(MinuteSpan(StrtoDatetime(QryHesaplaGirisSaati.text),(strtodatetime(QryHesaplaCikisSaati.Text))));
edit3.text:= edit3.text+s;
QryHesapla.next;
end;
end;

edit3 ün degeri şu şekilde oldu
3 tane kayıt var her bır kayıt ın toplamı 600
600600600

Çevrimdışı redcoder

  • Kıdemli Üye
  • *****
  • İleti: 253
  • Rep: +2/-0
  • Coder
Ynt: dbgrid iki tarih arası dakika toplamı
« Yanıtla #8 : 29 Temmuz 2010 11:33:15 »
s:=floattostr(MinuteSpan(StrtoDatetime(QryHesaplaGirisSaati.text),(strtodatetime(QryHesaplaCikisSaati.Text))));
edit3.text:= edit3.text+s;
QryHesapla.next;
end;
end;

edit3 ün degeri şu şekilde oldu
3 tane kayıt var her bır kayıt ın toplamı 600
600600600

String türündeki değişkene string bilgisini aktarırsan sonuc tabiki de 600600600 olur. Bunun yerine;

var x:integer; // X türünde değişken tanımladık
begin
x:=0; // X 0 değerini aktardık
x:=x+s; // X ile S değerlerini topladık
Edit3.text:=inttostr(x) // Sonucu Edit3 e aktardık
Application.MessageBox('Zor yapılabilir?','Imkansız sadece zaman alır',0+32+0);

Çevrimdışı wahsiii

  • Kıdemli Üye
  • *****
  • İleti: 50
  • Rep: +0/-0
Ynt: dbgrid iki tarih arası dakika toplamı
« Yanıtla #9 : 29 Temmuz 2010 11:38:27 »
kardeş allah senden razı olsun.Çok teşekkür ederim.


procedure TfrmHesapla.BitBtn3Click(Sender: TObject);
var s:string;
a,x:integer;
begin
x:=0;
for a:=0 to QryHesapla.recordcount -1 do
begin
s:=floattostr(MinuteSpan(StrtoDatetime(QryHesaplaGirisSaati.text),(strtodatetime(QryHesaplaCikisSaati.Text))));
x:=x+strtoint(s);
Edit3.text:=inttostr(x);
QryHesapla.next;
end;
end;