"cxdbFilter" Kayıt Sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
naklov67
Üye
Mesajlar: 84
Kayıt: 05 Nis 2005 11:50
Konum: izmir yada afyon

"cxdbFilter" Kayıt Sorunu

Mesaj gönderen naklov67 »

merhaba arkadaşlar.

Uzun süreden beri kullandığım ve üzerinde geliştirmeler yaptığım bir programım var. Bu programda raporlama kısmında cxfilter den faydalandım. fieldleri çekiyorum sora sql cümlesini oluşturup exel formatında kaydediyorum.

Sorunum şu :
Şimdi oturup bi sürü fieldi çekip filtrelemeleri yapıyoruz sora da bunun dökümünü alıyoruz. ama bu raporu daha sonra da kullanmak, üzerinde küçük oynamalar yaparak yeniden almak istiyorum.

3 adet tab var; birinde hangi sütunların çekileceğini belirliyorum, birinde cxfilter ile where cümlesini oluşturuyorum, sonuncusunda da order by için field seçiyorum ve sorunsuz çalışıyor.

Bunlardan iki tabın olduğu kısmı kayıt altına alıp yeniden çağırma şansım var ama cx filter in içindeki bilgiyi geri çağırmakta zorluk çekiyorum. aslında buradaki filtrelemeyi txt dosyaya kaydedip geri çağırabiliyorum, ama benim asıl yapmam gereken buradaki bilgiyi database e kaydedip sonra geri çağırmak. özellikle database diyorum çünkü ağda bi çok makinede aynı program kullanılıyor ve localdeki makineye txt kaydetmem bişeyi değiştirmeyecek. diğer kullanıcılar da bu raporu görmesi gerek ;)

filter.filtertext i kaydedip aynı raporu yeniden alma şansım var ama ben buradaki filtrelemeyi tamamen geri çağırmak istiyorum ki üzerinde değişiklik yapabileyim ;)

Sonuç olarak cxdbfilter in database e kayıt edilmesi ve geri çekilmesi gerekiyor. Yardım ederseniz sevinirim.
anlaşılmayan bi yer varsa belirtirseniz sevinirim.
kalem yazar da silgi şair mi?
http://www.alembu.com
http://www.ekonorm.com
Kullanıcı avatarı
naklov67
Üye
Mesajlar: 84
Kayıt: 05 Nis 2005 11:50
Konum: izmir yada afyon

Mesaj gönderen naklov67 »

bu konuda deneyimi olan yok mu acep ? :roll:
kalem yazar da silgi şair mi?
http://www.alembu.com
http://www.ekonorm.com
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

Merhaba

Peki bu filtreleme işleminde gridin bağlı olduğu DataSet tümden filtreleniyormu yoksa grid bazındamı filtrelemi oluyor. Eğer Dataset bazında filtreleme yapıyorsan benim fikrim geldi!

Datasetin o halinin fotoğrafını çekelim ve onu serializable hale getirelim. Bunu nasıl yapacaz?
ClientDataset ile!
Sonra elde ettiğimiz serileştirilmiş veriyi bir blob alana kaydedersin.

Kod: Tümünü seç

uses provider;

var
  DSProv:TDataSetProvider
Begin
   DSProv := TDataSetProvider.Create(nil);
    try
       DSProv.DataSet := KopyalanacakDataset; (örn. Query1);
       clientdataset1.Data := DSProv.Data;
       clientdataset1.SaveToStream(...Blobunstreami.. )
     finally
            DSProv.Free;
     end;
End;

Aynı şekilde geri yüklerken clientdataset1.LoadFromStream(..) şeklinde yaparsın ve gösterim yapacağın gridi clientdataset1 e bağlarsın.

Hatta önceki aşamalarda clientdataseti xml şeklinde kaydedip sonra XSLT ile bunu Html haline bir rapor olarak gösterebilirsin. Gerisi sana kalmış

İnşallah çalışır kolay gelsin...
Kullanıcı avatarı
naklov67
Üye
Mesajlar: 84
Kayıt: 05 Nis 2005 11:50
Konum: izmir yada afyon

Mesaj gönderen naklov67 »

merhaba undefined

cevabin için tesekkür ederim.
sanirim tam olarak anlatamadim ne yapmak istedigimi.

ben burada cxfilter i sadece filter text hazirlamak için kullaniyorum.
geçici bir adoquery im var ve buradan gerekli fieldleri aliyorum.

listbox lar ile de hangi fieldleri seçecegimi belirliyorum.

sonuçta cxfilterin filtertext özelligini kullaniyorum.

olusan sql kodunu da baska bir adoquery ye aktarip oradan gelen sonuçlari da exele aktariyorum.

burada hazirlanan sql cümlesini aynen db ye kaydedip geri çagirmak mümkün. ancak benim amacim ayni cümleyi üzerinde degisiklik yapacak hale getirmek.

yani önceden hazirlanmis bir cxfilter in geri çagrilmasini istiyorum.

bunu savetofile ile yapmak mümkün. ama ben bunu db ye kaydetmek istiyorum. ve ayni sekilde dbden geri çagirmak istiyorum.
kalem yazar da silgi şair mi?
http://www.alembu.com
http://www.ekonorm.com
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

Anladım ben soruyu yanlış anlamışım.

Peki Sql cümlesini nasıl elde ediyorsunuz CxDbfilter den ? Where den sonrasını filtertext ile birleştiriyormusunuz ?
Kullanıcı avatarı
naklov67
Üye
Mesajlar: 84
Kayıt: 05 Nis 2005 11:50
Konum: izmir yada afyon

