Makale dizimizin bu bölümünde birden çok tabloyu birbiri ile ilişkilendirerek nasıl kullanacağımızı anlatacağız.Table öğesinin MasterSource özelliğine diğer bağlayacağımız tabloyu atadıktan sonra Masterfields özelliği ile bağlanacak sahaları nasıl birbiri ile ilişkilendireceğimizi öğreneceğiz. Böylece büyük çaplı tablolarda bütüne yakın kayıtı SQL yerine Tablo kullanarak daha Hızlı listelemiş olacağız.
Table öğesini kullanarak iki tabloyu birbiri ile kordineli olarak çalıştırabiliriz. Bunun için birbiri ile ilişkili iki tablo alarak ilişkinin çokluk tarafında bulanuan tabloya ilişkili sahayı içeren bir indeks tanımlamalıyız.Daha sonra iki adet Table ve datasource nesnesi alarak forma koymalıyız. birinci table öğesinin TableName özelliğini teklik tarafındaki tablo ikinci table öğesinin TableName özelliğini çokluk tarafındaki tablo olarak ayarlamalıyız.Sonra birinci datasource öğesinin dataset özelliğini birinci Table öğesi ikinci datasource öğesinin dataset özelliğini ikinci Table öğesi olarak ayarlamalıyız.
İkinci tabloyu birinci tablo ile ilişkilendirmek için Table öğesinin MasterSource özelliğini kullanacağız. MasterSource özelliği bir datasouceden gelen verileri tablonun MasterFields özelliği ile tanımlanmış sahası ile ilişkilendirmeyi sağlar. Bu özellik ayarlandığında tıpkı bir filitre gibi sadece ikinci tablo birinci tablodaki aktif kayıtta ilişkilendirilmiş sahayla uyuşan kayıtları gösterir. Fakat bu özelliğin kullanılabilmesi için indexname özelliğinin MasterFields özelliğininde tanımlanmış bir sahayı içeren bir indeksi işaret etmesi gerekir.
MasterSource özelliğine indexname özelliği ile koordineli olarak verileri elle girebileceğiniz gibi bu özelliğin sağladığı editörüde kullanabilirsiniz.Yandaki resimde olduğu gibi bu editörde Available indexes bölümünde açılan kutudan bu tabloya ait olan indeksleri görebilirsiniz. Bu kutudan bir indeks seçtiğinizde sağ liste kutusuna o indekste tanımlı sahaları görebilirsiniz. Master fields sahasından ve Detail fields sahasıdan hangi sahaları eşleştirmek istiyorsanız o sahaları seçip Add düğmesine basın. Bu düğmeye bastıktan sonra alttaki liste kutusunda birbiri ile ilişkilendirilen sahaları görebilirsiniz. İlişklilendirmeyi kaldırmak için ilişkilendirdiğiniz saha tanımını joined fields liste kutusundan seçip delete düğmesine basmalısınız. OK düğmesine bastıktan sonra Object inspector'da indexname özelliğinin otomatik olarak Available index kutusundan seçilen indeks adın olduğunu göreceksiniz.
Bu ayarları yaptıktan sonra birinci tablodan seçtiğimiz bir kayıta mükabil ikinci tablo sadece o kayıtla ilgili bilgi içeren kayıtları gösterecektir.Birden çok tabloyu birbiri ile ilişkilendirerek kullanmanın faydası büyük ebatta kayıt içeren yerel bir tabloyu SQL komutları ile sorgulamaktan bizi kurtarır. Çünkü SQL yerel tablolarda çok yavaştır. Özelllikle büyük çapta bir tablodan tüme yakın veriyi almaya çalıştıuğında.
Aşağıda DBDEMOS ile Tabloları ilişkilendirerek kullanmak konusunda yaptığım bir örneği göreceksiniz. Bu örneğin herhangi bir PAS kodu olmadığı için PAS kodunu yayınlamıyorum.
DFM kodu
|
object Form1: TForm1
Left = 254 Top = 179 Width = 305 Height = 279 Caption = 'Form1' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object Panel1: TPanel Left = 0 Top = 0 Width = 297 Height = 128 Align = alClient TabOrder = 0 object DBGrid1: TDBGrid Left = 1 Top = 1 Width = 295 Height = 126 Align = alClient DataSource = DataSource1 TabOrder = 0 TitleFont.Charset = DEFAULT_CHARSET TitleFont.Color = clWindowText TitleFont.Height = -11 TitleFont.Name = 'MS Sans Serif' TitleFont.Style = [] end end object Panel2: TPanel Left = 0 Top = 128 Width = 297 Height = 124 Align = alBottom TabOrder = 1 object DBGrid2: TDBGrid Left = 1 Top = 1 Width = 295 Height = 122 Align = alClient DataSource = DataSource2 TabOrder = 0 TitleFont.Charset = DEFAULT_CHARSET TitleFont.Color = clWindowText TitleFont.Height = -11 TitleFont.Name = 'MS Sans Serif' TitleFont.Style = [] end end object Table1: TTable Active = True DatabaseName = 'DBDEMOS' TableName = 'customer.db' Left = 8 Top = 8 end object Table2: TTable Active = True DatabaseName = 'DBDEMOS' IndexName = 'CustNo' MasterFields = 'CustNo' MasterSource = DataSource1 TableName = 'orders.db' Left = 40 Top = 8 end object DataSource1: TDataSource DataSet = Table1 Left = 72 Top = 8 end object DataSource2: TDataSource DataSet = Table2 Left = 104 Top = 8 end end |