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