tekrarsız kayıt

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
dcpromo
Üye
Mesajlar: 38
Kayıt: 12 May 2005 12:27

tekrarsız kayıt

Mesaj gönderen dcpromo »

merhaba arkadaşlar ....
şimdi bir tablom var örnek

Ürün kodu
150
154
158
122

Ben buna adoquerynin post metodu ile kayıt ekliyorum.

Benim amacım 150 nolu ürün kodundan başka kayıt girilmesin. Primary key ile yapmak istemiyorum bunu.

yardımlarınız için saolun
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

Şöyle yapabilirsin.Diyelimki bu kayıt(post) işlemini Query1 ile yapıyorsun.
Başka bir Query oluşturup yada runtime create ederek örn.Query2 bununlada bir SQL sorgusu yazarak bu post edeceğin kayıt numarasını içeren kayıtı ararsın.Eğer kayıt bulunursa

Kod: Tümünü seç

 ShowMessage('Bu Kayıt Zaten Var');
exit;
eğer bulunamazsa

Kod: Tümünü seç

Query1.post;
Hatta bunu bir fonksiyon olarak ta yazıp True False durumuna göre

Kod: Tümünü seç

Query1.Post;
yada

Kod: Tümünü seç

Query1.Cancel;
Yapabilirsin.
Kolay gelsin.
menderes

Mesaj gönderen menderes »

NewMember hocama selam bende bir ilave yapayım acizane olarak.
Önce ADOQuery ile post işlemini pek tavsiye etmem tabi bu benim düşüncem.
Ürün table adı: urun olsun
içindede id,urunkodu olsun daha olurda ben örnek için iki tane alan yazayım.
ürünlerin listelendiği bir form olsun.
DBGridle listelensin.
Burada yeni - Düzelt - Sil Çıkış butonları olsun.
Yeni butonuna tıklayalım;
Yeni Kayıt için açılan pencerede;
Ürün Kodu : Edit1.Text
Kaydet butonu ve çıkış butonu olsun.
Şimdi ürünü kaydedelim kaydet butonuna tıklayarak.

Kod: Tümünü seç

Procedure TForm2.kaydetclick(Sender:TObject);
var 
K:string;
begin// önce editlerin boş geçmemesi için kontrol edelim
if Trim(Edit1.Text)<>'' then
begin
// if not ADOTable1.Locate('urunkodu',Trim(Edit1.Text),[]) then gibi de olabilir
ADOQuery1.Close;
ADOQuery1.Sql.Clear;
ADOQuery1.Sql.Add('select * from urun');
ADOQuery1.sql.Add('where urunkodu="'+Trim(Edit1.Text)+'"');
ADOQuery1.prepared:=True;
ADOQuery1.Open;
if not ADOQuery1.IsEmpty then //Eğer boş dönerse
begin
K:='INSERT into urun(urunkodu)Values( " '+Trim(Edit1.Text)+'")';
//ADOCommand1.CommandText:=K;
//ADOCommand1.Execute;
//veya
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(K);
ADOQuery1.ExecSQL;
//Eğer Form1 deki DBGrid1 ADOQuerye bağlı ise
Form1.ADOQuery1.Close;
Form1.ADOQuery1.Sql.Clear;
Form1.ADOQuery1.Sql.Add('select * from urun');
Form1.ADOQuery1.Open;
Form1.ADOQuery1.Locate('urunkodu',Edit1.Text,[]);// geri döndüğümüzde yeni kayıt seçili olsun. 
Close;
end
else
begin //kayıt varsa uyar
ShowMessage('Tekrarlı Kayıt Girişi');
Edit1.Text;
Abort;
end;
end
else
begin
ShowMessage('Eksik Bilgi Girişi');
Edit1.Text;
Abort;
end; 
end;
Her forma ADOQuery koymaktansa Datamodule açıp oraya koyduğunuz ADOQuery i usese tanıttıktan sonra kullanabilirsiniz. DataModule1.ADOQuery1 gibi
Eğer Düzeltme için işlem yaptırıp yine urunkodunu kullanıcı değiştirdiğinde değiştirilen de kontrol edilsin diyorsan. Ben şöyle yapıyorum.
form2 ye visible özelliği olan bir Edit.Text yerleştiriyorum. Bunu fieldin özelliğine göre global bir değişken le de yapabilirsin.
Düzeltilecek veriler listelenirken buraya da kontrol edeceğim veriyi koyuyorum. Daha sonra düzelt butonuna tıklandığında önce Edit1.Text le Edit.Text i karşılaştırıyorum. Eğer kullanıcı kodu değiştirmemişse sorun yok işleme devam. Diğer kayıtları değiştirecek belki. Eğer visible özelliği olan edit.text le verinin listelendiği Edit1.Text birbirini tutmuyorsa demekki urunkodunu da değiştirmiş. O zaman değiştirilen kodu kontrol ediyorum Daha önce kayıtı varmı diye.
Umarım faydalı olabilmişimdir. Kolay gelsin......
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

selam
basit bir şekilde bu şekilde de yapılabilir
if adoquery1 .recordcount=150 then begin
showmessage('Bu kayıt zaten var');
end
else
if adoquery1.recordcount<>'' then begin
//Kaydet işlemlerini''
end;
end;

Kod: Tümünü seç

kolay gelsin
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

