Progressbar Kullanımındaki Sorun nedir ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
secret_boy
Üye
Mesajlar: 151
Kayıt: 17 Kas 2005 04:46

Progressbar Kullanımındaki Sorun nedir ?

Mesaj gönderen secret_boy »

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
ADOQuery1.First;
ProgressBar1.Position:=0;
ProgressBar1.Max:=ADOQuery1.RecordCount;
ProgressBar1.Update;
  while not ADOQuery1.Eof do
 begin
adoQuery1.Close;
adoQuery1.SQL.Clear;
adoQuery1.SQL.Add('select * from dbo.L_LOG');
adoQuery1.Open;
ProgressBar1.Position:=ProgressBar1.Position+1;
ProgressBar1.Update;
ADOQuery1.Next;
ADOQuery1.Prepared;
end;
end;
Merhaba arkadaşlar yukarıda yazmış olduğum kod ile sqlserver 2008 r2 de bir programın veri tabanından logları çekiyorum fakat bunu progressbar da göstermeye çalıştığımda döngüsel olarak sürekli aynı işlemi yapıyor nerede hata yaptım bulamadım yardımcı olursanız sevinirim
teşekkürler iyi çalışmalar.
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Progressbar Kullanımındaki Sorun nedir ?

Mesaj gönderen ikra »

öncelikle progresbar'in pozisyonunu islem öncesi 0 (sifir)'a alin.
pozisyon degistigi zaman otomatik olarak kendini günceller zaten, update demeye gerek kalmaz.
while not adoquery1.eof ile döngüye girdiginiz halde ayni dataset'i döngü icerisinde tekrar kullanmissiniz. hata mi yoksa kasitli mi yapildi bilemiyorum. eger kasit var ise, bu döngü icerisinde adoquery1.next kullanmak gereksiz olmus.
adoquery1.close, clear, add demek yerine adoquery1.sql.text dediginizde üc islemi de tek bir komut ile gerceklestirmis olursunuz.
prepared benim bildigim kadari ile open'den önce kullaniliyordu. ben hic bir faydasini görmedim.
kolay gelsin.
kıdemsiz üye
ertank
Kıdemli Üye
Mesajlar: 1716
Kayıt: 12 Eyl 2015 12:45

Re: Progressbar Kullanımındaki Sorun nedir ?

Mesaj gönderen ertank »

Sanırım ikinci bir AdoQuery kullanman gerekli. ADOQuery1 açık iken kapatıp içindeki kayıtları başka bir SQL ile değiştirerek ikinci kez açıyorsun. Dolayısı ile kayıt sayısı değişiyor. Forma ikinci bir ADOQuery ekleyerek aşağıdaki kodu deneyebilir misin?

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  ADOQuery1.First;
  ProgressBar1.Position:=0;
  ProgressBar1.Max:=ADOQuery1.RecordCount;
  while not ADOQuery1.Eof do
  begin
    adoQuery2.Close;
    adoQuery2.SQL.Clear;
    adoQuery2.SQL.Add('select * from dbo.L_LOG');
    adoQuery2.Prepare;
    adoQuery2.Open;
    ProgressBar1.Position:=ProgressBar1.Position+1;
    ADOQuery1.Next;
    Application.ProcessMessages;
  end;
end;
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: Progressbar Kullanımındaki Sorun nedir ?

Mesaj gönderen xozcanx »

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
ADOQuery1.Last; //Quert son kayda konumlandırdık!
ProgressBar1.Position:=0; // malum :)
ProgressBar1.Max:=ADOQuery1.RecordCount; // RecordCount ile Max değeri atadık
ADOQuery1.First; // Şimdi ilk başa konumlandırıyoruz ;)
ProgressBar1.Update;
  while not ADOQuery1.Eof do
 begin
adoQuery1.Close;
adoQuery1.SQL.Clear;
adoQuery1.SQL.Add('select * from dbo.L_LOG');
adoQuery1.Open;
ProgressBar1.Position:=ProgressBar1.Position+1;
ProgressBar1.Update;
ADOQuery1.Next;
ADOQuery1.Prepared;
end;
end;
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Progressbar Kullanımındaki Sorun nedir ?

Mesaj gönderen ikra »

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  ProgressBar1.Position:=0; // malum :) 
  ProgressBar1.Max:=ADOQuery1.RecordCount; // RecordCount ile Max değeri atadık
  ADOQuery1.First; // Şimdi ilk başa konumlandırıyoruz ;)

  while not ADOQuery1.Eof do
  begin
    adoQuery2.SQL.Text := 'select * from dbo.L_LOG'; // DIKKAT ADOQUERY_2 WHERE SARTI EKLENMEMIS OPEN DIYIP VERIYI NE YAPIYORSUN?
    adoQuery2.Open; // DIKKAT ADOQUERY_2
    
    ProgressBar1.Position:=ProgressBar1.Position+1;
    
    ADOQuery1.Next; // DIKKAT ADOQUERY_1
    
    Application.ProcessMessages;
  end;
end;
kıdemsiz üye
secret_boy
Üye
Mesajlar: 151
Kayıt: 17 Kas 2005 04:46

Re: Progressbar Kullanımındaki Sorun nedir ?

Mesaj gönderen secret_boy »

Cevap yazan arkadaşlar için çok teşekkür ederim problemi aşağıda paylaştığım kod ile çözdüm.Tekrar teşekkür ederim.

Kod: Tümünü seç

procedure TForm1.Button3Click(Sender: TObject);
var
  i: Integer;
begin
adoQuery1.Close;
adoQuery1.SQL.Clear;
adoQuery1.SQL.Add('select * from dbo.L_LOG');
ADOQuery1.Prepared;
adoQuery1.Open;
  with ProgressBar1 do
  begin
    Min := 0;
    Max := ADOQuery1.RecordCount;
    ADOQuery1.First;
    for i := Min to Max do
    begin
      Position := i;
      ADOQuery1.Next;
     end;
  end;
end;
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: Progressbar Kullanımındaki Sorun nedir ?

Mesaj gönderen xozcanx »

ikra yazdı:

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  ProgressBar1.Position:=0; // malum :) 
  ProgressBar1.Max:=ADOQuery1.RecordCount; // RecordCount ile Max değeri atadık
  ADOQuery1.First; // Şimdi ilk başa konumlandırıyoruz ;)

  while not ADOQuery1.Eof do
  begin
    adoQuery2.SQL.Text := 'select * from dbo.L_LOG'; // DIKKAT ADOQUERY_2 WHERE SARTI EKLENMEMIS OPEN DIYIP VERIYI NE YAPIYORSUN?
    adoQuery2.Open; // DIKKAT ADOQUERY_2
    
    ProgressBar1.Position:=ProgressBar1.Position+1;
    
    ADOQuery1.Next; // DIKKAT ADOQUERY_1
    
    Application.ProcessMessages;
  end;
end;
Bu bana gelsin :alsana:
ilk mesajda tek Query vardı ben kodları ilk mesajdan alıyorum diye sonrakinden almışım :| Dikkat herşeyden önemli fakat gözden kaçmış.
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Cevapla