ADOquery ile progress i ilişkilendirmek nasıl yapılır?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
misterapocalypse
Üye
Mesajlar: 36
Kayıt: 03 Tem 2007 06:27
Konum: Muğla-Dalaman
İletişim:

ADOquery ile progress i ilişkilendirmek nasıl yapılır?

Mesaj gönderen misterapocalypse »

Arkadaşlar, Adoquery ile sorgulama yaptığımda sorgulama yapılırken bekliyoruz ve sorgulama sonucu karşımıza geliyor.

Ben şunu istiyorum; bu sorgulama süresince progress zamanını bir progressbar a atamak veya bir gif animasyonunu oynatmak istiyorum.

thread ile yapılabilir mi? diye düşündüm ancak. ADOquery'nin OnFetchProgress diye bir olayı var onuda kavrayamadım. Bir basit örnek kod ile yardımcı olabilecek kişilere müteşekkir kalacağım :) şimdiden teşekkür.
En son misterapocalypse tarafından 30 Mar 2012 11:46 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: ADOquery ile progress zamanını değerlendirmek.

Mesaj gönderen sabanakman »

TAnimate ile uygun bir .avi oyantmak da düşünülebilir. Zahmetsiz, pratik ve animasyona göre güzel bir sonuç elde edebilirsiniz.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
misterapocalypse
Üye
Mesajlar: 36
Kayıt: 03 Tem 2007 06:27
Konum: Muğla-Dalaman
İletişim:

Re: ADOquery ile progress zamanını değerlendirmek.

Mesaj gönderen misterapocalypse »

arkadaşlar benim bahsettiğim access (.mdb) uzantılı bir dosyam var bu veritabanında tam 300.000 adet kişi ismi var eğer ben bu listede bir adoquery ile aratma yapar isem 20 saniye civarında(bu bilgisayarın hızına bağlı) sürüyor. koşullu yaparsam 2-3 saniyeye kadar düşüyor.

Bu sürede beklerken kullanıcı acaba bilgisayar kilitlendi mi? diye soru sormasın diye aratma yaparken animasyon veya hareketli obje hatta progress bar bile olabilir farketmez. Bende hareket etmiyor taki işlemi sonuçlandırıncaya kadar. TThread olaylarını araştırıyorum. ancak sağlıklı bir örneğe ulaşamadım. Thread konusunda bildiğiniz bir kod veya komponent var ise yardım ederseniz sevinirim.
:roll:
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: ADOquery ile progress zamanını değerlendirmek.

Mesaj gönderen unicorn64 »

forma bir timer, küçük bir panel ve üzerine bir label ekleyin, timer intervali 100 gibi bir değer verin, labelin captionuna 'Lütfen Bekleyiniz' diye yazın

Kod: Tümünü seç


procedure TForm1.PaneliOrtala;
begin
  panelBekle.top:=round((ClientHeight/2)-(panelBekle.height/2));
  panelBekle.left:=round((Clientwidth/2)-(panelBekle.width/2));
end;

procedure TForm1.FormResize(Sender: TObject);
begin
 PaneliOrtala; 
end;

procedure Tform1.Bekle;
begin 
  PaneliOrtala;
  panelBekle.Visible:=true;
  panelBekle.BringToFront; 
  timer1.enabled:=true;
end;

procedure Tform1.Devam;
begin 
  panelBekle.Visible:=false;
  timer1.enabled:=false;
end;

procedure Tform1.Timer1Timer(Sender: TObject);
begin
  lblBekle.caption:=lblBekle.caption+'.';
  if lblBekle.caption='Lütfen Bekleyiniz.....' then
      lblBekle.caption:='Lütfen Bekleyiniz';
end;

sorguyu çalıştırmadan önce Bekle; sorgu tamamlandıktan sonra Devam; ve işlem tamamdır... :)
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: ADOquery ile progress zamanını değerlendirmek.

Mesaj gönderen unicorn64 »

yada mesela panel üzerine bir tane progressbar ekleyin, style marque olarak ayarlayıp marqueinterval i de 100 yapın
işlem başlangıcında paneli gösterip işlem bitince paneli gizleyin
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Kullanıcı avatarı
misterapocalypse
Üye
Mesajlar: 36
Kayıt: 03 Tem 2007 06:27
Konum: Muğla-Dalaman
İletişim:

Re: ADOquery ile progress i ilişkilendirmek nasıl yapılır?

Mesaj gönderen misterapocalypse »

Sorum yanlış anlaşılmış olabilir!

unicorn64 arkadaşıma yardım etmeye çalıştığı için teşekkür ederim.
Ancak yazdığı amiyane kalacak ama "ilkel" bir kod olarak duruyor. bence;

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
Var I : integer;
begin
AdoDataset1.open;
ADODataset2.Active:=True;
progressbar1.Min := 0;
I:=0;
MyCmpl_Status := False;
If ADODataSet1.RecordCount <> 0 then
begin
WHILE NOT MyCmpl_Status DO
begin
AdoDataset2.InsertRecord([ADODataSet1.FieldValues['SAMPLE_ID'],
I,
'Analytical Test',
ADODataSet1.FieldValues['COMPONENT'],
ADODataSet1.FieldValues['UNITS'],
ADODataSet1.FieldValues['VALUE_TYPE'],
ADODataSet1.FieldValues['NUMBER_VALUE'],
ADODataSet1.FieldValues['TEXT_VALUE'],
ADODataSet1.FieldValues['TIME_VALUE']]);

ADODataSet1.Next;
end;
end;
end;

procedure TForm1.ADODataSet1FetchProgress(DataSet: TCustomADODataSet;
Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
begin
If ProgressBar1.Max<>MaxProgress then
ProgressBar1.Max := MaxProgress;
ProgressBar1.Position := Progress;
Application.ProcessMessages;

end;

procedure TForm1.ADODataSet1EndOfRecordset(DataSet: TCustomADODataSet;
var MoreData: WordBool; var EventStatus: TEventStatus);
begin
If EventStatus = esOK then
MyCmpl_Status := True //MyCmpl_Status is a Boolean Var
else
MyCmpl_Status := False;

end;
gibi bir şey olmalı değil mi ? :alsana:
Cevapla