Allah razı olsun Menderes hocam.Buda güzel bir çözüm.Bilgi dağarcığımızda bulunmalı.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Bence bunu kodla yapmayın, çok sağlıksız. Her an şişebilirsiniz. En garanti ve uygun yol unique indeks tanımlamaktır. Hangi alan ise o alana bir unique indeks oluşturun ve bir daha çift kayıt olmaz deyip kapatın konuyu :)

Kolay gelsin.
dcpromo
Üye
Mesajlar: 38
Kayıt: 12 May 2005 12:27

slm

Mesaj gönderen dcpromo »

cevabın için teşekkürler mussimsek..

zaten tablomda
referansid diye unique var ?
diğerini nasıl yapabilirim
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

O alan için indeks tanımla, tanımlarken de unique işaretini seç. Hangi veritabanı bilmediğim için net yazamıyorum ama zaten indeks tanımlarken çok seçenek yok, hemen görürsün.

Kolay gelsin.
menderes

Mesaj gönderen menderes »

mussimsek hocam unique indeks tanımlayıpta nasıl bir kod yazmak gerekir ki ingilizce hata mesajı vermesin. Bir de yazdığım kod da veritabanı şişme olayı nasıl olur. Bilgilenme açısından soruyorum. Eğer cevaplandırırsanız bizi memnun edersiniz.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

menderes yazdı:mussimsek hocam unique indeks tanımlayıpta nasıl bir kod yazmak gerekir ki ingilizce hata mesajı vermesin. Bir de yazdığım kod da veritabanı şişme olayı nasıl olur. Bilgilenme açısından soruyorum. Eğer cevaplandırırsanız bizi memnun edersiniz.
Hocam :ara Arama, :ara Arama, :ara Arama

pek çok kez konuştuk bunları.

Kolay gelsin.
menderes

Mesaj gönderen menderes »

mussimsek yazdı:
menderes yazdı:mussimsek hocam unique indeks tanımlayıpta nasıl bir kod yazmak gerekir ki ingilizce hata mesajı vermesin. Bir de yazdığım kod da veritabanı şişme olayı nasıl olur. Bilgilenme açısından soruyorum. Eğer cevaplandırırsanız bizi memnun edersiniz.
Hocam :ara Arama, :ara Arama, :ara Arama

pek çok kez konuştuk bunları.

Kolay gelsin.
Bu sitenin ilk zamanlarında öyle mutlu oldumki, sizleri tanıdığım için,
bir şey sorulduğu zaman şevkle bir cevap verme hevesi vardı. Hatta konuşmalarınızda programcı arkadaşlar hafta sonu biraraya geliyor çay içiyor diye yazılmıştı forumda. Şimdi nerde hatırlamıyorum. 3 sene önce hala hafızamdan gitmemiş. Şimdi ne oldu ki sadece siz değil diğer bazı admin ve yöneticiler de kısa bir yazı ile arama diye tutturuyor. Kısa bir cevap sorum aslında veya kısa bir cevap yazıp bu konu ile ilgili arama yapabilirsiniz denilirdi.
Forumda bir konu için arama yapıyorum. Bulduğum konuda da arama yap kelimeleri çıkıyor.
Eleştirimi okurken, hizmetleriniz için dualarımız olduğunu unutmayın. .
Tekrar dualarımızla başarılarınızın devamını arzu ederken ölümden sonra amel defterimizin açık olması dileğiyle saygılar.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Hocam haklısın ama olaya bir de şurdan bakmanı rica ediyorum. Yöneticiler başta olmak üzere cevap yazan arkadaşların çoğunluğu çok yoğun çalışan arkadaşlar. İnanın biz molalarımızı forumda değerlendiriyoruz.

Bazen öyle sorular oluyorki ben biliyorum forumda onlarca, yüzlerce kez konuşuldu. Revamı bunu 11. veya 101. kez yazmak :roll: Eğer reva derseniz ben 15-20 dakikamı size verip ilgili cevapları bulup yollayacağım.

Kolay gelsin.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

merhaba,

errorpost eventine sadece çıkmasını istediğiniz mesajı exception olarak yazıyorsunuz işlem tamam. post olayında hata oluşursa bu mesaj dönüyor

viewtopic.php?t=334&highlight=posterror

viewtopic.php?t=274&highlight=posterror

kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
mrtyes

Mesaj gönderen mrtyes »

Kod: Tümünü seç

ad:=inputbox('Öğrenci Numarası Sorgulama Ekranı','Lütfen Öğrenci Numarasını Giriniz','');
if adoTABLE1.locate('ogrno',ad,[]) then //no files i edit1 den kontrol ediyor.
begin
showmessage('Bu Numaralı Başka Bir Kayıt Var'+#13+'Öğrenci Numaraları Aynı Olamaz');
end
else
BEGIN
adoTABLE1.Insert;
adoTABLE2.Insert;
adoTABLE3.Insert;
dbedit7.SetFocus;
dbedit7.Text:=ad;
end;
end;
basit bir kod ben bunu kullandım.
dcpromo
Üye
Mesajlar: 38
Kayıt: 12 May 2005 12:27

slm

Mesaj gönderen dcpromo »

merhaba arkadaşlar
post error denedim ama çalışmadı.projeji build ederken hiç bir hata vermiyor.ama gene aynı kayıtı yaz dediğimde index unique hatası veriyor.


yardımlarınızı bekliyorum
Cevapla