Dataseti Açıp Kapatmadan Güncellenmeyen Alanlar

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Dataseti Açıp Kapatmadan Güncellenmeyen Alanlar

Mesaj gönderen NewMember »

Arkadaşlar sorunum şu;Ibdatasetin UpdateFields alanında gösterilmeyen alanlar Append işleminden sonra transaction commit edilmeden güncellenmiyor..
Veritabanı Firebird,Dataset Bileşeni IBDataset;
Kayıt ekleme,silme,edit vb.işlemleri IbDataset nesnesinin Append,Delete yöntemleri ile yapıyorum.


IBdatasetim her iki tablodan alanlar alıyor.Hem arama ve sorgulama hemde bulunan ve listelenen kayıtlar üzerinde değişiklik yapma işlemini aynı Dataset nesnesi ile yapıyorum.Tabii asıl tablodan değilde diğer tablodan sadece bilgi amaçlı gösterdiğim alanları IBDataset nesnesinin SQL ifadelerini oluştururken UPDATEFIELDS bölümünde seçmeden bırakıyorum.Buraya kadar tamam.Ancak bu Dataset ile yeni bir kayıt eklediğim zaman Transactionu commit etmeden,Dataseti açıp kapatmadan bu UpDate edilmeyecek olan alanlar DBGridde boş görünüyor.Dataseti açıp kapatınca ise ilgili bilgi diğer tablodan çekiliyor.Kaydı post eder etmez bu alanında bilgi çekmesi için ne yapmalıyız?
Dataseti açıp kapatmaktan başka çare yokmudur.Çünkü bunu yapmak istemiyorum.

Tablo yapısı aşağıdakine benzer bir yapı.

Kod: Tümünü seç


  HASTALAR TABLOSU		MUAYENE TABLOSU

                       		 KAYIITID
  KAYITID   <------------------> HASTAKODU  
  ADISOYADI           		 ANAMNMEZ  
  ADRES               		 ATES 
                       		 BULGULAR 
                       		 DOKTOR  
                      		 ILACLAR
Datasetin SQL Cümlesi:

Kod: Tümünü seç

SELECT MUAYENE.KAYITID,MUAYENE.ANAMNMEZ,MUAYENE.DOKTOR,
MUAYENE.HASTAKODU,MUAYENE.BULGULAR,MUAYENE.ILACLAR,
MUAYENE.ATES,HASTALAR.ADISOYADI, FROM MUAYENE,HASTALAR WHERE HASTALAR.KAYITID=MUAYENE.HASTAKODU

Burada Hastalar tablosundan çekilen HASTALAR.ADISOYADI fieldi UpdateFields bölümünde seçilmiyor.Sadece bilgi amaçlı çekiliyor.

InsertSQL :

Kod: Tümünü seç

insert into MUAYENE
  (ANAMNMEZ, ATES, BULGULAR, DOKTOR, HASTAKODU, ILACLAR, KAYITID)
values
  (:ANAMNMEZ, :ATES, :BULGULAR, :DOKTOR, :HASTAKODU, :ILACLAR, :KAYITID)

Kayıt Eklemeden Önce Gridin Durumu:

Resim

Kayıt Ekledikten Sonra Gridin Durumu

Resim


Dataseti Açıp Kapattıktan Sonra Gridin Durumu


Resim

Aslında bu durum belkide normal ama o alanın boş kalması hoş durmadığı gibi sırf o alanı göstermek içinde Dataseti Aç Kapa yapmak tuhaf oluyor.

Yardımcı olacak arkadaşlara şimdiden teşekkür ederim.
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

Hocam büyük ihtimal sen dataset'in Sql lerini otomatik generate ettiriyorsun. Update için bazılarını seçmiyorsun. Seçmediğin için bunlar Refresh SQL indede yer almıyor. Refresh SQL satır bazında refreshleme amaçlıdır. Yanlış hatırlamıyorsam Dataset, update ve insert işlemlerinden ardından Refresh SQL i çalıştırır. Refresh Sql'ini elinle düzenle ve bu alanlarıda dahil et. Ama unutmaki Refresh SQL'in sadece bir satır döndrümesi gerekli.
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

@undefined çok teşekkür ederim.Söylediğin gibi Dataset SQL lerini Otomatik oluşturuyorum ve o söylediğim alanı UpDate fields bölümünde seçmiyorum.

RafreshSQL şöyleydi.

Kod: Tümünü seç

Select 
  ADISOYADI,
  KAYITID,
  ANAMNMEZ,
  DOKTOR,
  HASTAKODU,
  BULGULAR,
  ILACLAR,
  NABIZ,
  ATES
from HASTALAR 
where
  KAYITID = :KAYITID

Bunu aşağıdaki şekle getirmeye çalışırsam

Select
HASTALAR.ADISOYADI,
MUAYENE.KAYITID,
MUAYENE.ANAMNMEZ,
MUAYENE.DOKTOR,
MUAYENE.HASTAKODU,
MUAYENE.BULGULAR,
MUAYENE.ILACLAR,
MUAYENE.NABIZ,
MUAYENE.ATES,
from MUAYENE,HASTALAR
where
MUAYENE.KAYITID = :MUAYENE.KAYITID


koyu renkli satırda hata veriyor.Muayene tablosunun adını belirtmeme bozuluyor.Ama belirtmezsem de bu sefer KAYITID alanının hangi tabloya ait olduğunu bilemediğini söylüyor. :roll:
En son NewMember tarafından 22 Kas 2006 06:29 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

hocam parametreye normal sql cümlesi gibi muamele etmişsin. ":MUAYENE.KAYITID" diye bişe olabilemez. Ayrıca tablolarda birleştirme yapmışsın onun için bu sql hatalı sonuç döndürür.

Doğru olduğunu umduğum RefreshSQL cümlesi

Kod: Tümünü seç

Select
  HASTALAR.ADISOYADI,
  MUAYENE.KAYITID,
  MUAYENE.ANAMNMEZ,
  MUAYENE.DOKTOR,
  MUAYENE.HASTAKODU,
  MUAYENE.BULGULAR,
  MUAYENE.ILACLAR,
  MUAYENE.NABIZ,
  MUAYENE.ATES,
from MUAYENE,HASTALAR
where
  MUAYENE.KAYITID = :KAYITID[/b] 
  AND 
  HASTALAR.KAYITID = MUAYENE.HASTAKODU // Diğer tabloyu birleştirmeyi unutmuşun
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

@undefined çok teşekkür ederim.Bu sefer oldu.
Şimdi diğer RefreshSQL lerinide bu mantığa göre değiştiricem.
Cevapla