S.A. Sayın Delphiciler
Sonunda Firebirde geçtim (haydi hayırlı olsun) ve şimdiye kadar sorun yok. sağolsun arkadaşların verdiği örnekler ile bir çok şeyi hallettik ama bi sorunum var.
IBDataSet kullanıyorum. Normal IBTable de cxGrid in AutoDataSetFilter ini True yaptığımıza filtreyi hem yapıyordu hemde tableye uyguluyordu. Ama IBDataset için değil tableye hiç cxgrid de bile filtreleme yapmıyor. nasıl yapabiliriz ?
cxGrid ve IBDataSet Filtreleme
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 135
- Kayıt: 14 Kas 2005 12:24
mudipasa
ibdataset tarafında;
Ibdataset in selectsql,insertsql,modifysql ve deletesql leri var.
Bu özellikleri doğru kullandığınızdan emin misiniz.
http://www.delphidunyasi.net/index.php?topic=132.0 adresinde temel bilgiler verilmiş.
Size bir örnek vereyim:
Forma yeni bir cxGrid koyun.
DataSource ,KeyField kısımlarını cxDBTableView içinden oluşturun.
ardından IBDataSet içine aşağıdaki kodları yazın.
Gördüğünüz üzere ibdataset veya başka bir component arasında herhangi bir fark bulunmamaktadır. Bağlantıları düzgün yaptığınızda çalışır.
Sorun cxGrid in varsayılan özelliklerini değiştirmiş olmanızdan da kaynaklanıyor olabilir.
Bildiğiniz üzere Firebird Date,Time format 'MM/dd/yyyy' şeklindedir. Bu formatı değiştirmeniz gerekiyor olabilir. aramalarınızda tarih alanları ile ilgili filtreleme yapıyorsanız buna dikkat edin.
cxGrid tarafında;
cxGridDBTableViewX.DataController.GridMode := False olarak işaretli değilse filtreleme tam olarak gride yansımaz. Bu kısmı kontrol edin.
DetailinSQL değerini de False yapmanızı tavsiye ederim.
Mevcut cxGrid i formdan kaldırın ve yeni bir tane yerleştirip bu haliyle deneyin. Sorum devam ederse , tavsiyem ibdataset ve filtreleme ile ilgili arama yaptırın.
Filtrelemeye örnek :
Bu şekilde kodla filtreleme de yapılabilir.
ibdataset tarafında;
Ibdataset in selectsql,insertsql,modifysql ve deletesql leri var.
Bu özellikleri doğru kullandığınızdan emin misiniz.
http://www.delphidunyasi.net/index.php?topic=132.0 adresinde temel bilgiler verilmiş.
Size bir örnek vereyim:
Forma yeni bir cxGrid koyun.
DataSource ,KeyField kısımlarını cxDBTableView içinden oluşturun.
ardından IBDataSet içine aşağıdaki kodları yazın.
Kod: Tümünü seç
procedure TForm1.IBDataSet1AfterInsert(DataSet: TDataSet);
begin
IBDataSet1.FieldByName('RecID').AsInteger := 999;
end;
procedure TForm1.IBDataSet1BeforePost(DataSet: TDataSet);
begin
if IBDataSet1.FieldByName('Name').IsNull then begin
ShowMessage('Name Alanı bir değer içermelidir');
ABORT;
end;
end;
Sorun cxGrid in varsayılan özelliklerini değiştirmiş olmanızdan da kaynaklanıyor olabilir.
Bildiğiniz üzere Firebird Date,Time format 'MM/dd/yyyy' şeklindedir. Bu formatı değiştirmeniz gerekiyor olabilir. aramalarınızda tarih alanları ile ilgili filtreleme yapıyorsanız buna dikkat edin.
cxGrid tarafında;
cxGridDBTableViewX.DataController.GridMode := False olarak işaretli değilse filtreleme tam olarak gride yansımaz. Bu kısmı kontrol edin.
DetailinSQL değerini de False yapmanızı tavsiye ederim.
Mevcut cxGrid i formdan kaldırın ve yeni bir tane yerleştirip bu haliyle deneyin. Sorum devam ederse , tavsiyem ibdataset ve filtreleme ile ilgili arama yaptırın.
Filtrelemeye örnek :
Kod: Tümünü seç
var
V: Variant;
begin
V := VarArrayCreate([0, 1], varVariant);
V[0] := 'B';
V[1] := 'W';
with cxgridZ.DataController.Filter do begin
BeginUpdate;
Root.Clear;
Root.BoolOperatorKind := fboAnd;
Root.AddItem(cxgridZAlan1, foEqual, null, 'Alan1 Filtre parametresi');
Root.AddItem(cxgridAlan2, foEqual, 'S', 'Alan2 Filtre parametresi');
Root.AddItem(cxgridAlan3, foNotInList, v, 'Alan3 Filtre parametresi');
EndUpdate;
end;
end;