Key violation hatası
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 48
- Kayıt: 15 May 2009 12:16
Key violation hatası
paradox veri tabanı kullanıyorum aşağıdaki örnek çalışmada vt. ilki kaydediyorum ikinci kayıtta key violation hatası alıyorum ve vt. kayıt yapmıyor yardım lütfen
Re: Key violation hatası
Merhaba,
Delphi7 ve Borland Database Engine bilgisayarımda yüklü olmadığı için Notepad++ içinden kodlarınızı incelemeye çalıştım.
Hatayı hangi form içinde aldığınızı belirtmemişsiniz. Ben aşağıda gözüme çarpan ilk olası hata noktası ile ilgili öneride bulunacağım. Eğer hata aldığınız yer farklı ise neresi olduğunu belirtmeniz gerekir.
"Key Violation" hatası database motoru ile ilgilidir. Eğer siz tablonuzda bir kolon için "Unique" (aynı değer değer iki satıra birden kaydedilemez) şeklinde tanım yaptı iseniz (Tasarım ekranında, satırında yıldız karakteri "*" olan kolonlar unique kolonlardır) ve bu alana iki defa aynı değeri kaydetmek isterseniz database sistemi tablo tanımındaki yapıya uyabilmek için kayıt girmez ve size sebebini hata ile bildirir.
Sorunuzun içeriğinde tablo yapınızı bildirmediğiniz ve kullandığınız database tablolarını ben açamadığım için bu sorunu nerede yaşıyor olabilirsiniz tahminde bulunamıyorum.
Gördüğüm kadarıyla kodunuzda birçok "tavsiye edilmeyecek" kullanım var. Probleme yönelik olarak öncelikle aşağıdaki düzeltmeleri yapıp daha detaylı bilgi vermenizi tavsiye ederim.
Unit2.Pas içinde Button1Click() olayında (Kaydet butonu) aşağıdaki şekilde düzenleyin:
Delphi7 ve Borland Database Engine bilgisayarımda yüklü olmadığı için Notepad++ içinden kodlarınızı incelemeye çalıştım.
Hatayı hangi form içinde aldığınızı belirtmemişsiniz. Ben aşağıda gözüme çarpan ilk olası hata noktası ile ilgili öneride bulunacağım. Eğer hata aldığınız yer farklı ise neresi olduğunu belirtmeniz gerekir.
"Key Violation" hatası database motoru ile ilgilidir. Eğer siz tablonuzda bir kolon için "Unique" (aynı değer değer iki satıra birden kaydedilemez) şeklinde tanım yaptı iseniz (Tasarım ekranında, satırında yıldız karakteri "*" olan kolonlar unique kolonlardır) ve bu alana iki defa aynı değeri kaydetmek isterseniz database sistemi tablo tanımındaki yapıya uyabilmek için kayıt girmez ve size sebebini hata ile bildirir.
Sorunuzun içeriğinde tablo yapınızı bildirmediğiniz ve kullandığınız database tablolarını ben açamadığım için bu sorunu nerede yaşıyor olabilirsiniz tahminde bulunamıyorum.
Gördüğüm kadarıyla kodunuzda birçok "tavsiye edilmeyecek" kullanım var. Probleme yönelik olarak öncelikle aşağıdaki düzeltmeleri yapıp daha detaylı bilgi vermenizi tavsiye ederim.
Unit2.Pas içinde Button1Click() olayında (Kaydet butonu) aşağıdaki şekilde düzenleyin:
Kod: Tümünü seç
if (Table1.Status <> dsEdit) and (Table1.Status <> dsInsert) then Exit;
Table1Evrak.AsString:=E1.Text;
Table1HTipi.AsString:=E2.Text;
Table1HTanim.AsString:=E3.Text;
Table1BSantiye.AsString:=E4.Text;
Table1HKodu.AsString:=E5.Text;
Table1HarTipi.AsString:=E6.Text;
Table1IrNo.AsString:=E7.Text;
Table1MalNo.AsString:=E8.Text;
Table1Malzeme.AsString:=E9.Text;
Table1Miktar.AsString:=E10.Text;
Table1Durum.AsString:=E11.Text;
Table1.Post;
-
- Üye
- Mesajlar: 48
- Kayıt: 15 May 2009 12:16
Re: Key violation hatası
Hocam hata ("Unique" ) tanım yapmadığım halde hata alıyorum oysa bazı alanlara zaman zaman Aynı değerleri girmem gerekiyor, key'i kaldırmadan bunu nasıl sağlarım
if (Table1.Status <> dsEdit) and (Table1.Status <> dsInsert) then Exit; saatır çalışmadı
Status yerine state kullandım Program çalışıyor ancak işlem görmüyor aynı Hatayı veriyor. Teşekkürler
if (Table1.Status <> dsEdit) and (Table1.Status <> dsInsert) then Exit; saatır çalışmadı
Status yerine state kullandım Program çalışıyor ancak işlem görmüyor aynı Hatayı veriyor. Teşekkürler
Re: Key violation hatası
irNo alanın zorunlu alanına index vermişin ve bu alana veri girişi yapmadığın zaman bu hatayı alman normal. veri girişi yaparken mükerrer kayıt girersende bu hatayı alırsın.
1) önce tablo.insert moduna al
2) sonra post yaptır
aynı anda hem insert hem de post olmaz. tek butonda bunu yapmaya çalışmışın.
1) önce tablo.insert moduna al
2) sonra post yaptır
aynı anda hem insert hem de post olmaz. tek butonda bunu yapmaya çalışmışın.
Re: Key violation hatası
Merhaba.
Bence öncelikle paradox veritabanı kullanmaktan vazgecmelisiniz. Paradox hemen hemen tüm delphicilerin ilk göz ağrısı olsa da aynı zamanda ilk baş ağrısıdır da. Bunun yerine ADO bileşenleri ile MSACCESS kullanabilirsiniz. Bu aynı zamanda query, table yapılarını da öğrenmenizi kolaylaştıracaktır. MSAccess birçok güncel veritabanı ile şekil ve yapı açısından benzerdir.
Gelelim sorununuza:
İlk olarak table.append dedikten sonra tek tek atamanıza gerek yok. Edit bilesenlerini kaldırıp DBEdit bileşenlerini kullanın ve bunları direkt olarak tablonuza bağlayın. (Dataset / Datasource kısmından)
AfterPost'un dediği gibi:
Hatayı kontrol altına almak istersen TRY / EXCEPT kullanabilirsin.
ORNEK:
Except kısmı Debug yaparken (F9 ile) hatayı bilgi amaclı bize gosterir, fakat Release (Shift+Ctrl+F9) halinde gostermez.
Bence öncelikle paradox veritabanı kullanmaktan vazgecmelisiniz. Paradox hemen hemen tüm delphicilerin ilk göz ağrısı olsa da aynı zamanda ilk baş ağrısıdır da. Bunun yerine ADO bileşenleri ile MSACCESS kullanabilirsiniz. Bu aynı zamanda query, table yapılarını da öğrenmenizi kolaylaştıracaktır. MSAccess birçok güncel veritabanı ile şekil ve yapı açısından benzerdir.
Gelelim sorununuza:
İlk olarak table.append dedikten sonra tek tek atamanıza gerek yok. Edit bilesenlerini kaldırıp DBEdit bileşenlerini kullanın ve bunları direkt olarak tablonuza bağlayın. (Dataset / Datasource kısmından)
AfterPost'un dediği gibi:
index olarak belirlediğin bir alanı boş bırakamaz veya aynı kaydı iki kez giremezsin.irNo alanın zorunlu alanına index vermişin ve bu alana veri girişi yapmadığın zaman bu hatayı alman normal. veri girişi yaparken mükerrer kayıt girersende bu hatayı alırsın.
1) önce tablo.insert moduna al
2) sonra post yaptır
aynı anda hem insert hem de post olmaz. tek butonda bunu yapmaya çalışmışın.
Hatayı kontrol altına almak istersen TRY / EXCEPT kullanabilirsin.
ORNEK:
Kod: Tümünü seç
Try
//kodlarımız burada
//kodlarımız burada
Except
on E: Exception do
// hata olursa burayı çalıştır. aynı zamanda E değişkenine hata durumunu aktar ki hata konusunda
// bilgi sahibi olalım ve kullanıyıca ona gore hata iletisi gösterelim.
ShowMessage(E.ClassName+' İşlem esnasında hata oluştu ve işlem tamamlanamadı. Hata Mesajı: '+E.Message);
// E'yi if bloguna da alabiliriz.
// if pos('Key violation', E.Message)>0 then
// ShowMessage(E.ClassName+' Key violation hatası verdim :D Hata Mesajı: '+E.Message);
End;
Re: Key violation hatası
Merhabalar, bana kalırsa MSACCESS ile paradox arasında fazla bir fark yok , yeni başlayanlar için paradox dan başka bir alternatif yok gibi.
paradox da kendini geliştirirken firebird e göz kırmak gerekiyor . En köklü ve kalıcı çözüm şüpesiz ki Firebird.
paradox da kendini geliştirirken firebird e göz kırmak gerekiyor . En köklü ve kalıcı çözüm şüpesiz ki Firebird.