while do ve tablo sonu ile ilgili (çözüldü) !

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
AliErdem
Üye
Mesajlar: 157
Kayıt: 16 Nis 2006 02:57

while do ve tablo sonu ile ilgili (çözüldü) !

Mesaj gönderen AliErdem »

tablodaki get_tar alanı boş olanları listele
boş ise; ver_tar alanı bugunden küçük mü değilmi
küçükse gün farkını bul cezayı hesapla ve yazdır
değilse değişiklik yapma
bu işlemi tablo sonuna kadar hepsine uygula

mantık bu
kod ise

Kod: Tümünü seç

[quote][color=green]
procedure TForm1.Button48Click(Sender: TObject);
var
a,ceza,ytl:real;
kar:integer;
dur:boolean;
begin
query2.sql.clear;
query2.sql.add('select * from hareket where get_tar is null');
query2.open;
 if not (query2.Eof) then dur:=false
  else
  dur:=true;
  while dur=false do
    begin
       kar:=comparedate
       table3GET_TAR.AsDateTime,TABLE3VER_TAR.AsDateTime);
           if kar=1 then
	  begin
	   a:=daysbetween(date,TABLE3VER_TAR.AsDateTime);
	  	ceza:=a * strtoint(form4.Table1CEZA.AsString);
	  	ytl:=ceza/1000;
    		if ceza < 1000 then
	    	TABLE3CEZA.AsString:=floattostr(ceza)+'Ykr'
	    	else
	    	TABLE3CEZA.AsString:=floattostr(ytl)+'Ytl';
        if query2.Eof then dur:=false
        else
	    	query2.next;
    end
    else
    begin
    query2.Next;
    end;
end;
end;[/color][/quote]
bu ama sonsuz döngüye giriyor program kitleniyor beceremedim yardım edebilirseniz sevinirim kolay gelsin
En son AliErdem tarafından 28 May 2006 07:41 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

if query2.Eof then dur:=false
yerine
if query2.eof then dur:=True olmayacak mı?
Kullanıcı avatarı
AliErdem
Üye
Mesajlar: 157
Kayıt: 16 Nis 2006 02:57

Mesaj gönderen AliErdem »

yaptım ulu coder yemedi :) while do yu kullanmayı beceremiyorum işte yanlış yapmışımdır bi yerde
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

N'ayır, N'olamaz.
Sonsuz döngü yoktur! Olamaz, nayır, nayııııır.
(Düzeltecem de Table+Query olunca kafam karıştı.)
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

Ali abi bi de bunu dener misin?
Ama ben hala anlamadım hem Query hem Table???

Kod: Tümünü seç

procedure TForm1.Button48Click(Sender: TObject);
var
  a,ceza,ytl:real;
  kar:integer;
  dur:boolean;
begin
  query2.sql.clear;
  query2.sql.add('select * from hareket where get_tar is null');
  query2.open;
  Query2.First;
  while Query2.Eof=False do
  begin
    kar:=comparedate(table3GET_TAR.AsDateTime,TABLE3VER_TAR.AsDateTime);

    if kar=1 then
    begin
      a:=daysbetween(date,TABLE3VER_TAR.AsDateTime);
      ceza:=a * strtoint(form4.Table1CEZA.AsString);
      ytl:=ceza/1000;
      if ceza < 1000 then TABLE3CEZA.AsString:=floattostr(ceza)+'Ykr' 
       else TABLE3CEZA.AsString:=floattostr(ytl)+'Ytl';
    end;
    query2.Next;
  end;
end;
While do kullanmadan önce şu iskeleti hazırlayıp sonra içini dolduruyorum, sorun çıkmıyor.

Kod: Tümünü seç

Query1.SQL.Clear;
Query1.SQL.Add('Select * from ıdıvıdı');
Query1.Open;
Query1.First;
While Query1.EOF=False Do
begin


  Query1.Next;
End;
Kullanıcı avatarı
AliErdem
Üye
Mesajlar: 157
Kayıt: 16 Nis 2006 02:57

Mesaj gönderen AliErdem »

deniyorum 1 dk biraz değişiklik yapıom kodda
Kullanıcı avatarı
AliErdem
Üye
Mesajlar: 157
Kayıt: 16 Nis 2006 02:57

Mesaj gönderen AliErdem »

kod böyle oldu ulu coder hata falan verdi değiştirdim biraz şu anda kod çalışıyor hatta F7 ile tek tek izledim istediklerimi yapıyor herhalde :P heralde diyorum işleyişte bi hata yok ama database e kayıt yapmıyor ceza alanlarını doldurması lazımdı....

Kod: Tümünü seç

[color=green][/color]procedure TForm1.Button48Click(Sender: TObject);
var
  a,ceza,ytl:real;
  kar:integer;
  dur:boolean;
begin
  query2.sql.clear;
  query2.sql.add('select * from hareket where get_tar is null');
  query2.open;
  Query2.First;
  while Query2.Eof=False do
  begin
    kar:=comparedate(date,QUERY2VER_TAR.AsDateTime);

    if kar=1 then
    begin
      a:=daysbetween(date,QUERY2VER_TAR.AsDateTime);
      ceza:=a * strtoint(form4.Table1CEZA.AsString);
      ytl:=ceza/1000;
      if ceza < 1000 then
      begin
      query2.Edit;
      Query2.FieldByName('CEZA').AsString:=floattostr(ceza)+'Ykr';
      QUERY2.Post;
       end
       else
       begin
       QUERY2.Edit;
       Query2.FieldByName('CEZA').AsString:=floattostr(ytl)+'Ytl';
       query2.Post;
       end;
    end;
    query2.Next;
  end;
