sorgulamayı sonlandırmak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
VooDoo
Üye
Mesajlar: 126
Kayıt: 22 Haz 2005 10:25
Konum: Bursa & ANKARA
İletişim:

sorgulamayı sonlandırmak

Mesaj gönderen VooDoo »

merhaba
bir sorgulama işlemi çok uzun sürerse kullanıcıya bu işlemden vazgeçmesi için bir buton ile seenek sunmak istiyorum, fakat sorgu çalıştığı için butona basamiyor ve sorgu sona ermiyor?

tavsiyeniz nedir arkadaşlar
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

selam
sorgulamayı yarıdamı kesmek istiyorsunuz bir butona basarak
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

Bence şöyle bir deneyin.Sorgulamaya başlamadan önceki datasetin içerdiği sql cümleciğini bir stringe atayın mesela MevcutSQL adında.Vazgeç butonuna tıklayınca şu aşağıdaki kod çalışsın.

var mevcutSQL:String;//Bunu formun başında tanımla genel olsun.
Sorgulama yordamına şöyle
Begin
MevcutSQL:=Datasetim.Sql;
//sonrada sql sorgunu yaz.
..........................
....................
end;
Vazgeç butonuna da

Datasetim.close;
Datasetim.sql.clear;
Datasetim.sql.add(MevcutSQL);
Datasetim.open;

Seni yanlış anladıysamda kusura bakma.
Sanırım böyle çalışır.Olmazsa tekrar başka bir şeyler düşünürüz.
Kullanıcı avatarı
VooDoo
Üye
Mesajlar: 126
Kayıt: 22 Haz 2005 10:25
Konum: Bursa & ANKARA
İletişim:

Mesaj gönderen VooDoo »

evet yarıda kesmek istiyorum,
soyle yapiyorum sorgulama baslamadan bir ufak bir formda animation oynatiyorum, sorgulama bitince de form ve animationu kapatiyorum

ama bazen adamin arama kriterinden dolayı takılıp kalmış gibi bir izlenim oluyor bu nedenle kullanıcıya vazgeçmesi için o formda bir buton koyup sorgulamayı kesmek istiyorum, fakat form aktif sorgu arkada iken o butona basamiyorum ve kaliyor oyle, hem butona tıklayabileyi hemde sorguyu sonlandirabilmeliyim

fikir yuruten arkadaslara tesekkurler
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

bence bu çok zor

bu tür bişe işlemde diğer düğmelerle işlem yapmakta baya zor. işlem bitene kadar düğme basılı gözüküyor. (ben de böyle bişey yapmak istiyordu ama olmamıştı)
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

Arkadaşlar şu an derleyicim yanımda yok.Tam yazamıyorum.Ama bu tip durumlar için delphinin bir fonksiyonu var.Programda bir kod çalışırken diğer işlemleri yapmaya yarayan bir kod.Bir terim.Aklıma gelirse hemen yazarım.O kod sayesinde vazgeç butonuna veya istediğiniz her butona basabilirsiniz.Kod arka planda çalışıyor ama kontrolü windowsa bırakıyor.
Kolay gelsin
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

merhaba bu tür işlemlerde application.processmessages; demen yeterli bu özellik istenildiği anda işlemi başka bir olaya aktarabilir. özellikle for ile kurulan döngülerde ben bu özelliği kullanıyorum. bu windowsun bir özelliği aslında. çalışan uygulamalar arası geçiş için işlemci kullanımını ayarlıyor. bir arkadaşım tablo taraması yapıyordu ve işlem çok uzun oluyordu. işlem bitmeden de başka işlemlere geçemiyordu sadece yukarıdaki kodu ekledim döngü sonuna işini halletti. artık tarama bitmeden başka işlemlere geçebildiğini gördü. veya işlemi sonlandırabiliyordu. tabi senin istediğin olay bu ise yanlış anlamadıysam .kolay gelsin.
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

