Paradox Veri Tabanı Kayıt Ekletmeme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
kaan_karabey
Üye
Mesajlar: 107
Kayıt: 01 May 2013 05:30

Paradox Veri Tabanı Kayıt Ekletmeme

Mesaj gönderen kaan_karabey »

Resim Resim

Merhabalar;

Ekle Butonuna Bastığımda Dbgriddeki kullanıcı adıyla aynı ise Kaydet butonuna bastığımda veri tabanına kayıt ekletmeyip uyarı vermem gerekiyor bana yardımcı olurmusunuz???

Saygılarımla;
Sevgiler Yalan Olmuş Yalan Sahtekar Bırakıpta Bir Gün Seni Gitmeyecek Mi?
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: Paradox Veri Tabanı Kayıt Ekletmeme

Mesaj gönderen tayipk »

merhaba bu işlemi Query kullanarak ve bir User Tablon olduğunu düşünerek yapmaya çalıştığını düşünüyorum. Eğer öyleyse aşağıdaki işlemler senin işini görecektir.

1 - Kullanıcılar formunda DBGRID e bağlı bir query ve datasource olacak.
2 - Yeni kullanıcı ekleme formun zaten gördüğüm kadarıyla farklı olduğu için o formdada bir adet Query kullanacaksın ve onda işlem yapacaksın.

şimdi Ana kullanıcılar formunun adını Users Yeni kullanıcı formunun adınıda New_Users olarak kabul edecem ve kodlamaya girecem :)
New_Users formunun use unit bölümüne Users Formunu eklemeyi unutma;

1 - New_users Formundaki Query nin Object Inspector bölümünden Events e tıkla ve ordan OnBeforePost olayını çift tıkla.
şimdi sıra kodlarda
New_Users Formundaki Kaydet Butonunun Onclick olayına
Query.Post Yazman yeterli olacak.
Query nin OnBeforePost olayına ise

Kod: Tümünü seç

