Tum kayitlari silme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
dtgb
Üye
Mesajlar: 175
Kayıt: 07 May 2004 10:02

Tum kayitlari silme

Mesaj gönderen dtgb »

merhaba arkadaslar ms acces veritabanını kullanarak bir program yazdım
tablomdaki tum kayıtları dongu kurmadan silebilirmiyim?
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Kod: Tümünü seç

delete from tablo_adi
ile tüm kayıtları silebilirsin.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
dtgb
Üye
Mesajlar: 175
Kayıt: 07 May 2004 10:02

Mesaj gönderen dtgb »

SQL cümlecigini disinda silme olayımız varmıydı acaba
mesela
dm.tbladi.delete ile tek bir kayırt silebiliyorum
bu sekilde sql cumlesi kullanmadan silebilirmiyim??
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

Kod: Tümünü seç

with dm.tbladi do
try
  DisableControls;
  First;
  while not eof do
  begin
    Delete;
    Next;
  end;
finally
  EnableControls;
end;
bu sekilde olur sanırım
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
dtgb
Üye
Mesajlar: 175
Kayıt: 07 May 2004 10:02

Mesaj gönderen dtgb »

bende boyle bir dongu dusunmustum ama
silme islemini parca parca yapıyor ornegin 10 tane kaydım varsa 4 unun siliyor digerleri kalıyor ayrıca bu dongudeki "DisableControls" un kullanım amacı nedir?
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

tablo bir datasource aracılıgı ile dbgrid gibi bilesenlere baglı ise bu kontrollere
kayıtlar arasındaki gecisler iletilmiyor.
eger parca parca siliyor diyorsanız kayıt sayısını bir query ile ogrenip (zira recordcount özelligi de aynı seyi yapabilir) for dongusu ile silebilirsiniz.
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
dtgb
Üye
Mesajlar: 175
Kayıt: 07 May 2004 10:02

for dongusu

Mesaj gönderen dtgb »

begin
dm.TBLHesaplama.first;
for i:=0 to dm.TBLHesaplama.RecordCount-1 do
begin
dm.TBLHesaplama.Delete;
dm.TBLHesaplama.Next;
end;
Showmessage('KAYIT SİLME İŞLEMİNİZ BAŞARIYLA TAMAMLANDI...');
end;

for donfusu kullanarak yaptıgımda tamamını silebiliyorum ama 860 kaydı
yaklasık 50 sn yede siliyor
bildigim kadarıyla for dongusu hız acısından en iyisiydi sizce bu normal mi yada butur silme yada tum kayırları tarama islemlerinde onerebileceginiz baska yontemler var mı?
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

eger sql kullanma sansınız varsa sql ile yapmanızı oneririm.
eger for dongusu ile yapacagım diyorsanız disablecontrols-enablecontrols ozelliklerini kullanın
hızda artıs olacaktır.
Eger Tablonun baglı oldugu datasource un ondatachange olayına bazı kodlar yazmıs iseniz bu da epey yavaslatacaktır.
Ayrıca Calculated alan kullanmıssanız bununda hıza bir etkisi olacaktır, tabiki negatif yonde...
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

bde de emptytable die bi bde komutu var :idea: tabi access de varmı bilemicem bi bakın isterseniz
.-.-.-.-.-.-.-. ^_^
Kullanıcı avatarı
TRSoft
Kıdemli Üye
Mesajlar: 636
Kayıt: 13 Şub 2004 11:39
Konum: Konya
İletişim:

Re: for dongusu

Mesaj gönderen TRSoft »

dtgb yazdı:begin
dm.TBLHesaplama.first;
for i:=0 to dm.TBLHesaplama.RecordCount-1 do
begin
dm.TBLHesaplama.Delete;
dm.TBLHesaplama.Next;
-Burada Next komutunu kullanırsanız tüm verilerinizi silemezsiniz.

-Zaten kaydı sildikten sonra bir sonraki kayda konumlanıyor ama bir de sonraki kayda kendimiz konumlandırırsak birer atlayarak silecektir.

-Ayrıca for döngüsü yerine @gkimirti hocamında yukarıda söylediği gibi "while not Eof " şeklinde bir döngü daha sağlıklı olacaktır.
İlimle geçen bir gece,
ibadetle geçen bin geceden hayırlıdır.
HZ. MUHAMMED (S.A.)
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

ewt bu next olayı gozden kacmıs olmaması gerekiyor.
ama mege nin de dedigi gibi zaten emptytable diye bir metod varmıs :P
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Re: for dongusu

Mesaj gönderen hdayi »

dtgb yazdı:

Kod: Tümünü seç

begin
  dm.TBLHesaplama.first; 
    for i:=0 to dm.TBLHesaplama.RecordCount-1 do
      begin
          dm.TBLHesaplama.Delete;
          dm.TBLHesaplama.Next;
       end;
       Showmessage('KAYIT SİLME İŞLEMİNİZ BAŞARIYLA         TAMAMLANDI...');
  end;
Bu kodla hepsini silememen normal, muhtemelen yarısını ya da yarısının bir fazlasını siliyorsundur.
bu satır fazla gibi geldi bana

Kod: Tümünü seç

dm.TBLHesaplama.Next;

Kod: Tümünü seç

begin
  dm.TBLHesaplama.first; 
    for i:=0 to dm.TBLHesaplama.RecordCount-1 do
          dm.TBLHesaplama.Delete;
       Showmessage('KAYIT SİLME İŞLEMİNİZ BAŞARIYLA         TAMAMLANDI...');
  end;
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
Kullanıcı avatarı
dtgb
Üye
Mesajlar: 175
Kayıt: 07 May 2004 10:02

Mesaj gönderen dtgb »

arkadaslar ilginctir ama
dm.tblhesaplar.next
i kullanmama ragmen tum kayırlar silinmekte. temel problemim tablomdaki tum kayıtları daha kısa zamanda silememem.
ayrıca ms accesste emptytable methodu varmı ?
Kullanıcı avatarı
Asri
Kıdemli Üye
Mesajlar: 767
Kayıt: 16 Eyl 2003 09:54
Konum: istanbul

Mesaj gönderen Asri »

Ben database den anlamam, ufak tefek paradox la bir kaç program yazdım.
Tüm datayı silmek istediğimde bosdata dizinin deki hiç kayıt girmediğim dataları üstüne atıyorum sıfırlanıyor :)

çok mu acemice bir iş :)
Öğrenmek ve öğretmek, akıntıya karşı yüzmek gibidir ilerleyemediğiniz taktirde gerilersiniz.
Kullanıcı avatarı
dtgb
Üye
Mesajlar: 175
Kayıt: 07 May 2004 10:02

Mesaj gönderen dtgb »

arkadaslar sanırım en ideali
begin
with dm.TBLHesaplama do
try
DisableControls;
First;
while not eof do
begin
Delete;
end;
finally
EnableControls;
end;
yada

begin
dm.TBLHesaplama.DisableControls;
for i := 0 to dm.TBLHesaplama.RecordCount-1 do
dm.TBLHesaplama.Delete;
dm.TBLHesaplama.EnableControls;
end;

denemelerimde en hızlıları bunlar oldu
kolay gelsin
Cevapla