arkadaşlar dan biri sorguyu close yaparak kapat demiş bir diğeri çok zor demiş. burda mesele o anda hiçbirşey yapamamak zaten dediğin gibi close olabilir ancak close koduna gelmeden sorgunun bitmesi gerekiyor. sorgu bitmeden de close komutuna geçmez. olay dediğim gibi sorgudan çıkmak yada sonlandırmak yada başka bir uygulamaya geçmek ise yukarıda yazdığım kod bu işlemi sağlıyor. yani işlemci ve hafıza kullanımlarını ayarlıyor. kolay gelsin
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Kullanıcı avatarı
VooDoo
Üye
Mesajlar: 126
Kayıt: 22 Haz 2005 10:25
Konum: Bursa & ANKARA
İletişim:

Mesaj gönderen VooDoo »

konuya ilgi için teşekkürler arkadaşlar ama cok can sıkan bir olay bu o nedenle halletmeliyim

application.processmessages;
satırını hem sorguyu.Open dedigim yerde hemde actigim bekletme formunun onshow kismina yazdim fakat bu formdaki butona tıklayamiyorum ve formu kapatip devam edemiyorum halen, takılı kalıyor yine,

ekstra başka birşey yapmam gerekiyormu?
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

Bu kodu incele işine yarayacağından eminim.

Kod: Tümünü seç

procedure TForm1.FormCreate(Sender: TObject);

begin
  Button1.Caption := 'Ignore Messages';
  Button2.Caption := 'Process Messages';

end;

procedure TForm1.Button1Click(Sender: TObject);

var
  I, J, X, Y: Word;
begin
  I := 0;
  J := 0;
  while I < 64000 do
  begin
    Randomize;
    while J < 64000 do
    begin
      Y := Random(J);
      Inc(J);
    end;
    X := Random(I);
    Inc(I);
  end;
  Canvas.TextOut(10, 10, 'The Button1Click handler is finished');

end;

procedure TForm1.Button2Click(Sender: TObject);

var
  I, J, X, Y: Word;
begin
  I := 0;
  J := 0;
  while I < 64000 do
  begin
    Randomize;
    while J < 64000 do
    begin
      Y := Random(J);
      Inc(J);
      Application.ProcessMessages;
    end;
    X := Random(I);
    Inc(I);
  end;
  Canvas.TextOut(10, 10, 'The Button2Click handler is finished');

end;
Saygılarımla.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

terslik kod da değilde senin kurguladığın olayda olabilir. ana konu belli ancak yine de nasıl yaptığınında önemi var. bu işlem sırasında başka bir form mu açılıyor yoksa bu işlem tamamen başka form açılıp o unit üzerinde mi oluyor anlayamadım. bu kod la ben çok döngüden kolayca kurtuldum. yani bizzat kullandım. benim bildiğim başkaca yöntemde yok. onshow veya oncreate gibi form oluşumu veya gösterilmesi gibi olaylara yanlış kod yazmak stack yapabilir. bu nedenlede program kilitlenebilir. bence sen ne yapmak istediğini de açık yazarsan yani olaylar tek unittemi yoksa başkaca unit bu işin içine dahilmi?
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

şuan deneyemicem ama sorguyu bi thread içinde çalıştırıp, butona bağlı bi eventla kesmeyi deneyin;progressmessage işe yaramaz.
.-.-.-.-.-.-.-. ^_^
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

@mege nin dediği gibi tek yol thread. Çünkü Open çağrısı blocking bir çağrıdır. Asenkron değildir. İşi bitene kadar program Open'da bekler.
Kullanıcı avatarı
VooDoo
Üye
Mesajlar: 126
Kayıt: 22 Haz 2005 10:25
Konum: Bursa & ANKARA
İletişim:

Mesaj gönderen VooDoo »

soyle oluyor anlatayim

ana formumdan arama yapiyorum, sorguyu calistirmadan hemen once baska bir form uniti de farkli show ediyorum, sorgu bitince de zaten close oluyor o form, yani yeni acilan formda sadece hareketli bir animation ve bir button var.

butona tikladiginda formun kapanmasini ve sorgunun da durmasini istiyorum
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Biz de onu söylemeye çalışıyoruz. Open da SQL sorgusu bitene ve sonuç alınana kadar programın duracaktır. Bir thread içinden bu sorgulamayı yaptırman istediğin şeyi sağlar. Sitede birkaç örnek vardı. :ara
Cevapla