begin
users.query.close;
users.query.sql.clear;
users.query.sql.text:='select * from USER where User_name='''+Kullanici_Adi.text+'''';
users.query.open;
if users.query.recordcount>0 then
begin
showmessage:=(Kullanici_Adi.Text+' '+'İSİMLİ KULLANICI ÖNCEDEN KAYDEDİLMİŞTİR');
Abort;
end;
users.query.close;
users.query.sql.clear;
users.query.sql.text:='select * from USER';
users.query.open;
end;
hepsi bu. Kolay gelsin
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
kaan_karabey
Üye
Mesajlar: 107
Kayıt: 01 May 2013 05:30

Re: Paradox Veri Tabanı Kayıt Ekletmeme

Mesaj gönderen kaan_karabey »

Merhabalar;

İkiside aynı farklı değil fotoların biri önceden çektiğim foto diğeri az önce çektiğim foto .

Bunu sql olmadan table ile yapabiliyormuyuz??

Saygılarımla;
Sevgiler Yalan Olmuş Yalan Sahtekar Bırakıpta Bir Gün Seni Gitmeyecek Mi?
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Paradox Veri Tabanı Kayıt Ekletmeme

Mesaj gönderen Lord_Ares »

Paradox veritabınını oluşturduğunu düşünerek ,
1) Formuna bir tane table ve datasource bileşini koy
2)Datasource bileşeninin özellikler kısmındaki Dataset kısmını tıkla table1 seç
3)Table bileşeninin özellikler kısmındaki Database name kısmını tıklayarak oluşturduğun veritabanı dosyasını göster.
4) Table bileşeninin özelliklerindeki Table Name kısmında oluşturduğun data görünecektir onu seç.
5)Table bileşenini üzerini çift tıkla açılan pencerede CTRL A tuşları basarak tablondaki tüm alanları ekle.
6) Table Bileşeninin Active özelliğini true yap.

Kaydet buttonuna bastığında çalışacak kod. Bunu mantığını anlayabilmen için örnek olarak sadece adı alanını ekleyerek gösteriyorum. Diğerlerini sen eklersin

Kod: Tümünü seç


Table1.LOCATE('AD',edit1.Text ,[loCaseInsensitive]);/// Table1 tablosunun AD alanında Edit1 içindekini ara

IF Table1ad.AsString=Edit1.Text THEN begin        /// eğer table1ad alanındaki edit1 de yazılı olan ile aynı ise
    Showmessage(''Bu kayıt daha önce eklenmiş..)  /// aynıysa bu hata mesajını göster
end else begin                                                    /// eğer aynı değilse yapacağı işlemler
   Table1.Append;                                              /// tabloyu kaydetme moduna alıyoruz
   Table1ADI.AsString:=Edit1.Text;                    ///table1 deki adı alanı eşittir edit1 içinde girilen bilgiye
   Table1.Refresh;                                           ////Yapılan değişikliklerin görünmesi için tablomuzu yeniliyoruz. 
   Showmessage(''Kayıt Eklendi..)            
end;

Locate ile arama yaparsan, arama yapıldıktan sonra kayıt varsa kursör bulunan kaydın üzerine gider.
Locate ile arama yaptığında true veya false diye değer döner.Bu arama şeklini şöylede kullanabilirsin.

Kod: Tümünü seç


Table1.LOCATE('AD',edit1.Text ,[loCaseInsensitive]);/// Table1 tablosunun AD alanında Edit1 içindekini ara

IF Table1.LOCATE('AD',edit1.Text ,[loCaseInsensitive])=true THEN begin        /// eğer table1ad alanındaki edit1 de yazılı olan ile aynı ise
    Showmessage(''Bu kayıt daha önce eklenmiş..)  /// aynıysa bu hata mesajını göster
end else begin                                                    /// eğer aynı değilse yapacağı işlemler
   Table1.Append;                                              /// tabloyu kaydetme moduna alıyoruz
   Table1ADI.AsString:=Edit1.Text;                    ///table1 deki adı alanı eşittir edit1 içinde girilen bilgiye
   Table1.Refresh;                                           ////Yapılan değişikliklerin görünmesi için tablomuzu yeniliyoruz. 
   Showmessage(''Kayıt Eklendi..)            
end;
Arama yaparken sadece adı değilde adı, soyadı gibi her ikisi birden kullanarak arama yapmak istersen kod şöyle olacaktır.

Kod: Tümünü seç

 IF Table1.LOCATE('AD; SOYAD',VarArrayOf([Edit1..Text,Edit2.text]),[loCaseInsensitive])THEN begin  /// AD alanında Edit1 de yazılanı ve soyad alanında edit2 dekini ara
     Showmessage(''Bu kayıt daha önce eklenmiş..)  /// aynıysa bu hata mesajını göster                       
end else begin                                                    /// eğer aynı değilse yapacağı işlemler
   Table1.Append;                                              /// tabloyu kaydetme moduna alıyoruz
   Table1ADI.AsString:=Edit1.Text;                    ///table1 deki adı alanı eşittir edit1 içinde girilen bilgiye
   Table1.Refresh;                                           ////Yapılan değişikliklerin görünmesi için tablomuzu yeniliyoruz. 
   Showmessage(''Kayıt Eklendi..)            
end;
 
Burada IF Table1.LOCATE('AD; SOYAD',VarArrayOf([Edit1..Text,Edit2.text]),[loCaseInsensitive]) eşittir true kullanmadım fakat kullanmakla aynı anlama gelir. O yüzden ona takılma. Veritabanında çok kayıt varsa ( 10000 gibi..) bu arama şekli yavaş olur. O yüzden yukarıda arkadaşın gösterdiği şekilde Sql ile yaparsan aramaların daha hızlı olur.
Tercih senin kolay gelsin
NOT: Kodları elle yazdım deneme şansım olmadı ufak tefek noktalama hataları olabilir.
kaan_karabey
Üye
Mesajlar: 107
Kayıt: 01 May 2013 05:30

Re: Paradox Veri Tabanı Kayıt Ekletmeme

Mesaj gönderen kaan_karabey »

Lord_Ares yazdı:Paradox veritabınını oluşturduğunu düşünerek ,
1) Formuna bir tane table ve datasource bileşini koy
2)Datasource bileşeninin özellikler kısmındaki Dataset kısmını tıkla table1 seç
3)Table bileşeninin özellikler kısmındaki Database name kısmını tıklayarak oluşturduğun veritabanı dosyasını göster.
4) Table bileşeninin özelliklerindeki Table Name kısmında oluşturduğun data görünecektir onu seç.
5)Table bileşenini üzerini çift tıkla açılan pencerede CTRL A tuşları basarak tablondaki tüm alanları ekle.
6) Table Bileşeninin Active özelliğini true yap.

Kaydet buttonuna bastığında çalışacak kod. Bunu mantığını anlayabilmen için örnek olarak sadece adı alanını ekleyerek gösteriyorum. Diğerlerini sen eklersin

Kod: Tümünü seç


Table1.LOCATE('AD',edit1.Text ,[loCaseInsensitive]);/// Table1 tablosunun AD alanında Edit1 içindekini ara

IF Table1ad.AsString=Edit1.Text THEN begin        /// eğer table1ad alanındaki edit1 de yazılı olan ile aynı ise
    Showmessage(''Bu kayıt daha önce eklenmiş..)  /// aynıysa bu hata mesajını göster
end else begin                                                    /// eğer aynı değilse yapacağı işlemler
   Table1.Append;                                              /// tabloyu kaydetme moduna alıyoruz
   Table1ADI.AsString:=Edit1.Text;                    ///table1 deki adı alanı eşittir edit1 içinde girilen bilgiye
   Table1.Refresh;                                           ////Yapılan değişikliklerin görünmesi için tablomuzu yeniliyoruz. 
   Showmessage(''Kayıt Eklendi..)            
end;

Locate ile arama yaparsan, arama yapıldıktan sonra kayıt varsa kursör bulunan kaydın üzerine gider.
Locate ile arama yaptığında true veya false diye değer döner.Bu arama şeklini şöylede kullanabilirsin.

Kod: Tümünü seç


Table1.LOCATE('AD',edit1.Text ,[loCaseInsensitive]);/// Table1 tablosunun AD alanında Edit1 içindekini ara

IF Table1.LOCATE('AD',edit1.Text ,[loCaseInsensitive])=true THEN begin        /// eğer table1ad alanındaki edit1 de yazılı olan ile aynı ise
    Showmessage(''Bu kayıt daha önce eklenmiş..)  /// aynıysa bu hata mesajını göster
end else begin                                                    /// eğer aynı değilse yapacağı işlemler
   Table1.Append;                                              /// tabloyu kaydetme moduna alıyoruz
   Table1ADI.AsString:=Edit1.Text;                    ///table1 deki adı alanı eşittir edit1 içinde girilen bilgiye
   Table1.Refresh;                                           ////Yapılan değişikliklerin görünmesi için tablomuzu yeniliyoruz. 
   Showmessage(''Kayıt Eklendi..)            
end;
Arama yaparken sadece adı değilde adı, soyadı gibi her ikisi birden kullanarak arama yapmak istersen kod şöyle olacaktır.

Kod: Tümünü seç

 IF Table1.LOCATE('AD; SOYAD',VarArrayOf([Edit1..Text,Edit2.text]),[loCaseInsensitive])THEN begin  /// AD alanında Edit1 de yazılanı ve soyad alanında edit2 dekini ara
     Showmessage(''Bu kayıt daha önce eklenmiş..)  /// aynıysa bu hata mesajını göster                       
end else begin                                                    /// eğer aynı değilse yapacağı işlemler
   Table1.Append;                                              /// tabloyu kaydetme moduna alıyoruz
   Table1ADI.AsString:=Edit1.Text;                    ///table1 deki adı alanı eşittir edit1 içinde girilen bilgiye
   Table1.Refresh;                                           ////Yapılan değişikliklerin görünmesi için tablomuzu yeniliyoruz. 
   Showmessage(''Kayıt Eklendi..)            
end;
 
Burada IF Table1.LOCATE('AD; SOYAD',VarArrayOf([Edit1..Text,Edit2.text]),[loCaseInsensitive]) eşittir true kullanmadım fakat kullanmakla aynı anlama gelir. O yüzden ona takılma. Veritabanında çok kayıt varsa ( 10000 gibi..) bu arama şekli yavaş olur. O yüzden yukarıda arkadaşın gösterdiği şekilde Sql ile yaparsan aramaların daha hızlı olur.
Tercih senin kolay gelsin
NOT: Kodları elle yazdım deneme şansım olmadı ufak tefek noktalama hataları olabilir.


Yalnız Kodları Eklediğimde Yeni Kullanıcı Oluştururken de Bu Kullanıcı Kayıt Edilmiş diyor ve İkinci Kez Aynı Kullanıcıyla Kayıt Ediyor.Bunu Nasıl Çözebiliriz???
Zaten Kullanıcı Fazla Olmaz Ki Proje Küçük Proje ve Paradoxla Yazılmıştır.Bunu istememin nedeni;

Resim

Resimdeki Şifremi Unuttum Bölümünün Düzgün Çalışması İçindir.İki Tane Aynı Kullanıcı Adıyla Kayıtlı Olan Kişiler Görünmüyor İlk Kayıt Olan Kişi Görünüyor.O yüzden Bende Bunu Engellemek İstedim.

Dediğim Gibi Bu Proje Dosyasında Ayarlıyabilirmisiniz???

http://s3.dosya.tc/server24/Sv4BPa/Kull ... a.rar.html
Sevgiler Yalan Olmuş Yalan Sahtekar Bırakıpta Bir Gün Seni Gitmeyecek Mi?
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Paradox Veri Tabanı Kayıt Ekletmeme

Mesaj gönderen Lord_Ares »

aşağıda sizin projenizin kodlarına bakıyorum, benim verdiğim kod ile alakası yok. Lookup kullanmışsınız. Size tavsiyem herhangi bir delphi kitabı veya görsel eğitimi ile başlangıç seviyesine kadar öğrenmeniz. İlk verdiğim kod örneğini şuan deniyorum ve sorunsuz çalışıyor.

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Table1.Append;
Form2.Show;
end;

Kod: Tümünü seç


var
ara:variant;
begin
ara:=Table1.Lookup('kullaniciadi',Edit1.Text,'kullaniciadi;sifre');
if VarIsNull(ara) Then //Eğer boş sa
ShowMessage('         Kayıt Bulunamadı        ')
else
ShowMessage('           Kullanıcı Adı :  '+ara[0]+#13#10+'           Şifre :  '+ara[1]);
Edit1.Text:='';
Edit1.SetFocus;
End;

kaan_karabey
Üye
Mesajlar: 107
Kayıt: 01 May 2013 05:30

Re: Paradox Veri Tabanı Kayıt Ekletmeme

Mesaj gönderen kaan_karabey »

O kodlar benim projede zaten hep ekliydi. çalışıyor sadece biliyorum o ara kodu ben onu demedim ki kaydet kodunu dedim.Onlar sorunsuz çalışıyor...
Sadece benim demek istediğim ekle butonuna bastıgımda diğer form açılıyor ya kaydet butonuna bastıgımda aynı kullanıcı adıyla kayıt etmesin demiştim.Galiba Anlatamadım...


Bu Linkte Anlatmaya Çalıştım...Umarım Anlatabilmişimdir.

http://prntscr.com/3s2loe
Sevgiler Yalan Olmuş Yalan Sahtekar Bırakıpta Bir Gün Seni Gitmeyecek Mi?
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Paradox Veri Tabanı Kayıt Ekletmeme

Mesaj gönderen Lord_Ares »

Tamam işte, kaydet buttonuna benim verdiğim ilk kodu yazarsan göreceksin ki eğer aynı kayıt varsa hata verecek ve kaydı eklemeyecektir.
Bu arada Ekle buttonun da append etmen hata olur orada sadece show demelisin.
Table1.Append;
Form2.Show

Örneğini görmen için yaptım.
http://www.dosya.tc/server31/cHoFs2/kaydet.rar.html;
kaan_karabey
Üye
Mesajlar: 107
Kayıt: 01 May 2013 05:30

Re: Paradox Veri Tabanı Kayıt Ekletmeme

Mesaj gönderen kaan_karabey »

Lord_Ares yazdı:Tamam işte, kaydet buttonuna benim verdiğim ilk kodu yazarsan göreceksin ki eğer aynı kayıt varsa hata verecek ve kaydı eklemeyecektir.
Bu arada Ekle buttonun da append etmen hata olur orada sadece show demelisin.
Table1.Append;
Form2.Show

Örneğini görmen için yaptım.
http://www.dosya.tc/server31/cHoFs2/kaydet.rar.html;

Teşekkür ederim ilgiliniz için sorunum sizin sayenizde çözüldü....
Sevgiler Yalan Olmuş Yalan Sahtekar Bırakıpta Bir Gün Seni Gitmeyecek Mi?
yusuf simsek
Üye
Mesajlar: 330
Kayıt: 09 Mar 2004 11:18
Konum: Konya
İletişim:

Re: Paradox Veri Tabanı Kayıt Ekletmeme

Mesaj gönderen yusuf simsek »

Sayın @kaan_karabey... ( Eğer tüm projelerinde Paradox kullanıyorsan ) hemen paradox veritabanını terket!!!!Hızlı bir şekilde Firebird geç... Max 1 ya da 2 gün adaptasyon sorunu yaşarsın... Formda istemediğin kadar bilgi var...
Bugün bir kez daha,
Hiç Birşey Bilmediğimi Öğrendim!!!

https://extrayazilim.com
kaan_karabey
Üye
Mesajlar: 107
Kayıt: 01 May 2013 05:30

Re: Paradox Veri Tabanı Kayıt Ekletmeme

Mesaj gönderen kaan_karabey »

yusuf simsek yazdı:Sayın @kaan_karabey... ( Eğer tüm projelerinde Paradox kullanıyorsan ) hemen paradox veritabanını terket!!!!Hızlı bir şekilde Firebird geç... Max 1 ya da 2 gün adaptasyon sorunu yaşarsın... Formda istemediğin kadar bilgi var...

Firebird de Hata Alıyorum Pek Çözemedim Firebird 'i

Örnek Verecek Olursam Mesala Şu Hata Ne Anlama Geliyor...

viewtopic.php?f=2&t=32476
Sevgiler Yalan Olmuş Yalan Sahtekar Bırakıpta Bir Gün Seni Gitmeyecek Mi?
yusuf simsek
Üye
Mesajlar: 330
Kayıt: 09 Mar 2004 11:18
Konum: Konya
İletişim:

Re: Paradox Veri Tabanı Kayıt Ekletmeme

Mesaj gönderen yusuf simsek »

küçük hatalar bunlar ;)

Bu tip sorunları çözmek Paradoxta yaşayabileceğin veri kayıpları sonrası müşterinin gazını almaktan daha kolay...
Bugün bir kez daha,
Hiç Birşey Bilmediğimi Öğrendim!!!

https://extrayazilim.com
Cevapla