Mesaj gönderen naklov67 »

uzun uzun anlatayım.

iki 3 tane tab var.

birincisinde iki adet listbox var ve bunlardan ilkine tüm fieldler geliyo sorasında birinicisinden seçtiklerini ikincisine atıyorsun ;)
yani ikincisinde getirmek istediğiin fieldler yer alıyor.

ikinci tab da ise
aynı şekilde iki adet field var ve birinci fieldden ikinci fielde seçtiklerine göre order by cümlesini hazırlıyorum.

son tab da ise:
filter text var ve bu filter textte tüm fieldler var. bunu baştan ekliyorum.
sonrasında bu filter text ile bir cümle hazırlıyorum.
ve

Kod: Tümünü seç

cxfilter.filtertext 
ile filtre cümlesini alıyorum

sonuç olarak cümle oluşuyor. şöyle

Kod: Tümünü seç

select (birinci tabdan gelenler) from tablo_adı 
where (filtertext den gelenler)
order by (ikinci tab dan gelenler)
buraya kadar gayet güzel çalışıyor.

ben bunlar için db de bir tablo oluşturdum ve
(birinci tabdan gelenler)
(filtertext den gelenler)
(ikinci tab dan gelenler)
olarak üç field e kaydediyorum...

ve istenilen zamanda bunları oradan alıp aynı sql cümlesine yerleştirebiliyorum.

benim sorunum şurada başlıyor

diyelim listboxtakileri geri çağırıp yeniden ikinci listboxlara yazdırabilirim.
ama cxfilteri eski haline getiremiyorum.

çünkü cxfilter in filtertext inde

Kod: Tümünü seç

 [(field1='volkan') and (field2='sendag')] 
yazıyor.

bunu db den text olarak alıp cxfilter e uygulamak mümkün değil.

nasıl yaparım da db den gelen bilgiyi cxfilter e uygulayabilirim ??

çok uzun oldu ama anlatabildim sanırım ;)
kalem yazar da silgi şair mi?
http://www.alembu.com
http://www.ekonorm.com
Kullanıcı avatarı
naklov67
Üye
Mesajlar: 84
Kayıt: 05 Nis 2005 11:50
Konum: izmir yada afyon

Mesaj gönderen naklov67 »

baya bi uzun anlattım.

konuyla ilgili görüşü olan yok mu acaba ?? :roll: :?:
kalem yazar da silgi şair mi?
http://www.alembu.com
http://www.ekonorm.com
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Hocam uzun uzadıya anlatırken kendi çözümünü üretmiş olmuyor musun ?

- Veritabanı olarak kullandığın her neyse içerisine bir fazla kukla tablo oluştur. Client'ların ile irtibatı bu tablo üzerinden kur.

- Yani SorguTablo'nun her kaydı, client makinenin ID'sine göre kaydedilmiş ve client makine kadar kayıttan oluşan bir tablo olacaktır.

- Dileyen kendi makinesinde yaptığı sorguyu bulabildiği gibi diğer makinelerin sorgularını da modelleyebilir.

- SQL cümlesi üzerinde değişiklik yapabilmek konusunda ise aşağıdaki şekli koru.

1. Satır 'SELECT'
2. Satır 'alan1, alan2, alan3, alan4'
3. Satir 'FROM'
4. Satır 'Tablo1, Tablo2'
5. Satır 'WHERE 1=1'
6. Satır 'AND alan1 = ''blabla'' AND alan2 = ''142526'' '
7. Satır 'ORDER BY'
8. Satır 'alan1 ASC, alan2 DESC

burada Kukla Tablona ne kaydedeceksin ?

Cevap : 2, 4, 6 ve 8. satırları. Aradakiler ise bu kaydedilen satırlar varsa eklenecek, yoksa eklenmeyecek.

- Çözüm olarak ne elde ediyoruz ?
a. Dilediğin an sıralama değişikliği
b. Dilediğin Sütunları ekleme, çıkarma
c. Dilediğin Sütunlara göre AND'lerle bağlanmış şekilde filtreleme
d. vs.vs.vs.

Başarılar...
Resim
Resim ....Resim
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

Hocam filtertexti aynen eşitlesen çalışmıyormu?
Kullanıcı avatarı
naklov67
Üye
Mesajlar: 84
Kayıt: 05 Nis 2005 11:50
Konum: izmir yada afyon

Mesaj gönderen naklov67 »

eyvallah arkadaşlar

ben uzun uzadıya anlattım ama sanırım konu yanlış anlaşıldı.

benim filtrelemede bir sorunum yok

sadece cxfilter nesnesini bir tablodaki field e kaydedip
bunu geri çağırabilmek istiyorum.

geri çağırırken sorun yaşıyorum. ve daha önceki dizaynı aynen geri alamıyorum.
nasıl kaydedeyim ki geri çağırabileyim cxfilter i ??
kalem yazar da silgi şair mi?
http://www.alembu.com
http://www.ekonorm.com
Kullanıcı avatarı
naklov67
Üye
Mesajlar: 84
Kayıt: 05 Nis 2005 11:50
Konum: izmir yada afyon

Mesaj gönderen naklov67 »

Konuyla ilgili tecrübesi olan arkadaş varsa
lütfen bi yardım etsin.

konu prgramın tamamlanması açısından benim için önemli.

Teşekkürler...
kalem yazar da silgi şair mi?
http://www.alembu.com
http://www.ekonorm.com
Cevapla