Allow nulls sorunu

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
hbulus
Üye
Mesajlar: 163
Kayıt: 14 Tem 2003 11:30
İletişim:

Allow nulls sorunu

Mesaj gönderen hbulus »

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?
Erbab-ı kemâli çekemez nakıs olan, rencide olur Dide-i Huffaş ziyadan....
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

A.S.

allow nulls, null girmeye (boş bırakmaya) izin ver demektir. Sizin not null yapmanız lazım.

Kolay gelsin.
hbulus
Üye
Mesajlar: 163
Kayıt: 14 Tem 2003 11:30
İletişim:

Mesaj gönderen hbulus »

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....
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

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 :idea: Böyle bir değişiklik için tüm kayıtlardaki ilgili alanı önce boş/hiç bir şey / null dan kurtarmanız gerekir :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
hbulus
Üye
Mesajlar: 163
Kayıt: 14 Tem 2003 11:30
İletişim:

Mesaj gönderen hbulus »

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ış olabilir :idea: Böyle bir değişiklik için tüm kayıtlardaki ilgili alanı önce boş/hiç bir şey / null dan kurtarmanız gerekir :idea:
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. :oops:
Erbab-ı kemâli çekemez nakıs olan, rencide olur Dide-i Huffaş ziyadan....
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

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:

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);
Birinci INSERT INTO çalışır fakat ikincisi hata verir.

İyi çalışmalar.
hbulus
Üye
Mesajlar: 163
Kayıt: 14 Tem 2003 11:30
İletişim:

Mesaj gönderen hbulus »

Abiler hepinize teşekkürler, sayenizde hallettim. Hem veritabanı, hemde Delphi tarafında hatalarımı yakaladım. Çözüm tamamdır. Kolay gelsin.... :D
Erbab-ı kemâli çekemez nakıs olan, rencide olur Dide-i Huffaş ziyadan....
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

@Hakan Can'ın dediği gibi boş ile null aynı şey değil. Boş diye bahsederken boşluk/space anlamında söylememiştim ama o anlama da gelmiş olabilir :wink:
Netice de null ile boşluk/space den mi kaynaklanmış :?:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
hbulus
Üye
Mesajlar: 163
Kayıt: 14 Tem 2003 11:30
İletişim:

Mesaj gönderen hbulus »

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.

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;
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? :oops:
Erbab-ı kemâli çekemez nakıs olan, rencide olur Dide-i Huffaş ziyadan....
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

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

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; 
şeklinde yazman yeterli. Burada on E:Exception do kısmı gereksiz :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla