datasouerce state

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

datasouerce state

Mesaj gönderen ademcicek »

herkese kolay gelsin..
ayarlar tablosunun edit edilip edilmediğini kontrol etmek için yazdım ama hata veriyor. yanlış bir şeylermi yazdım acaba.

if DataModule1.DataSource_Ayarlar.State=dsedit then

herkese kolay gelsin.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

DataSource un onStateChange olayına yazacaksın

Kod: Tümünü seç

if DataSource.State in [dsEdit] then 
  ShowMessage('DataSet Edit Modda');

ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@ademcicek Selam.
if DataModule1.DataSource_Ayarlar.State=dsedit then
... yazınızdan DataSource ile başlayan bileşen gerçekten de adı gibiyse yani bir DataSource ise şöyle yazarsanız çalışır.

Kod: Tümünü seç

if DataModule1.DataSource_Ayarlar.DataSet.State=dsedit then
- State, bir Table'ın durumunu bildirir, bağlı olduğu DataSource'un değil. Sanıyorum gözden kaçmış...

- Başarılar...
Resim
Resim ....Resim
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

Mesaj gönderen ademcicek »

Arkadaşlar başka bir programımda aşağıdaki kodları kullandım.hiç sorunsuz çalışıyor.veritabanı accesti.

procedure TMerkezTeskilati.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin

if (DataSource1.State = dsedit) or (DataSource1.State = dsinsert) then
if MessageDlg('Değişiklikler kayıt edilsin mi?', mtWarning, mbYesNoCancel, 0) = idyes then
begin
ADOQuery1.Post;
if not Assigned(AnaMen) then
Application.CreateForm(TAnaMen, AnaMen);
AnaMen.Show;
Self.Hide;
end
else
ADOQuery1.Cancel;
AnaMen.Show;
Self.Hide;
end;

şimdi kullandığım ise sql server. acaba ondan kaynaklımı çalışmıyor. şaşırdım valla.

undeclared identifer 'dsedit' diyor.

kolay gelsin...
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7602
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

1. Benim bildiğim bu özellikler küme şeklinde, yani Gökmen'in verdiği kod gibi çalıştırdım ben hep. Öbür türlü çalışmaması lazım, ama hiç denemedim.

2. dsEdit'in tanımlı olduğu uniti uses kısmına eklemen lazım. Sanırım DB unitindeydi. Bu tip durumlarda kelimenin üzerine gelip F1'e bas, açılan yardım penceresinde genelde hangi unitte olduğu yazar.

Kolay gelsin.
En son mussimsek tarafından 11 Şub 2004 10:16 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

Mesaj gönderen ademcicek »

Mustafa Hocam çok teşekür ederim. Uniti eklemediğim için hata veriyormuş.
Db ekleyince bütün arkadaşların gönderdiği ve benim yapmış olduğum kodlar çalıştı.
kolay gelsin
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam..

- Bugün Delphi olan bir makinada inceledim... Haklıymışsın... :oops:

- DataSource.State dediğinde direkt ona bağlı DataSet'in state'ine bakıyormuş. Ben bunu bilmediğimden hep daha önce yazdığım şekilde bir de DataSet ekleyip kullanıyordum. Kod kalabalığı yapıyormuşum... :?

- Diğer yandan şuna katılmıyorum... onStateChange eventi gibi bir event kullanmak her zaman gerekmez... zaten Table'ın BeforeEdit, BeforeInsert, AfterEdit, AfterInsert vs. eventleri bu değişikliği algılayarak tetiklenir...

- Şahsi görüşüm onStateChange eventinin en güzel kullanım amacı, formda konmuş olan butonlardan Kaydet, İptal, Güncelle olanlarının Enbaled/Disabled edilmeleri şeklindedir...

- Bunları her Table'ın OnInsert, OnEdit eventlerine koymaktansa, her table'in bağlı olduğu dataset'e veya gerektiğinde bir DataSet'e bağlanan birden fazla Table olduğu durumlarda kontrol kolaylığı sağlaması için diyebilirim...

- Özetleyim, sizin başlık açarken yazdığınız koddaki gibi, procedure'ler arasında herhangi bir kaydı edit mode'da olup olmadığını kontrol etmek gereğinin olduğu yerde event kullanılamaz... En fazla (gereksiz diyebileceğim) Table'in Edit mi Insert mi olduğunu Global bir değişkene atanıp, gereken yerlerde bu değişkene baktırmak olur ki amacı hor kullanmaktır. Her değişken -hele global bir değişken- bir sistem kaynağı ve adres yani yük demektir.

- Sonuç olarak @Admin'in dediklerinden Uses'a db'yi eklemen bu işi çözecektir diye düşünüyorum...
Resim
Resim ....Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Cevap yazılmış, yazmak ve yazdıklarımı kontrol için 14 dakika uğraşmışım bunu öğrendim.. :lol: :lol: :lol:
Resim
Resim ....Resim
Cevapla