Cx Grid Ayarlarını Databasede Tutmak ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Cx Grid Ayarlarını Databasede Tutmak ?

Mesaj gönderen pro_imaj »

Merhaba;

Developer Expres'in CxGridini ayarlarını Databasede nasıl tatabilirim acaba (gridin özellikleri regedit veya inifile olarak tutulabiliyor peki ya databasede ?


Yapmak istediğim bu ayarların Databasede bir table vasıtasıyla tutabilmek.

Daha önce yapan arkadaşlar varmı veya nasıl yapılacağı hakkında fikri olan.


Not: Geçen haftalarda bu ayarlar yüzüne 2-3 günlük çok büyük bir sorun yaşadım kullanıcılar bu ayarları kurcalamışlar ve ilginçtirki databaseden sorgulama yapınca normalde saniyelerde verdiği sonucu dakikalarca bekleyip alabilyordum Bu bağlamda düüşnüyorum.


Saygılarımla
Teşekkürler.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

db ye yazmak için stream ı kullanıyorsun ama ben hiç denemedim. Bir ara arkadaş denemişti ama sanırım tam istediği gibi yapamamıştı. Ben ini dosyada tutuyorum. Sakladığın klasörü gizli falan yapsan?
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

stream olarak ayarları alıp database'e blob olarak kaydedebilirsiniz. ben ini olarak temp klasörüne kaydedip oradan blob olarak veri tabanına atıyordum.daha sonrada geri alıp yine temp dizinine kaydediyordum. işim bitince siliyordum. hiç bir sıkıntı olmadı. Ama kullanıcılar kullanmadı :( (esneklik olsun diye yapmıştım)
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

@naile haklısın belki ama kullanıcılara artık güvenmiyorum. yani herşeyi beklerim artık.

Bu yüzden gizlemek sanırım geçici bir çözüm olabilİr yinede düşünmek lazım.


@mkysoft veri tabanına blob olarak kaydetme hakkında pek bilgim yok nasıl olduğunu yazarsan sanırım bu benim işiim fazlasıyla görecek.

Peki hız açısından ne gibi farklar oluşur yani blob olarak tutarak işlem yapmakmı yoksa ini dosyasımı?

Teşekkürler.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Quantum Gridi (cxGridi) store ve restore ederken ister stream ister file şeklinde olsun çok dikkatli olmak ve çok iyi düşünüp karar vermek gerekiyor.

En basitinden tabloya yeni bir alan ilave ettiğinizde veya varolan bir alanın Visible'ını değiştirdiğinizde veya cxGridDBBandedTableView kullanıp da band yapısını değiştirdiğinizde vs. daha belki bir çok konuda problemlerle karşılaşacaksınız.

Zira store edilmiş bir cxGrid restore edildiğinde ilave ve değişikliklerin çoğunu dikkate almayacak sanki hiç bunlar yapılmamış gibi davranacaktır.

Ben her ne şekilde olursa olsun bu özelliğini kullanıyorum. Bilgileri de veritabanında tutuyorum.

En basit ifadeyle restore işlemini şu şekilde yapıyorum: Önce store ediyorum (temp bir dosyaya, zira restore etmeye kalkıştıktan sonra ancak buradan başlangıç şekline dönebilirsiniz), sonra 10 defa aynı yerden restore etmeyi deniyorum. Bu 10 defalık deneme içinde her defasında tekrar başka bir temp dosyaya store edip asıl restore bilgileri ile aynı ise döngü dışına çıkıyorum. Bu döngüyü 1 saniyeden uzun sürme durumu olursa break ediyorum. Eğer tutmadıysa başta store ettiğim temp dosyadan restore ediyorum.

Bu işlemlerin sonunda da oluşan kolonların visible'larıyla dataset'in field'larının visible'larını, varsa band sayılarını, datasette olup kolonlarda olmayan field'ları vs. birçok şeyi kontrol ederek ve gereken düzeltmeleri yaparak cxGrid'i kullanıcıların karşısına çıkartıyorum.

Eğer basit sayılabilecek bir hata dahi yapsanız program çok rahatlıkla kilitlenebiliyor. Çoğu zaman try except bile bir işe yaramıyor.

İyi çalışmalar.
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

Kod: Tümünü seç

procedure Tfr_gorunum.gorunum_kaydet(tablogorunum: TcxGridTableView);
var
  blob,fs: TStream;
  aciklm: string;
label cik;
begin
  aciklm := inputbox('Görünüm İçin Açıklama Giriniz', 'Açıklama','');
  if aciklm = '' then goto cik;
  TcxGridTableView(tablogorunum).StoreToIniFile(extractfilepath(application.exename)+'\temp.ini',true,[gsoUseFilter, gsoUseSummary]);
  tablo_gorunum.Insert;
  blob := tablo_gorunum.CreateBlobStream(tablo_gorunum.FieldByName('gorunum'), bmWrite);
  try
    blob.Seek(0, soFromBeginning);
    fs := TFileStream.Create(extractfilepath(application.exename)+'\temp.ini', fmOpenRead or fmShareDenyWrite);
    try
      blob.CopyFrom(fs, fs.Size)
    finally
      fs.Free;
      deletefile(extractfilepath(application.exename)+'\temp.ini');
    end;
  finally
    blob.Free
  end;
  tablo_gorunum.FieldByName('aciklama').Text := aciklm;
  tablo_gorunum.Post;
cik:
  close;
end;

Kod: Tümünü seç

procedure Tfr_gorunum.gorunum_yukle(tablogorunum: TcxGridTableView);
var
  blob: TStream;
  tabloyukle: TcxGridTableView;
begin
  tabloyukle := tablogorunum;
  blob := tablo_gorunum.CreateBlobStream(tablo_gorunum.FieldByName('gorunum'), bmRead);
  try
    blob.Seek(0, soFromBeginning);
    with TFileStream.Create(extractfilepath(application.exename)+'\temp.ini', fmCreate) do
      try
        CopyFrom(blob, blob.Size)
      finally
        Free
      end;
  finally
    blob.Free
  end;
  tabloyukle.RestoreFromIniFile(extractfilepath(application.exename)+'\temp.ini',true,true,[gsoUseFilter, gsoUseSummary]);
  deletefile(extractfilepath(application.exename)+'\temp.ini');
  tabloyukle.ViewData.Expand(true);
  close;
end;
@Hakan Can bey haklı. Eğer tasarımlarınızı sürekli değiştiriyorsanız bu tür problem ortaya çıkabilir. Dikkatli olmak lazım. Ben görünümleri kullanıcılara seçtiriyordu. Eğer değişmesinin istemediğim görünümler varsa; bunları kodlarla yada iki ayrı view yaparak hallediyorum. Hangi view kullanılacaksa onu aktif ediyorum.
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

Merhaba;

@Hakan Can Hocam söylediklerinize aynen katılıyorum zaten bu ayarların önem arzettiği için vtye almayı düşündüm bende. Alan değiştirme ekleme yada çıkarma işlemlerini cxgridde çalışma sırasında yaptırıyorum ve formun çıkında ilgili ayarları tekrar yeniliyorum.

@mkysoft verdiğin değerli kod ve mantık için teşekkür ederim. Tam istediğim gibi. :wink:

Saygılarımla
Teşekkürler.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Cevapla