Tekrar kayıtları engelleme sorunu.

Diğer veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
hakansozgen
Üye
Mesajlar: 38
Kayıt: 16 Nis 2006 06:51
Konum: istanbul
İletişim:

Tekrar kayıtları engelleme sorunu.

Mesaj gönderen hakansozgen »

Arkadaşlar yeniden merhaba. Yeniden başka bir sorunla karşınızdayım.
Bu seferki sorunum tablomun içindeki tekrar kayıtları yaptıramamam. Kodlarımdaki mantık düzgün gibi gözüküyo ama geriye hiç bişey döndürmüyo. Kodlarım:

Kod: Tümünü seç

while not adotable3.Eof do
begin
if  adotable3.Locate('STOK_KODU',dbedit4.Text,[]) then
  begin
    showmessage('Girilmesi istenen stok zaten mevcut.');
    adotable3.Delete;
    adotable3.append;
    dbedit4.SetFocus;
    end
else
  adotable3.Append;
end;
Değerli yardımlarınızı bekliyorum. Kolay gelsin.
Kullanıcı avatarı
hakansozgen
Üye
Mesajlar: 38
Kayıt: 16 Nis 2006 06:51
Konum: istanbul
İletişim:

Mesaj gönderen hakansozgen »

Tablomda tekrar kayıtlar olmasın istiyorum. Yaptığı zamanda uyarsın istiyorum.
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

bunu kodlarla yapmak yerine veri tabanından yapmalısın. Stok_kodu alanını uniq olarak işaretlersen kaydedilmez.
Kullanıcı avatarı
hakansozgen
Üye
Mesajlar: 38
Kayıt: 16 Nis 2006 06:51
Konum: istanbul
İletişim:

Mesaj gönderen hakansozgen »

mkysoft yazdı:bunu kodlarla yapmak yerine veri tabanından yapmalısın. Stok_kodu alanını uniq olarak işaretlersen kaydedilmez.
Dediğiniz mantıklı ama veritabanı ingilizce olduğu zaman verdiği uyarı kullanıcıyı rahatsız edebilir. O yüzden amacım kontrol altına almak ve ona göre kodlar işletmek. Eğer kodlarımda hata varsa belirtin lütfen.

İlginiz için teşekkürler.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
eğer adotable3 de son kayıt seçili değilse bu kod sonsuz döngüye girer gibime geliyor.
döngüyü kaldır ona gerek yok.
locate den önce tablodaki ilk kayıda konumlan.
kaydı bulduğun zaman niye siliyorsun?

Kod: Tümünü seç

raise exception.create('girilmesi istenen.vsvsvsvsvs');
dersen bu zaten işlemleri iptal eder
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
danaci
Üye
Mesajlar: 178
Kayıt: 24 May 2005 01:45

Mesaj gönderen danaci »

table daki kayıtlar çoğaldıkça bu işlem pek işe yaramaz ve çok yavaşlar işlemler. Bunun yerine kayıdı tuttuğunuz stok_kodu ile

select count(*) kayit_say kodu from adotable where stok_kodu=:stok_kodu
if kayit_say>0 then
işemler
...
....
derseniz formdan giriş yapılan alanıda(:stok_kodu) sorguya parametre geçirirseniz işlemleriniz daha hızlı olacaktır.
bu code ise kaydet düğmesinin key_pressed düğmesine yazarsınız.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

hakansozgen yazdı:
mkysoft yazdı:bunu kodlarla yapmak yerine veri tabanından yapmalısın. Stok_kodu alanını uniq olarak işaretlersen kaydedilmez.
Dediğiniz mantıklı ama veritabanı ingilizce olduğu zaman verdiği uyarı kullanıcıyı rahatsız edebilir. O yüzden amacım kontrol altına almak ve ona göre kodlar işletmek. Eğer kodlarımda hata varsa belirtin lütfen.

İlginiz için teşekkürler.
O halde kayıt kodunu try-except bloğu içinde yaparak olayı kontrol altına alabilirsiniz. Başka bir yol da AppEvents bileşeninin onException olayında mesajı kontrol altına almak olabilir. Kolay gelsin.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla