Sorgu çalışırken iptal etme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
cetoonak
Üye
Mesajlar: 50
Kayıt: 12 Haz 2003 09:53
Konum: www.mussimsek.com

Sorgu çalışırken iptal etme

Mesaj gönderen cetoonak »

Merhaba

AdoQuery1.Close;
AdoQuery1.SQL.Text:='SELECT * FROM musteri';
AdoQuery1.Open;

Arkadaşlar yukarıdaki kod çalışırken bildiğiniz gibi kayıt sayısına bağlı olarak işlem uzun sürebiliyor.
Bu sorgu çalışırken bir butona basınca user sorguyu nasıl durdurabilir ?
Bu arada sorgu durduğu anda o ana kadar listeleyebildiği kadar kayıdı listeleyebilir mi ?

Teşekkürler...
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Günaydın

Eski programlama dilinde while döngülerinde olsun for döngülerinde olsun dosya tarama işlemlerinde bu olayı çok rahat bir şekilde yapıyorduk ama SQL zaten olduğundan daha hızlı ve performanslı çalıştığı için bu tip olaya hiç gerek duymadık

Ayrıca şu yöntemi de kullanabilirsin ben bunu hiç uygulamadım şimdi tasarlıyorum hatam olabilir.

İlk önce tablondaki toplam kaydı bulursun bulunan kaydı 3 parçaya bölersin örneğin 100 kayıt bulundu 1.bölüm = 30, 2.bölüm = 30, 3.bölüm = 30, kalan bölüm = 10 bunları ayrı ayrı değişkenlere atarsın ve SQL içinde ilk önce ilk bölümünü sonra 2.nciyi sonra 3.ncüyü en son olarakda kalan bölümü tarattırırsın bunları bir döngü içine veya koşul içine alırsın ve koşul ve döngü çin sql llerin arasına tuş kombinasyonu yaparsın ve döngüyü kırdırıp veya koşul sorgulatmasında SQL lerin hepsine çalışma iznini kullanıcıya bırakırsın.

Kolay Gelsin
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

Bazı Sql serverlerda bu dediginizi DISTINCT (yanlıs hatırlamıyorsam) komutu ile yapıyorlardı
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Böyle birşey açıkcası hiç duymadım. Olamaz dememekle birlikte sql veritabanları için select işlemi bir transaction olduğu için yarım transaction çalışmanın da olamayacağı için bu istediğinizin olamayacağını düşünüyorum. SQL server'ların güvenli olmalarındaki temel yapı taşı özelliklerinden birisidir zaten bir transaction ya çalışır ya da çalışmaz tam ortada elektrik kesilse bile ya commit edilmiştir ya da edilmemiştir. Bu yüzden ortadan kesilemeyeceğini düşünüyorum.

Fakat mesela Sybase'de ben şunu yapabiliyorum. Interactive SQL penceresinde yazdığım bir sorgunun sonucu belki de hatalı yzamamdan dolayı veya çok data olmasından doyaı bir şekilde uzarsa durdurabiliyorum. Fakat bunun sonucu olarak sorgunun çalışması iptal edilyor ve hiç bir sonuç gelmiyor....
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Eğer SQL Serverda Query Analyzer'da delete,insert veya update yapılırken iptal düğmesine basılırsa işlemi yapmamşı gibi iptal eder ama select çalıştırılırsa tamamlamadan iptal denilirse o ana kadar sorguladığı şeyleri getiriyor. Ama dediğim gibi Query Analyzer'da oluyor bu Delphi'de aynı şeyi nasıl yaparsın bilemiyorum.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7588
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

bir çözüm buldum ancak deneyemedim.

1. Query'de ExecuteOptions =[eoAsyncFetchNonBlocking] yap.

2. OnFetchProgressEvent olayında aşağıdaki komutu yaz.

DataSet.Recordset.Cancel;

NOT : tabi Application.ProcessMessagess komutunu vermeyi unutma.

Kolay gelsin.
cetoonak
Üye
Mesajlar: 50
Kayıt: 12 Haz 2003 09:53
Konum: www.mussimsek.com

Mesaj gönderen cetoonak »

İlgilenen herkese teşekkürler ...

Sevgili Admin dediklerini yaptım. İşe yaradı.
Sonucu bilmek istersiniz diye düşündüm.

Herkese teşekkürler ...
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

ilginç...

sonuçtan bizi haberdar ettiğiniz için sağolun. Bu vesile ile biz de öğrenmiş olduk..

Kolay gelsin....
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2357
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Allah razı olsun bilader,
Kılavyemin tuşları silindi, sorunlarınıza cevap aldığınızda akibetleri burayada yazın diye.
Bu cevapları ilerde bir code Bank gibi bişi yapıcaz işallah. Bu herkez için faydalı olacak. Bu proje gerçekleşmese bile en azından burada yazılı olacak ve üye sayımıza göre en azından 50-100 kişinin dağarcığına birşeyler eklenmiş olur.
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Al benden de o kadar,

Bunu ben de yeni öğrendim :) Denemenin sonucunu döndürdüğün için ve fikri ortaya atan Adminimize ve diğer tüm katılımcılara söylüyorum. Allah razı olsun :)

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Cevapla