Null değeri verilemeyecek bir sütunun değeri Null olarak....

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Null değeri verilemeyecek bir sütunun değeri Null olarak....

Mesaj gönderen Glen »

MSSQL, CxGrid (GridMode'da), AdoDataSet BatchOptimistic modunda kullanıyorum..

"Null değeri verilemeyecek bir sütunun değeri Null olarak güncelleştirilemiyor." Diye bir hata alıyorum.

Tablo yapımda 3 alan var ve bunlar:
ID
PERSONELREFNO (NOTNULL)
GRUPREFNO (NOTNULL)

Şeklinde tanımlı... Yani PersonelRefno ve GrupRefno girilmek zorunda..

Buraya kadar herşey normal ancak sorun şu ki form açılmadan önce döngüyle birlikte aşağıdaki kodları uyguluyorum.

Kod: Tümünü seç

            for i := 1 to 12 do
            begin
              personelegitimekle.EgitimDataSet.Append;
              personelegitimekle.EgitimDataSet.Post;
            end;
Ve EgitimDataSet in After Insert eventi,

Kod: Tümünü seç

procedure Tpersonelegitimekle.EgitimDataSetAfterInsert(DataSet: TDataSet);
begin
  EgitimDataSetGRUPREFNO.AsInteger := gruprefno;
end;
diye bir tanim var.. Dikkatinizi cekersem Append, Postta veya After insertte PersonelRefno yu doldurmuyorum ve buna rağmen boş kayıtlar oluşuyor..Daha önce dediğim gibi BatchOptimistic kullandigimdan dolayi UpdateBatch işlemi gerçekleştirdiğimde kişinin sadece PersonelRefno'sunu doldurduğu kayıtlar veritabanına yansıtılıyor diğerleri ise kaydedilmiyor..

Eğer ben herhangi bir boş kaydın üstüne gelip Personelrefnosunu değiştirip daha sonra vazgeçip silip Focustan çıkarsam hata vermiyor.

Ancak Eğer daha önce bir personel seçimi yapıp Post işlemi gerçekleştirdikten sonra vazgeçip silersem hatayı veriyor..

Sebebi nedir acaba,

EgitimDataSet.Edit;
EgitimDataSetPersonelRefno.Value := null;
EgitimDataSet.Post yaparsam yine aynı hatayı veriyor.. Yani bir şekilde bunun hata vermemesi, ama veritabanına yazılırken hata vermesi gerekiyor yani istediğim bu.. Bir çözümü olan var mı acaba?

NOT: Post işlemi diye kastettiğim şey UpdateBatch değil, Gridin üzerindeki kayıttan UnFocus olup başka bir kaydın veya nesnenin üstüne Focus olmak.

Biraz uzun ve karışık oldu sanırım ama inşallah anlatabilmişimdir..

Kolay gelsin.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

NOT NULL tanımlanan bir alana NULL atamak doğru değil, zaten ciyaklayıp duruyor işte :wink: NOT NULL tanımlayıp neden null atamaya çalışıyorsun tam anlamadım. :?
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

rsimsek yazdı:NOT NULL tanımlanan bir alana NULL atamak doğru değil, zaten ciyaklayıp duruyor işte :wink: NOT NULL tanımlayıp neden null atamaya çalışıyorsun tam anlamadım. :?
Null atamaya calismiyorum.. Sadece ben Grid üzerinden Toplu kayit yapiyorum ve adamin doldurdugu kayitlarin kaydedilmesini istiyorum.. Yani nasil anlatiyim ki hmm biraz karışık.. Eğer kişi doldurduğunu boş yaparsa o grid üzerinde yapsın ama kaydederken işte hata vermeli.. ki öyle yapiyor döngüyle kaydettigim boş kayitlarda.
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

Aşağıdaki kod işimi gördü.. Yani biraz yalandan dolndan yapıyor ama olsun :) Ilginc gelen kisim eger kodla bi Append işlemi yapilirsa NOT NULL bagirmiyor ama... kişi girip elle düzeltip siliyosa alanı düzeltiyor.. İlginç :)

Kod: Tümünü seç

procedure Tpersonelegitimekle.EgitimDataSetPERSONELREFNOChange(
  Sender: TField);
var
i, counter : integer;
begin
  if (EgitimDataSetPERSONELREFNO.Text = '') and (VarToStr(EgitimDataSetPERSONELREFNO.OldValue) = '') then
  begin
      if not EgitimDataSet.Eof then
      begin
      EgitimDataSet.Delete;
      EgitimDataSet.Append;
      EgitimDataSet.Post;
      end else
      begin
      EgitimDataSet.Cancel;
      EgitimDataSet.Append;
      EgitimDataSet.Post;
      EgitimDataSET.Prior;
      EgitimDataSet.Delete;
      end;
  end else
  if (EgitimDataSetPERSONELREFNO.Text = '') and (VarToStr(EgitimDataSetPERSONELREFNO.OldValue) <> '') then
  begin
      if not EgitimDataSet.Eof then
      begin
      EgitimDataSet.Delete;
      EgitimDataSet.Append;
      EgitimDataSet.Post;
      end else
      begin
      EgitimDataSet.Cancel;
      EgitimDataSet.Append;
      EgitimDataSet.Post;
      EgitimDataSET.Prior;
      EgitimDataSet.Delete;
      end;
  end;
end;
[/code]
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7604
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Hocam ne yapmaya çalıştığını anlayamadım ama kodlar bana karışık ve kulağı tersten tutar gibi geldi.

Basit olmalı, eğer basit değilse bir yerde yanlış yapıyorsun...

Kolay gelsin.
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Hata vermiyor çünkü sen kaydın üstüne gelip tekrar sildiğinde ordaki değer artık null değil boşluk oluyor. Senin kontrol etmen gereken, kayıttan önce eğer boşluksa ('') null değeri göndermek. Ozaman hata verip kaydetmene izin vermeyecektir.
Cevapla