datasouerce state
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
datasouerce state
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.
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.
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
@ademcicek Selam.
- State, bir Table'ın durumunu bildirir, bağlı olduğu DataSource'un değil. Sanıyorum gözden kaçmış...
- Başarılar...
... yazınızdan DataSource ile başlayan bileşen gerçekten de adı gibiyse yani bir DataSource ise şöyle yazarsanız çalışır.if DataModule1.DataSource_Ayarlar.State=dsedit then
Kod: Tümünü seç
if DataModule1.DataSource_Ayarlar.DataSet.State=dsedit then
- Başarılar...
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...
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...
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.
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.
Selam..
- Bugün Delphi olan bir makinada inceledim... Haklıymışsın...
- 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...
- Bugün Delphi olan bir makinada inceledim... Haklıymışsın...

- 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...