meraklısına Delphi ile Programlama Delphi ile Programlama Kayıtlar üzerine nasıl filtre koyabileceğimizi, kod içinden Paradox tabloları için nasıl Alias yaratabileceğimizi ve elektrik kesilmesi gibi durumlarda yaptığımız değişikli! lerin tablolara aktarılması için ne gerektiğini inceleyeceğiz. RırfM Sarenş . ı- Eğer ta yısi belli hi riinriilcnrnesi pratik yollard özelliği ve [anmaktır. Bu hştıgmı anhıria yapmanız yete çoc la t T." olamazdaki kayıtların sa-hiiyiik dı;giise, .sadece jana ıyan kayıtların gö ıcin kullanılabilecek en birisi tabloların Pştered -iltırReeord olayını kul izcilik ve olavın nasıl ça- k için aşağıdaki örneği li olacaktır. TTable, Fİltered özelliği ve OnFilterRecord olayı Hır form üzerine lTabk. TDataSour cc ve TDBGı id bileşenleri yerleştirin. TTabic'in DfirabaseNanıc özelliğini DBOLMOS, mer, TablcN; amc özellisini tblCusto-me özelliğim de Custo iner nn ulara] deriştirin. TDataSourcc bileşeninin D, taSCI Özelliğini tblCusio zelliğini de dtsCtiStoniCE rak TOBGrid bileşeninin ıclliğine dtsCustomer bi- mer, Name ö yapın. Son ol PataNourcc ö leşçilini aıayııı Daha sonra 1 'deki gibi tar Bu ptograın oiııran ırmştc nun için önce dakİ I-ütercd > gerckmcfcttda program kodunu tablo namlaym (tablo I). da amacımız programda amacımız, numarası sadece Amerika'da İleri görüntülemek, Bu-tblCAiMonıer Tablomuz* /elliğinin True vapılmnsı Bu işlem 36. satırda ya- pılmakradır Daha SOiva tblCustonıer tablosunun O ıHIterRccord olayı ii/eri-ne gelerek buraya 58. ıalırdan itibaren Özetle... • 8u yazıda ok narımızdan çeler. ba?ı sorular özerin ie öuruyoru? • Kayıtlar üzeriı ıe fillreierne yapma, PSradoı> lable lan İçin alias yaratma • Alıas'ların pre jramatifc olarak yaratılması ve bununla üciiü rirnek kod \9'.a sağ \-rtt$ Tabloların OnFilterRecord olayını test etmek için şekildeki formu tasarlayın. gördilklerinizi yazın. Burada tablodaki Country alanındaki değerin 'US* olup olmadığı kontrol edilmektedir. Eğer Country (I eğeri "US* İse o lakcurdc Ac-cept değeri True olacak ve kaydımı/ ak lif olarak kabul edilecek aksi takdirde Âcccpt Hnl.se değerini akcak \x o feayıt dikkate alınmayacaktır. Böylece kulknn cıkr. tabloda müşteriye ait Country bil gîsimn 'CS' olduğu kayıtları görecektir Burada karşılaşacağımız bir problem var. Gencide kullanıcılar tablonun tama itunı görmek, ancak belli bir tuşa bastık --an sonra böyle bir nlıreleme oUyini gerçekleştirmek isterler. Bu dutumda OnFİlterRttord olayı olduğu /.aman gerçekleşmesini ivedilimiz- fihreleniL'vİ dinamik olarak yapmamı/ gerekmektedir. Bunu ise tablo 2'dcki kfxlla sağlaya biliriz ıiaUo 2). Bu kez. ıblCustomer tablosunun On l*'iİTcrRee>ırd olayının içinde hiçbir şey vazıh olmaması gerekiyor. Bıı nedenle eğer yukarıdaki Örneğe devam ediyorsa 012 tblCustonıerHilıerRccord mrrodn-nun içini boşaltmanı/ gerekecekür. Hemen yukiuıdâki koda dikkat edersek 1 satırda başlayan HiltreKoy adında bir metod göreceğiz. Bu metodun para- metreleri. daha önceki örnekteki tbK jstonıerFİİterRccord metodunun parametreleriyle aynıdır. Bu sayede bu meiodkr programın çalışma aşamasında birbiri yerine kullanılabilir. Bu ise Filtre Kov düğmesine basıldığında II. Satırda gerçekleşmek redir. Bu sanıda, tbK.uMo mer tablosunun Dîıl'dierKecord okyı HkrcKoy adlı prosedüre eşitlenmektedir. Bu eşitleyebilin? işlemi olay kontrollerinin de Dclphi*dc hirer ö/eilik olarak tanımlanabilmesi sayesinde gerçekleşmektedir. Iıltreyi Kiddir düğmesine basıldığı zaman ise Oııl-'jlıerRccord özelliği MIV eşitlenmekte bu sayede tekrar tüm tablo görtinıülenehilmekted-r. Programı çahşnrdığım/da sekil I 'deki gibi bir törnık karşı kısacaksın iz. Son olarak, Filtre Koy metodıınuıı va/rıadau önce bu metodun TFornxl!*üi pri> 3K bölümünde açandaki gibi tanımlanması gerekmektedir: privats ( Private deciaratians } prosedüre FiitreKoy( DataSfet TDOtaSvt:v*r ftccept : Booledn ); Şuoat '^nco Delphi ile Programlama TURKUAZ BİLİŞİM 01: 02 ı 031 Mi C5; 06: 07: Oş: 09: 10: : 12i 13: Ki 15: 16 11 18 19: 20: 21 22 23 24 " 26 27 29: 2N i; 29: 30: 31: İ2: 33: 3i: 3S: 36: 37: 38ı 39: İÇj 41: i?: 43 44: 45 46 47 48: 43ı 50: tion; 51: 52: 53: 54: 55: :-; uait önieli interfdCe 'JSOS H&lKJoVı, Kt-'ssı^ös, SysUtila, Ciasss Dialogs, StdCtrls, Gri>İ8, ÜBşrids. ı, Graphics DB, DBÎablı Controls, Ponnı. type TForml = classfTFomn "•-blCustoııHT! 'ffaale; dtaCuatonun-: TDataSource; İbçrüCuı-tü^er: TD3Gric; tblCU6tOB*8rCu6tWo: TPloatField; LbXCıi5iwwıCoöipciııyı TSiringFteldi tbiCustaser&ddrl: TStringFisld; tbICustonerAddr2: TStrmgFıeld; tbiCustamerCity! rStrıcgField; fcblCustonıetState: TStringField; tblCustomerZip: TStcir-gField; ı.blC'jshfşTiftrCoınıtry: TStringFieldî tbiCustoiHetPhone: TStrisçFieîd; tblCustor.er-AX: IStrinşField; tbiCustoroer1'axBatai TFÎoatFıeld; tü-Custc-serCcn-ac-: "StrirıgField; -D.CustcraerLastlnvoiceDate: TDaseTimeField; prccedure FormCraatetSender: TÛSject;); procetiure FotmCloselScnder: TGbjectj var Actiorı: TCloseAet.i- procodure tb!Cuütor.erFilterHecoî"d;DataSet: TDataSet; var Rccep^: Booleör.): pı İvate ( Privatü diîC-aratıons } pubüc ( Pubîic âcciaıatıc:i3 ) ftnd; nWüEW var Formi: TFtXRQİÎ 59 60 61 62 63 implementation fŞR *.DFM) prosedüre TFotml .FomıCteatelSender: TObject); begin tblCiiSiuEi'r.FiItered := Tr*je: tbi.cust.c3sr .apen,-İftd; procedure TForml.For=Clcse(Sender: TObject; var Action: TCloseAc- beçir. tblCustomer.Cloae; end; precedure TPorml .tblCustcsurFıiterSecordpataSat: TiJataSet; var ftecepts Bocleaıı); begin rf tbiesJ3t0BıerC0iııı::y.?ı3StrL,ig ı 'ÖS-' fcftea-Accept :• rrue else Aocep"_ :- False; end; end. Tablo 1: Filtered ve OnF'iterRecord'un kullanımı İçin yukarıdaki kodu yazın. & IhhüIi Hilmi, Abaj No:5/5 Kava O 312 467 vvvvvv.turkua turkuaz@turküazbi Şuba: 2000 Km nanbaH Caddesi klıderc/ANKARA 11 16 (pbx) bilisim.com.tr ilisim.com.tr raklısına Delphi ile Programlama n saklamafciadı lannıak olduk. ncdı-nlc .incik çok önemli ı>lıl Farados tat Lalan ve bilgisayarların beklenmedik asıda kapanması Delphi, veri tabam erişiminde BDE (Borland Dataîase Engine) adında bir arakatman kullanmaktadır. Ancak bu fonksiyonları d rek kullanmak yerine; geliştirmiş oiduği. veritabaut bileşenleri sayesinde BDE (t aksiyonlarına ait detayla-. BDE fonksiyonları kul-ı zahmetli bir ışnr. Bu performansın gerçekten ığiı riur.ınılarda bn lbn!> İyanlan kullar mak gerekmektedir. Çoğu programcı 1 >elki de lüç bir zaman bu tbnksivonları i : villan m ayacaktır. Ancak bazen bu fbnk ıiyonları kullanmak kaçınılmaz olmakladır. Örneğin eleltrik kesilmeleri ya da bil gjSayarlann aniden düğmesine basılarak kapatılması gib bir dununda kullanıcılar bazen son ckl-miş olduklar: kayıtlanıl kaybolduğunu goreeekıir. Bu durumda kullanıcılann b ı kayıtları yeniden girme leri gerckecekl-r. Ancak bu d mim bazen bilgi bıiriin-lûğOnUn bozul ııa.sma da neden olabileceği için tehlikelidir. Kullanıcılar ahlolar üzerinde değişiklik yaptıkça ya la kayıt ekledikle bu de ğişiklik ve ekleı leler disk üzerine lİ/iksel olarak v.ı^Jnıaı an Önce BDE ı ara! imlan 02: 03: 04: 0S: 06: 07: 08: 09: 10: ii: 12: 13: 14: 15ı 16: 1 •': 13: halitada tampon bir bölgede tutulmak tadır, Bu tampon bölge tamamen dol-vlnkiaıı sonra BDE tablo üzerindeki değişiklik ve eklemeleri fiziksel olarak döke yazacak ve kendini yeniden boşaltacaktır. Bu işlem tampon bölge yeniden dolduğu zaman tekrarlanacaktır Oysa daha bu tampon hafıza aianı tamamen dolmadan, yani &0E bu tablo daki değişiklik ya da eklemeleri fiziksel olarak diske kaydedemeden Onee elektrik kesİÜTSC O -'aman biliri kaybı ortaya eıkacafcnr Bunun önüne geçebilmek itin belli bir anda BDE'yc tampon hali za alanındaki riim bilgileri diske ya/ma .sı için bir emir verebiliriz. Bu emrin verileceği en uygun yer. tablolarımızın At-terPost olayı olacaktır. Bu olay içine ya /açığımız BDF. fonksiyonu sayesinde tablomuz- özerinde herhangi bir değişiklik yapıldığı anda yapılan hu değişikliğin derhal disk üzerine aktarılması saklanmış olur. Delphi 3, Delphi 4 ve Delphi 5*tc , ITablc ve TQucry gibi bileşenler, TBDKDataSet bileşeninden kalıtım yoluyla türetilmiştir. TDataSet sııııii İse sa dece temel Özellik ve soyut (abstraet] mctodlann deklarasyonlarının vapıklığı bir MTiıllır. Bu nedenle aşağıdaki gibi bir kod yazmak gerekecektir Cl: ııroced re TForml.FütreKoyı DataSet c-leon J; TDataSet; var Acccpt : Be- beğin tölCuı t0KerC0ür.try.A8String - 'US tften iecept i" Tru; else i.ccept ı= False; end; procadtre TForml.btnFiltreliClick{Se-ıdcr: TObject); begin tblCıistoıer.PiItered := Trae; tblCı stotîer.Cr.FiltecHecord := i-iltreKov; c:ıd: er.d; Tablo 2: Pratik procedıre TForml.bt.nFtltresizClic)c(Sender: beçirt tbiC'stomftr.Oafiıteraecord ı- Hîtr TObjec-.; s filtre oluştururken yukarıdaki yöntemi izlemelisiniz. procedure TFsrE.L.Büttor.IClicJMSerıder: TObject) begin sesaioıt.RddStâRdardAliaa( 'tehpdb', T.-.\Testcn','pa3adox' t; Sessioa.SîtfeConfîçFils; end; Tablo 3: Delphı'de programatik olarak Alias yaratmak mümkündür. İ246 prncedure Tforml.TablelAfter- Post |3atoSet: TDataSetJ; begir. DBlSaveChongeı;( | OabftSet AR TB3BDataSet|. Kar>*üe ); Burada DBISaveOhangesı) fonksiyonu, bir BDE ibııksİvonudur. Bu fonksi yomııı kullanılabilmesi için uses hölü-mşnde BDE ıniKİüluııü eklemenin gerekecektir fuses BDE;). DBISaveChan-gcs() fonksiyonu sayesinde tablolara yapılmış değişiklikler lıafı/jdaki tampon alandan direk olarak disk üzerine yazılacaklardır. Bu sayede yaptığını/ her ıleği sikliğin veri ta Kınına aktan imasını sağlamış olursunuz. Alias'lann programatik olarak yaratılması DclphTde veri ta ban! arma erişim sırasında Borland Databasc Engine ile ta-nımlananan Alias'ları kullanmak gerek inekledir. Ö/cüikîe Parado.K ya da Dba se tabloları İle çalışıyorsanız, zaman za man bu Alias'ları programatik olarak ya-ra:mak istevebilirsiniz. Bıı İşlemi yap mak için BDB'ye ait fonksiyonlai'i kulla nabiiccejriııiz gibi, Deİphrdckİ SesSiOU nesnesinden de yararlanabilirsiniz. Bunun için yapmanız gereken lisıe 3 efeı gibi bir kod yazmak olacaktır. Bu kod içinde kullanılan Session nesnesi, tüm Delphi uygulamalarında bııhı-n.ır ıdohal bir nesnedir. Sessıoıı nesnesi rtin AddStaııdardAlias metoduvla yeni bir Alias y-uatınak mümkündür. Bu me-rodda kullanacağınız ilk parametre oluş turaeagniız Alias ııı ati:, ikinci parametre O Aliaş'm gi>siırcvcgi dizin ve üçüncü paramerre de kullanılan ventabanımn cinsidir. Ancak oluşan Alias normalde sadece o anda kullanılan Delphi programı için geçerli olacaktır. Bu Alıas'ın röm Delphi uygulama geliştirme ortamından da ula jıLıbilmesi için yine Session nesnesine ait olan SavcCoulîgFile ıııet(Xİımu kullan inanız gerekecektir. Bu meıod sayesinde oluşturduğumuz ÂUas'ı saklamak mâm kim olmakladır. Bu konuyla ilgili son önemli nokra, gerekli modüllerin uses bölümüne eklenmesidir Bunun İçin programınızda uses bölümünü aşağıdaki gibi tamamlamalısınız: 3 : r.p L ene rft at io r. uses BDE,DBrobles; Şubat P0O0