Allow nulls sorunu
Allow nulls sorunu
S.a.
Tablomdaki bir alanı 'allow nulls' yaptığım halde, bu alan boş kaldığı zaman yine de kayıt yapıyor. Halbuki hata vermesi gerekmez mi?
Acaba nerede yanlış yapıyorum?
Tablomdaki bir alanı 'allow nulls' yaptığım halde, bu alan boş kaldığı zaman yine de kayıt yapıyor. Halbuki hata vermesi gerekmez mi?
Acaba nerede yanlış yapıyorum?
Erbab-ı kemâli çekemez nakıs olan, rencide olur Dide-i Huffaş ziyadan....
Hocam yanlış yazmışım pardon, ben 'allow nulls' alanını işaretlemedim. Yani alanım 'not null', böyle olunca kayıt boş geçilince izin vermemesi gerekmiyor mu? Yalnız tablo tasarımında ilk önce allow nulls idi. bir kaç kayıt girdikten sonra not null yaptım, boş bırakmaya izin vermemesi için. bu sebeb olabilir mi?
Erbab-ı kemâli çekemez nakıs olan, rencide olur Dide-i Huffaş ziyadan....
Boş bırakmaya izin ver (allow nulls) olduğunda boş geçilen kayıtlar var ise daha sonra boş geçilmesin (allows not null) yapmaya çalışmanız sonuçlanmamış olabilir
Böyle bir değişiklik için tüm kayıtlardaki ilgili alanı önce boş/hiç bir şey / null dan kurtarmanız gerekir 


Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Hocam ilginize teşekkür ederim. Alan 'allow null' iken iki adet kayıt yapılmış. boş olan bu kayıtları sildim ve tabloyu yeniden kaydettim ama halâ boş kaydı kabul ediyor.rsimsek yazdı:Boş bırakmaya izin ver (allow nulls) olduğunda boş geçilen kayıtlar var ise daha sonra boş geçilmesin (allows not null) yapmaya çalışmanız sonuçlanmamış olabilirBöyle bir değişiklik için tüm kayıtlardaki ilgili alanı önce boş/hiç bir şey / null dan kurtarmanız gerekir

Erbab-ı kemâli çekemez nakıs olan, rencide olur Dide-i Huffaş ziyadan....
Sorunun NULL kavramını yanlış algılamanla ilgili. NULL ile boşluk aynı şeyler değildir. Yani NOT NULL bir alana boşluk atayabilirsin ancak NULL atayamazsın.
Örnek vermek gerekirse:
Birinci INSERT INTO çalışır fakat ikincisi hata verir.
İyi çalışmalar.
Örnek vermek gerekirse:
Kod: Tümünü seç
CREATE TABLE TEST (
KODU INTEGER NOT NULL,
ADI VARCHAR(30) NOT NULL,
PRIMARY KEY (KODU));
INSERT INTO TEST VALUES (1, '');
INSERT INTO TEST VALUES (2, NULL);
İyi çalışmalar.
Evet boşluktan kaynaklanmış, bu delphi tarafındaki hatam idi. Veri tabanınındaki hatayı da sizin önerinizle çözdüm, yani neticede hem veritabanı ve hem de kodlamada hata yapmışım. Düzeldi teşekkür ederim.
Yalnız bir şey daha sormak istiyorum. Daha önce sorulan sorularda geçiyor ama ben halledemedim.
Bu kodlamada except bloğundaki hata mesajını değil delphinin hatasını alıyorum. Delphi dışında exe den çalıştırdım gene benim mesajımı değil kendi hata mesajını veriyor. Ne yapabilirim? 
Yalnız bir şey daha sormak istiyorum. Daha önce sorulan sorularda geçiyor ama ben halledemedim.
Kod: Tümünü seç
begin
if not ((mus0CARI_KOD.Value='.') or (mus0CARI_KOD.Value='')) then
begin
ADOConnection2.BeginTrans;
try
kabul0musterino.AsString:=mus0CARI_KOD.AsString;
kabul0unvan.AsString:=mus0CARI_ISIM.AsString;
kabul0giristarihi.AsDateTime:=DateOf(DBDateEdit1.Field.AsDateTime);
kabul0tahminiteslimtarihi.AsDateTime:=DateOf(DBDateEdit2.Field.AsDateTime);
if DBCheckBox1.Checked=True then kabul0diger.Value:='1';
ADOConnection2.CommitTrans;
except
on E:Exception do
begin
ADOConnection1.RollbackTrans;
ShowMessage('Kayıt işleminde bir hata oldu.!');
end;
end;
end;
end;

Erbab-ı kemâli çekemez nakıs olan, rencide olur Dide-i Huffaş ziyadan....
Delphi IDE den; Tools / Debugger Options... / Language Exceptions sayfasındaki altta Stop On Delphi Exceptions işaretini kaldır. Ayrıca try / execpt bloğunda istediğin bir hata-istisna/exception oluşmasını kontrol etmeyeceksen şeklinde yazman yeterli. Burada on E:Exception do kısmı gereksiz 
Kod: Tümünü seç
try
kabul0musterino.AsString:=mus0CARI_KOD.AsString;
kabul0unvan.AsString:=mus0CARI_ISIM.AsString;
kabul0giristarihi.AsDateTime:=DateOf(DBDateEdit1.Field.AsDateTime);
kabul0tahminiteslimtarihi.AsDateTime:=DateOf(DBDateEdit2.Field.AsDateTime);
if DBCheckBox1.Checked=True then kabul0diger.Value:='1';
ADOConnection2.CommitTrans;
except
ADOConnection1.RollbackTrans;
ShowMessage('Kayıt işleminde bir hata oldu.!');
end;

Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!