end;
En son AliErdem tarafından 28 May 2006 06:25 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

abi bildiğim kadarıyla Query'de bilgi değişikliği yapılmıyor.
Kodlarda başka hata göremiyorum.
Table kullanıp dene bence.
Bu arada adım Mustafa.
Kullanıcı avatarı
AliErdem
Üye
Mesajlar: 157
Kayıt: 16 Nis 2006 02:57

Mesaj gönderen AliErdem »

query ve table senin dediğin gibi aynı anda çok karışık oluyor mustafa bende böyle yaptım artık sorun yok gibi

Kod: Tümünü seç

procedure TForm1.Button48Click(Sender: TObject);
var
  a,ceza,ytl:real;
  kar:integer;
  dur:boolean;
begin
TABLE3.Filtered:=false;
table3.Filter:='GET_TAR is null';
table3.Filtered:=true;
  while table3.Eof=False do
  begin
    kar:=comparedate(date,TABLE3VER_TAR.AsDateTime);

    if kar=1 then
    begin
      a:=daysbetween(date,TABLE3VER_TAR.AsDateTime);
      ceza:=a * strtoint(form4.Table1CEZA.AsString);
      ytl:=ceza/1000;
      if ceza < 1000 then
      begin
      TABLE3.Edit;
      TABLE3.FieldByName('CEZA').AsString:=floattostr(ceza)+'Ykr';
      TABLE3.Post;
       end
       else
       begin
       TABLE3.Edit;
       TABLE3.FieldByName('CEZA').AsString:=floattostr(ytl)+'Ytl';
       TABLE3.Post;
       end;
    end;

    table3.Next;
  end;
end;
kolay gelsin herkese
En son AliErdem tarafından 28 May 2006 06:42 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

'Abi eğer tablonda No gibi otomatik artan bir alan varsa, While-Do'nun başında Query'nin No'sunu Table'da arat. Query'de hiç işlem yapma. Onu sadece Table'da işlem yapılacak olan kayıtın numarasını bulak için kullanmış olalım. Aslında GetTar is null'u Table'da nasıl kullanacaığımızı bilsek daha kolay olacak da...' diyordum, cevabını değiştirmişsin.

Şimdi anladığım kadarıyla Query ile Table birbirine bağlıymış.
O zaman Query'yi kullanmana hiç gerek yok.
While Query1.EOF=False yerine
While Table1.EOF=False yazarsan,
Query1.Next demene gerek kalmaz, ve Query'de ilerleme olmayacağı için daha hızlı çalışır.
Tabi bir de tarihle ilgili yerlerde de Query yerine table kullanman lazım.
Kullanıcı avatarı
AliErdem
Üye
Mesajlar: 157
Kayıt: 16 Nis 2006 02:57

Mesaj gönderen AliErdem »

yukardaki cevapları düzeltemedim

query ve table senin dediğin gibi aynı anda çok karışık oluyor mustafa bende böyle yaptım artık sorun yok gibi

Kod: Tümünü seç

procedure TForm1.Button48Click(Sender: TObject);
var
  a,ceza,ytl:real;
  kar:integer;
  dur:boolean;
begin
TABLE3.Filtered:=false;
table3.Filter:='GET_TAR is null';
table3.Filtered:=true;
  while table3.Eof=False do
  begin
    kar:=comparedate(date,TABLE3VER_TAR.AsDateTime);

    if kar=1 then
    begin
      a:=daysbetween(date,TABLE3VER_TAR.AsDateTime);
      ceza:=a * strtoint(form4.Table1CEZA.AsString);
      ytl:=ceza/1000;
      if ceza < 1000 then
      begin
      TABLE3.Edit;
      TABLE3.FieldByName('CEZA').AsString:=floattostr(ceza)+'Ykr';
      TABLE3.Post;
       end
       else
       begin
       TABLE3.Edit;
       TABLE3.FieldByName('CEZA').AsString:=floattostr(ytl)+'Ytl';
       TABLE3.Post;
       end;
    end;

    table3.Next;
  end;
end;
kolay gelsin herkese
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

abi hata yokmuş gibi görünüyor, büyük ihtimalle de öyle.
Yalnız bir kaç tavsiyem olacak.
Table'ı filtreledikten sonra Table1.Refresh ve Table1.First komutlarını kullan.
strtoint(form4.Table1CEZA.AsString); burda da strtofloat kullan bence.

Eğer table3.Filter:='GET_TAR is null'; şeklinde bir kullanım varsa sorun çıkarmaması lazım.
Kullanıcı avatarı
AliErdem
Üye
Mesajlar: 157
Kayıt: 16 Nis 2006 02:57

Mesaj gönderen AliErdem »

herşey için saol mustafa tıkır tıkır çalışıyo :P

table1.filter:='get_Tar is null' ;

diye kullanım var hatta and ile sql deki koşullarıda kullanabiliyorsun herhalde


kolay gelsin
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

Bir sorun daha çözüldü. 8)
Hayırlı uğurlu olsun.
Yaşasın Table, yaşasın While-Do, yaşasın If...

Edit: Evet unutmuşum: yaşasın delphiturkiye
En son ulu coder tarafından 28 May 2006 09:58 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
AliErdem
Üye
Mesajlar: 157
Kayıt: 16 Nis 2006 02:57

Mesaj gönderen AliErdem »

BİRŞEYİ UNUTMUŞSUN :) yaşasın delphiturkiye :)
Cevapla