Mega Code Archive

 
Categories / Delphi / ADO Database
 

Sql

BÖLÜM 1 GİRİŞ Günümüz bilişim dünyası hızla gelişmekte, şirketler ve kurumlar arası dolaşan bilgi trafiği hız-la artmaktadır. İşte bu trafiğe ve yığılan dosyaların imdadına bilgisayarlar yetişti. Yüksek veri depolama ve hız haftalar, aylar alan işlemleri saatlere düşürdü. Şirketlerin veri saklama ve bu veriler içi işlemlerin yükünden kurtulmaları bu yüksek hız ile birlikte sağlam veri tabanları ve bu veri tabanlarının optimum kullanımını gerektirmektedir. Veriler artık insanlar için çok değerlidirler ve iyi korunmaları, istenildiğinde istenilen bilgiye ulaşılabilmesi gerekmektedir. Milyonlarca veri, binlerce,on binlerce kayıt arasından sizin ihtiyaçlarınıza ve isteklerinize u-yan bilgilerin en kısa zamanda ve yüksek güvenilirlik ve geçerlilikle size sunulması gerek-mektedir. 1992 yılında Sicurello, F.; Villa, M. Ce İstanbul'da yapılan konferansta 'System to manage a clinical data base on aids' başılğıyla sorguların önemi üzerinde durulmuş ve şöyle denmiş-tir:"...sorgular önemlidir çünkü bunlar bize daha önceden kaydedilmiş bilgileri hızlı bulabil-memizi sağlarlar. Ve bunları işleyebilir, seçilen verileri yazıcıdan çıkartabiliriz, laboratuar test-leri ve grafikleri kolayca elde edebiliriz..." Veri raporlama , istenilen verilerin bulunması insanlar için vazgeçilemez bir konuma gelmiştir. Burada yapılacak bir hata veya gözden kaçırılacak bir nokta çok önemli zararlara yol açabilmektedir. Bu amaçlara yönelik olarak Structured Query Language (Yapısal Sorgu Dili) oluşturulmuş-tur. Sorgulama her dilde profesyonel program yapan programcılarca kullanılmaktadır. Visual Basic'te MsQuery , Oracle 'da PL/SQL kullanımı gibi. "Bugün , veri tabanlarını kullanan her yazlımın ya da kullanıcının mutlaka SQL karşı karşıya gelmesi zorunlu olmaktadır" (Uy-sal,1994). SQL'in kullanım şekli diller arasında pek fazla farketmemekle birlikte yine de bazı yazım farklılıkları mevcuttur. SQL'in programcılıktaki önemli yerini Ruhver Barengi 1998 de yazmış olduğu kitabında şu şekilde ifade etmiştir " SQL Delphi' nin değil veri tabanlarının kendilerinin kullandığı bir dildir. Ancak Delphi sayesinde SQL cümleciklerini , veri tabanına göndermek ve veri tabanının verdiği yanıtları alarak işlemek mümkün olmaktadır. Uygulamalarda veri tabanlarını ve SQL cümleciklerini kullanmak çok verimli programlar üretmemize yardımcı olacaktır. Delphi' de SQL cümleciklerini veri tabanına göndermek için Tquery bileşenleri kullanılır." PROBLEMİN TANIMI Problem; veri tabanı uygulamalarında, veri tanımlama, veri bütünlüğünün kontrolü, veri tabanlarına erişimin kontrolü ve veri tabanlarının sorgulanması (çeşitli kriterlere göre bilgi dökümü ve rapor edilmesi) ve güncellenmesi amaçları için gerekli komutlara sahip bir alt dildir (sub language). Alt dil denmesinin nedeni: bir bilgisayar dilinin sahip olması gereken tüm komutlara sahip olmayışıdır (Uysal,1994) . SQL " ilişkisel veri tabanındaki veriye erişim için kullanılan komut gruplarıdır." şeklinde değişken olarak (Odtü istatisik ) 'çe tarif edilmiştir. Bu çalışmada SQL'in Oracle' daki kullanım şekilleri de yer yer verilmekle birlikte asıl olarak Delphi' deki kullanımına değinilecek ve asıl sorgu nesnesi olan Tquery incelenecektir. Tquery nesnesinin özellikleri ve metotları ayrıntılı olarak anlatılacak ve çeşitli kısa progam örnekleriyle konu pekiştirilmeye çalışılacaktır. AMAÇ Bu çalışmada Structured Query Language' in önemini programcılık yapacak kişilerine veya programlama dilleriyle uğraşan kişilerin kavramasına yardımcı olmak ve özellikle Delphi' de piyasada bulunan büyük bir açığı kapatmak hedeflenmiştir. Burada aynı zamanda şu sorulara da cevap aramaya çalışılmıştır. Tquery nesnesinin özellikleri nasıl kullanılır ve ne gibi etkileri vardır ? Programlama aşamasında karşılaşılabilecek hatalar nelerdir? Metot ne demektir. Metotların kullanımı nasıl olmaktadır ? Hangi metotlar ne zaman kullanılmalıdır ? ÖNEM Hızlı ve etkili bir program yazabilmek için hem SQL mantığını hem de bunun Delphi' deki kul-lanımını iyi bilmek gerekir. Delphi bu konuda çok fazla özelliğe sahip olup bütün bunların in-celenmesi ve anlaşılması, konu hakkındaki kaynakların hep İngilizce olması ve herkesin İngi-lizce seviyesinin bunları okuyup anlayabilecek seviyede olmaması nedeniyle konunun öğre-nilmesini zorlaştırmaktadır. 66 özelliği ,97 metodu ve eventleriyle çok karmaşık olan Tquery nesnesinin var olan tüm özelliklerini ve kullanım şekillerini bilmeden program yazmaya kalkmak elinde ne tür silahları olduğunu ve bu silahların gücünü, kapasitesini bilmeyen bir devletin savaşa girmesine benzer. Tabii ki bu devletin savaşı kazanması düşünülemez. Bir progarmcının da çalışmam da verilen bilgilere sahip olmadan veri tabanı programı yazmaya kalkması yukarıdaki örnekteki gibi fiyaskoyla sonuçlanacaktır. Yukarıda belirttiğim nedenlerle birlikte profesyonel bir program yazabilmek için SQL mantığı ve bilgisiyle birlikte Tquery nesnesinin öğrenilmesi zorunlu olmaktadır. SAYILTILAR Bu araştırmanınn temelinde şu sayıltılar yer almaktadır. · Araştırmada kullanılan veri toplama aracı geçerli ve güvenilirdir. · Konuyla ilgili elde edilen kaynaklar araştırma sınırlılıkları içerisinde ilgili kaynakları temsil edebilecek düzeydedir. · Araştırılan kaynakların sahipleri bu konuda uzman kişi ve kuruluşlardır. SINIRLILIKLAR Kaynakların daha çok ingilizce olması ve bu konudaki kaynakların çok az olması ile birlikte kapsam bakımından sadece Tquery nesnesi ve SQL ile ,süre açısından sadece bu konuyla ilgilenilmemekle birlikte 7 ay ile sınırlıdır. TANIMLAR Alias : Takma ad .Database kofigurasyon bilgisini özel bir ta veri tabanına bağlanmak için gerekli bilgiyi içerir. InterBase, dBase gibi. Alt sorgu : Sorgu içerisinde başka bir veri tabanından sorgulayarak veri alan bölüme denir. Blob : Resim dosyasının veri tabanındaki türü. Boolean : Mantıksal değer. True veya False değerlerini alır. Buffer : Tampon bellektir. Cache : Ön bellektir. Çok hızlı olması sebebiyle tercih edilir. CaseSensitive : Büyük küçük harf ayrımı yapması. A<>a Client : İstemci veya terminal olark ifade edilir. Component : Visual dillerdeki sesnesel öğelere denir . Dataset : Tablo , veri tabanını belirtir. DataSource : Veri tabanı. Ttable, Tquery vb.. nesneler tutar. Event : Nesnelerla ilgili olaylar. OnChange, OnExit gibi. Index : Belli bi alana göre sıralama. Join : Farklı tablolardan farklı verilerin alınıp birleştirilmesi. Keyfield : Anahtar alan. Sıralamanın yapıldığı alandır. Master- Detail : Ana-yardımcı kütük bağlantı sistemi Ortak alanlarla bu ilişki kurulur. Parametre : Fonksiyonlarca kullanılan değerler. PartialKey :Kısmi arama anahtarı. Primary Key :Paradox' ta oluşturulan birincil indextir. Remote Server : Uzaktan erişimli sunucu. Server :Sunucu Session : Oturum olayı Sorgu : Belli kriterler belirterek ana kümeden bu kriterlere uyan sonuç kümesi elde etme Torun nesne : Bir nesnenin özelliklerine sahip olup kendine ait de ek özellkleri olan nesnelere KISALTMALAR API :Application Programming İnterface BDE :Borland Database Engine BOF :Begining of File COM :Comminucation DDL :Data Defination Language DLL :Dynamic Link Library DML :Data Manipulation EOF :End of File RTTI :Run Time Type Information SQL :Structured Query Language BÖLÜM II YÖNTEM Bu bölümde araştırmada kullanılan evren ve örneklem, araştıma modeli, verilerin toplanması, verilerin çözümlenmesi ve yorumlanması yer almaktadır. Bu çalışma genel tarama modelin-de, literatür taraması ve çeviriye dayalı olarak yürütülmüştür. EVREN VE ÖRNEKLEM Çalışmaların evrenini Delphi ve SQL ile ilgili kitaplar , Delphi 3.0 Professional Sürümünün Local SQL Help sayfaları ile Tquery nesnesine ait Help sayfaları ile bu konudaki konferans-lar oluşturmaktadır. Çalışmanın örneklemi kaynakçada belirtilen kaynaklar oluşturmaktadır. ARAŞTIRMA MODELİ Araştırmada SQL ve Tquery nesnesinin özellikleri ve işlevleri incelendiğinden tarama modelinde yürümüştür. Böylece araştırma amaçları doğrultusunda literatürdekİ, bilgiler taranıp yorumlanmış , bir çoğu da denenmiştir. Uzman kanısı alınarak yapılması gereken çalışmalar saptanmıştır. VERİLERİN TOPLANMASI Araştırma için gerekli kuramsal verilerin toplanamsı konuyla ilgili literatürden (Kitap , makale, seminer , konferans ve Professional Help) . Literatür taramasından elde edilen veriler , ku-ramsal kısmın oluşturulması ve SQL ile Delphi' deki veri tabanı kullanımının önemi ve gücünü belirtmek amacıyla kullanılmıştır. Taranan kaynakların büyük bir kısmı İngilizce olduğundan bu bilgilerin Türkçeye çevrilmesi gerekmiştir. Çevirme işlemi kendime aittir. Yazılı kaynakların yanında İnternetten de yararla-nılmış. Bunun yanı sıra Kütüphanemizdeki Cd-Rom tarama hizmetlerinden yararlanılmıştır. VERİLERİN ÇÖZÜMLENMESİ VE YORUMLANMASI Bu çalışmada elde edilen veriler, SQL ile Delphi' deki veri tabanı kullanımının önemi ve Tquery nesnesiyle neler yapılabileceği açısından yorumlanmıştır. Bunu yapabilmek içinde Prof. Dr. Mithat Uysal' ın SQL kitabıyla Delphi 3.0 Professional Sürümünün Help' i ve diğer kaynaklar üzerinde yoğun bir çalışma yapılarak hedefim doğrultusunda çalışmalar yorum-lanmıştır. BÖLÜM III SQL 'in Yapısı ve Gelişimi Veri tabanı uygulamalarında , veri tanımlama, veri bütünlüğünün kontrolü,veri tabanlarına erişimin kontrolü ve veri tabanlarının sorgulanması (çeşitli kriterlere göre bilgi dökümü ve ra-por edilmesi) ve güncellenmesi amaçları için gerekli komutlara sahip bir alt dildir (sub language). Alt dil denmesinin nedeni ,bir bilgisayar dilinin sahip olması gereken tüm komutla-ra sahip olmayışıdır (Uysal,1994). Yapısal sorgu dili (SQL) sunucusu veri kümeleri üzerinde matematiksel ilşkiler gerçekleştiren veri tabanı motorudur. burda verinin nasıl bulunduğunu anlatmaya gerek yoktur. Veriyi almak için sadece SQL e başvurmak yeter. (Finkelstein,1990) SQL, 1974 te icat edilmesine rağmen 1986 yılına kadar bir standard haline gelmedi. Bu arada bir çok geliştirmeci bunun üzerine ilşkisel veri tabanı sistemleri geliştirdiler. Bu desteklere rağmen bunlar yeterince uygun olmadı çünkü: ofissel bir standard ortaya konmadan gelişti-rilmişlerdi (Balboni, 91). SQL 'in ilk başlangıcı ilişkisel veri tabanı modelinin kuramını ortaya koyan , E:F. Codd' un 'A relational model for large shared data banks " adlı makalesine dayandırmak olasıdır. Daha sonra IBM tarafından Structured English Query Language (SEQUEL) tanımlanıştır. İlk SQL standardı ISO tarafından 1987'de ISO 9075 kodu ile yayınlanmıştır.Bu dilin standart bir dil olması hızla yaygınlaşmasını sağlamıştır. Ayrıca ANSI versiyonu ise , teknik olarak ISO 9075 ile tamamı aynı nitelikte olup 1986' da X3.135 kodu ile yayınlanmıştır. ISO ,1989'da 'bütünlük arttırımı özelliğini' (integrity enhancement feature) ekleyerek ISO 9076 kodu ile yayınlamıştır. Ayrıca ANSI , embedded SQL dilleri ile ilşkili standartları da içe-ren X3.168 standardını yayınlamıştır. Standartlar üzerindeki çalışmalar ve eklemeler halen sürmektedir. Standart SQL komutları ile çalışmanın doğal olarak uygulamaların çeşitli heterojen ortamlar arasında taşınabilirliği (portability), açık sistem mimarisini destekleme gibi çeşitli açılardan büyük yararları vardır. Bütün bunlarla birlikte SQL 'deki eksiklikler geliştirmecileri bu konudaki yeni eklemelere ve gelişmelere mecbur kılmışdır. Bunlardan bazıları şunlardır: Intelligent (zeki) SQL öyle bir veri tabanı motoru arayüzü dilidir ki object-oriented ile multi-media yapılarını ve sonuç çıkarmayı birleştirmiştir. Böylece SQL in güçlü bir kolu olmaya ça-lışmıştır. Aynı zamanda object-oriented veri tabanlarında da sorgulama yapabilmektedir ( Khoshafian,1991). CHIQL Çinli kullanıcılar için yazılan dah doğal ve basit prosedürlü ve özellkle çoklu durum sorguları yazabilmenize izin vermektedir (Meng, X.; Wang, S.; Lum, V.Y.; Wong, K.F.; Low, B.T.,1997). Yapay arama GUI ile veya yapay sorgu dili (FQL) ile gerçekleşmektedir. FQL SQL'in bir u-zantısıdır. Ve kullanıcılara karmaşık sorgular yazmasına izin veririr( Penaloza, Manuel A.; Welch, Ronald M.,1997). Local (Yerel) Sql Local SQL tam yol ve dosya ismi yazmanıza izin verir. Select from 'Parca.DBF' Select from "C:\ORNEK\PARCA.DBF" Bunların ikisi de doğrudur. Bun-lar yerine BDE Alias (takma ad)lar da kullanılabilir. Örneğin Select from ":PDDX:Table1" NOT: Yerel tablo ismini yazmazsanız BDE Configuration Utility 'deki belirlenen tipi kabul e-der. Bu tip tablolar ile Query nesneleri ile ilişkilendirilen standart takma adlar için olan varsayılan sürücü tipindedir. Sonuç olarak Local SQL tablo isimlerinin uzunluğunun tek veya çift tırnak içinde yazılanları tablo isimlerinin iki katı kadar olmasına izin verir. Sütunlar Local SQL Paradox' un çoklu kelimeli sütun isimlerini ve SQL anahtar kelimelerinin uzun-luğunun iki katını desteklemektedir. Bu SQL anahtar kelimeleri şunlardır. · Tek veya çift tırnak içinde yazılanlar · SQL tablo ismi ile başlayan veya tablo ile ilişkili isimler Örnek: Select M."Mus_no" from Musteri M Aşağıdaki örnekte sütun ismi SQL DATE anahtar kelimesini ikiye katlar. Select Datelog."DATE" from Datelog Tarihler Local SQL tarihlerin U.S formatında da olduğu gibi MM/DD/YY (ay/gün/yıl) olarak girilmesini bekler.Uluslar arası tarih formatını desteklemez. Veri İşleme Bazı sınırlamalarla birlikte Local SQL aşağıdaki ifadeleri desteklemektedir. Select à Var olan veriyi açmak için Insert à Tabloya yeni bir veri eklemek için Update à Var olan veriyi düzeltmek için Delete - à Tablodan veriyi silmek için Aşağıdaki bölümler Local SQL DML ifadeleri için kullanılabilen fonksiyonları tarif eder. · DML ifadelerindeki parametre alt durumları · Toplam fonksiyonları · String fonksiyonları · Tarih (date) fonksiyonları · Operatörler · Güncellenebilen sorgular A) Select Select ifadesi bir veya daha fazla tablodan veri getirmek için kullanılır. Çoklu tablolardan veri işini yapan Select ifadelerine "Join" (birleştirme) denir. Local SQL Select İfadelerinin aşağı-daki şekillerini desteklemektedir. SELECT [DISTINCT] sütun_listesi FROM tablo_adı [WHERE arama_durumu] [ORDER BY sıralama_listesi] [GROUP BY grup_listesi] [HAVING sahiplik_durumu] [UNION secim_açıklaması] (heterojen birleşmeler) Aşağıda belirtilenler hariç bütün cümlecikler ANSI_standart SQL' ce kullanılır. [ ] içinde olan-lar istenirse kullanılır. A.1 Distinct Cümleciği Kelime manası ayrı ,hariç,tek demektir. Deyim olarak aynı alandaki benzersiz olanları bul-mayı ifade eder. Aşağıdaki örnek şehir alanı ne olursa olsun tüm öğrencileri gösterir Select ogr_sehir From Ogrenci Aşağıdaki örnek ise sehirleri aynı oln öğrencilerin yalnız ilkini seçer. Select DISTINCT ogr_sehir From Ogrenci A.2 From Cümleciği From cümleciği verinin getirileceği tablo veya tabloları belirtir . Tablo referansı tek bir tablo ,tabloların virgülle ayrıldığı bir liste veya iç/dış birleştirme (SQL -92 standartında belirtilen ) olabilir . Örneğin aşağıdaki ifade tek bir tabloyu çağırır : Select ogr_ad,ogr_soyad From "Ogrenci.dbf" Aşağıdaki ifade bir sol dış birleştirmesini gösteren tablo referansına bir örnektir. Select From Parca left Outer join İthalat On Parca.Parca_no=Ithalat.Parca_no A.3 Where Cümleciği İsteğe bağlı olarak kullanılan Where cümleciği arama durumunda belirtilen kriterlere uyan kayıtların alınmasını böylece filtreleme yapılmasını sağlar. Örneğin aşağıdaki ifade sadece Parca_nosu 543' den büyük olan satırları çağırır. Select From Parca Where Parca_no>543 Where cümleciği IN yüklemini de içerebilir. In yüklemi parantez ,içinde değerler listesini içerir. Örneğin aşağıdaki ifade sadece Parca_no 'su IN yüklem listesindeki öğelere eşit olan satırları çağırır. Select From Parca Where Parca_no IN (543,544,650,680) Select from Dersler Where bol_kod='12' and ogr_sinif='4' (ORACLE) Where cümleciğinde karşılaştırma için > ,<,=, <> gibi operatörler kullanılabilir. Bunun yanı sıra IN , ANY , ALL , EXIST yüklemleri de kullanılabilir A.4 Order By Order By cümleciği çağrılan satırların sırasını belirtir. Örneğin aşağıdaki sorgu öğrenci ismine göre alfabetik(artan) sıralı olarak bütün öğrencilerin listesini verir Select From Ogrenci Order By ogr_no ASC aşağıdaki sorgu öğrenci soyadına göre alfabetik(azalan) sıralı olarak bütün öğrencilerin lis-tesini verir. Select From Ogrenci Order By ogr_soyad DESC Hesaplanmış alanlar korelasyon( ilişki) ismine veya sıra durumuna göre sıralanabilir. Örneğin aşağıdaki sorguda ad ile soyad alanı birleştirilerek oluşturulan alana göre sıralanarak kayıtlar ekrana çağrılır. Select soyad || ',' ad || as tam_ad ,telefon From müsteri Order by tam_ad A.5 Group By Group By cümleciği toplam fonksiyonları için çağrılan satırların nasıl gruplandırılacağını belir-ler. Örnek: Select Parca_no, Sum(miktar) as Toplam From Parca Group By Parca_no A.6 Having Having cümleciği kaydın sorguca belirlenen değerlere sahip olup olmadığına bakar. Group By ile birlikte kullanılır. Having cümleciğiyle denkleşmeyen gruplar sonuç kümesinden çıkarı-lırlar. Alt sorgular Having cümleciğince desteklenirler. Alt sorgu ,ana sorguca döndürülecek kayıtların sayısını sınırlayan arama koşullarıdır. =,<,> gibi koşullandırmalar yanında IN ,ANY ,ALL, EXIST gibi ön yüklemler de kullanılabilir. Bölümlere göre öğrenci sayıları 500 kişinin üstünde olan bölüm kodlarının listesini veren bir örnek aşağıdadır. Select DISTINCT ogr_bol_kod, COUNT() From Ogrenci Group By ogr_bol_kod Having COUNT ()>500 (ORACLE)----odtu istatıstık-------- A.7 Union Union cümleciği iki veya daha fazla Select ifadesinin sonucundan tek bir tablo üretmek için kullanılır. Örneğin : Select From Ogrenci UNION Select From Veli Sekil 1 Union işlemi sonucu oluşan sonuç kümesi A.8 İntersect Sorgulardan elde edilen ortak kayıtları verir. Select From Ogrenci INTERSECT Select From Veli Şekil 2 Intersect işemi sonucu oluşan küme NOT : Delphi 3.0 'da yoktur ve Oracle 'da vardır. (Odtü İstasıstık ) A.9 Minus Birinci sorguda bulunup ikinci sorguda bulunmayan kayıtların bulunmasında kullanılır.Diğer bir şekilde bir grup öğenin seçimden çıkarılması amacıyla kullanılır. Select Ogr_num From Ogrenci MINUS (Select ali_ogr_num, From alınandersler) (Odtü Istatıstık) A.10 Heterojen Birleşmeler Local SQL farklı veri tabanlarındaki tabloların birleştirilmesini destekler. Heterojen birleştirme yapılacağı zaman yerel bir takma ad seçebilirsiniz. Takma ad seçmek için SQL/SELECT ALIAS 'ı seçin. Eğer Alias seçmezsen Local SQL tabloyu kullanılan veri tabanının olduğu ak-tif dizinde bulmaya çalışacaktır. Örneğin ISLER Alias 'ı fonksiyonda geçen veri tabanı idaresi olabilir. Yerel bir Alias seçtikten sonra bir tablo ismi belirtirsen · Yerel tablolar için hem Alias' ı hem yolu belirt · Tabloları uzaktan kontrol için sadece Alias' ı belirt Aşağıdaki ifade Paradox tablosundan ve Dbase tablosundan veri getirir. Select Distinct M.Müs_no,M.Sehir,S.Siparis_no From "MUSTERI.DB" M , "SIPARIS.DBF" Select Where M.Müs_no= S.Müs_no B) Update Ansi -Standard Update için belirtilen bir sınırlama yoktur. Önceden de anlatıldığı gibidir .Örneğin : Update ULKETABLOSU Set baskent='Paris' Where ULKE='FRANSA' And baskent='Istanbul' C) Delete Ansi -Standard Delete için belirtilen bir sınırlama yoktur. Önceden de anlatıldığı gibidir Ör-neğin : DELETE FROM TEZ9.DB WHERE SOYAD="ERTEM" (nesneden bir değer alacak olursak where soyad=:soyad ) NOT: TQUERY de Query.Open eventini kullanmayın. Dml İfadelerındeki Alt Durum Parametreleri Değişkenler veya parametre yapıcılar (?) Dml ifadelerinde değerler yerine kullanılabilen de-ğişkenler : den sonra yazılmalıdırlar. Örneğin SELECT ad,soyad From "Musteri.db" Where soyad>:var1 and ad<:var2 Toplam Fonksiyonları Çağrılan datayla birlikte aşağıdaki Ansi-Standard SQL toplam fonksiyonları kullanılabilir. SUM () Bir sütundaki değerlerin toplamını alır. AVG () Bir sütundaki değerlerin ortalamasını alır. MIN () Bir sütundaki değerlerin en küçüğünü bulur. MAX () Bir sütundaki değerlerin en büyüğünü bulur. COUNT () Bir sütundaki değerlerin sayısını bulur ÖRNEKLER : SUM (FIELD10) SELECT SUM (BRUT) FROM PERSONEL SUM (FIELD1+FIELD2) String Fonksiyonları UPPER() Stringi büyük harfe çevirir. LOWER() Stringi küçük harfe çevirir. TRIM() Stringin bazı kısımlarını alır. SUBSTRING() Stringten alt stringler oluşturur. Örnek : Select from Tez1.db Where Upper(Soyad)='ARSLAN' Tarih Fonksiyonu Local SQL EXTRACT() fonksiyonuna tarih/zaman alanlarından tek sayısal alanı almak ve şu şekilde kullanmak suretiyle çalışmasına izin verir. EXTRACT (extract_alan From alan_adı) Örneğin aşağıdaki ifade tarih alanından yıl değerini alır. Select Extract( Yıl From Dogum_tar) From Ogrenci Aynı zamanda MONTH ,DAY,HOUR,MINUTE,SECOND değerlerini de bu fonksiyonu kullanarak çıkartabilirsiniz. NOT : EXTRACT TIMEZONE_HOUR veya TIMEZONE_MINUTE cümleciklerini destekle-mez. Operatörler Local SQL şu operatörleri destekler Aritmetik ( ) ,+ , - , , / Karşılaştırma <, >,= ,<>, >=,=< , IS NULL ,IS NOTNULL, :Boşluk olarakta nitelendirilir. ' ' boşluk değildir. IN ,NOTIN :Bir küme içinde olup olmama durumu [NOT]BETWEEN x AND y :Bir değerin x ile yönetici arasında veya dışında olması durumlarını belirtir ALL :Bir kümedeki tüm değwerlwrdir ve bir eşitlik veya eşitsizlik-le kullanılır. Where Ucret>=ALL(10000,20000) ANY : Bir kümeden elde edilen değerlerin her hangi bi-riyse seçime dahil olunur. [NOT] EXISTS :Alt sorgu kayvramıyla kullanılır. [NOT] LIKE :Benzerlik işlemcisi Where isim Like 'A%' İsmi 'A' ile başlayanlar Mantıksal ( ) ,AND ,OR , NOT String birleştirme || Güncellenebilen Sorgular SQL linkleri hem tekli hem de çoklu tabloların güncelleştirilebilir sorguları için genişletilmiş destek sunar. Şu kısıtlamalar güncellemelere etki eder. · Link yapılan alanlar güncellenemez · Index anahtarlaması hataya yol açar. Aktif Sorgulardaki Sınırlamalar Tekli tablo sorguları veya görünümleri (güncellenebilir olanlar) şunları sağlar: · Join Union,Intersect ,Minus işlemleri yoktur. · Distinct anahtar kelimesi Select' te yoktur. · Select cümleciğindeki her şey basit Sütun referansı veya hesaplanmış alandır , Toplam fonksiyonlarına izin verilmez · From cümleciğinde referans edilen tablo hem güncellenebilir taban tablosu veya güncellenebilir görünüme sahiptir. · Group By ve Having cümleciği yoktur. · Alt sorgular yoktur, alt ilişkili sorgular yoktur. · Herhangi bir Order By cümleciği Index Ek kısıtlamalar alanlara veya kursor metotlarına uygulanabilir. Tablo Birleştirme (JOIN) işlemi Sorgulanan veriler eğer birden fazla tabloda yer alıyorsa Join işlemi yapılır. Join işlemi yapı-labilmesi için iki tabloda da ortak alanlar olmalıdır. Örneğin OGRENCI SINAV NO AD SOYAD NOTLAR VIZE1 VIZE2 FINAL 1 ISMAIL ARSLAN 1 90 100 100 2 ARZU ARSLAN 4 85 90 95 3 ISRAFIL ARSLAN 3 92 80 90 Çizelge 1 Birleştirilecek iki tablo Select No,Ad,Soyad,Fınal From Ogrenci, Sinav Where No=Notlar and no<'4' Aktif Join (Bağlantılar) Üzerindeki Kısıtlamalar Aktif bağlantılar kursorlere bağlıdırlar ve şuralarda kullanılabilirler. · Bütün bağlantılar soldan sağa dış bağlantılardır · Bütünbağlantılar Indexlerle desteklenirler(Paradox veDbase için · Dış ısmarlama tanımlanmaz · Her tablo(Join deki) taban tablodur. · Sorgu tekli tablo güncelleştirmesini engelleyecek hiçbir elemente sahip değildir. Sabitler (Constraints) Herhangi bir güncellenebilir sorguyu çalıştırmadan önce Query durum özelliğininStmtConstarined 'ini true ayarlayarak bir tabloyu sabitleyebilirsiniz. Kayıt ekleme veya düzeltme işlemi yeni kaydın kaybolmasına neden olduğu durumlarda bir hata oluşacak-tır. Hesaplanmış Alanlar Güncellenebilen sorgular için bir ek alan sonuç alanı olarak tanımlanabilir. Bunlar hem read-only hem hesaplanış alan olurlar. BDE fonksiyonundan DbiPutField çağrısı belirtilen alanın yeniden hesaplanmasına neden olur. Bde Fonksiyon Çağrıları (Sonuç Sorguları Üzerinde) Eğer bir sorgu kursor döndürürse o kursor BDE fonksiyonu olan DbiOpenTable 'dan dönen düşük seviyedeki yetenekleri tam olarak destekler. Böylece filtreler ve alan haritaları ileri sonuç kümesi temizlemelerine uygulanmak için kullanı-labilir. Açık tablodaki kursörlerin tersine DbiAddindex ve DbiSwitchtoIndex isimleri uygula-namamaktadır. Veri Tanımlama Local SQL veri Tanımlama dilini oluşturma,değiştirme ,tabloları silme indeksleri oluşturmak ve sıralamak hususlarını destekler. Görünümler desteklenir. Local SQL DDL ifadelerindeki değerler için değişkenlerin alt durumlarına izin vermez. Aşağıdaki DDL durumları desteklenmektedir. · CREATE TABLE Tablo oluşturma · ALTER TABLE Tablo düzeltme · DROP TABLE Tablo sime · CREATE INDEX Index oluşturma · DROP INDEX Index silme · CREATE VIEW Görünüm oluşturma B1. Create Tables (Tablo Oluşturma) Create Table aşağıdaki sınırlamalar olmak üzere kullanılır: · Domain 'e dayanan sütun tanımlamaları desteklenmez · Sabitler Paradox için PRIMARY KEY ile sınırlanmıştır. · Dbase de sabitler desteklenmez Örneğin aşağıdaki ifade Paradox ta Primary Key 'in soyad ve ad sütunları üzerinde sabitlenmiş bir veri tabanı tablosu oluşturur. Create Table "ISCI.DB" ( Soyad char (15), Ad char (15), Maas numeric(10,2), Bölüm smallint, Primary Key (soyad,ad) ) Aşağıdaki örnek yukarıdakinin Dbase için yazılmış olup Primary Key atlanmış halidir. Create Table "ISCI.DBF" ( Soyad char (15), Ad char (15), Maas numeric(10,2), Bölüm smallint, ) B2. Paradox ve Dbase Tablosu Oluşturma Local SQL 'i kullanarak Paradox veya Dbase tablosu oluşturabilirsiniz. Bunu ismi verirken uzantısını belirterek yapabilirsiniz. ".DB" Paradox için ".DBF" Dbase için Eğer yerel tablo isminin uzantısını yazmazsanız bu tablonun uzantısı BDE Configuration Utility deki Sistem sayfasındaki Varsayılan sürücü ayarındaki tür olacaktır. SQL Syntax BDE Logical Paradox dBASE SMALLINT fldINT16 Short Number (6,10) INTEGER fldINT32 Long Integer Number (20,4) DECIMAL(x,y) fldBCD BCD N/A NUMERIC(x,y) fldFLOAT Number Number (x,y) FLOAT(x,y) fldFLOAT Number Float (x,y) CHARACTER(n) fldZSTRING Alpha Character VARCHAR(n) fldZSTRING Alpha Character DATE FldDATE Date Date BOOLEAN FldBOOL Logical Logical BLOB(n,1) FldstMEMO Memo Memo BLOB(n,2) FldstBINARY Binary Binary BLOB(n,3) FldstFMTMEMO Formatted memo N/A BLOB(n,4) FldstOLEOBJ OLE OLE BLOB(n,5) FldstGRAPHIC Graphic N/A TIME FldTIME Time N/A TIMESTAMP FldTIMESTAMP Timestamp N/A MONEY fldFLOAT, fldstMONEY Money Number (20,4) AUTOINC fldINT32, fldstAUTOINC Autoincrement N/A BYTES(n) fldBYTES(n) Bytes N/A Çizelge 2. Veri tabanlarındaki değişken türleri ve özellikleri X=kesin (Tam rakam) Default 'u sürücüye göre değişir. Y= derece N= byte cinsinden uzunluk 1-5 Blob alt tipi (default =1) Oracle'da tablo oluşturma : Create Table Ogrenci (Ogrenci_no number(8) NOT NULL, Ad Char(15) Constraint ogr_key Primary Key (Ogrenci_No) Using Index (Odtü istatistik ) Örnek Query1.SQL de yazılı olan : Create Table "Tez1.db" ( soyad char [15] ad char [15] Bölüm smallint ) Form üzerinde 1 tane Datasource 1 tane Query var FormCreate de şunlar yazılıdır. Query1.ExecSql Query1.Close NOT : Query1.Open dedikten sonra SQL 'i çalıştırırsak EnoResultSet hatası verir . B3. Alter Table (Tablo Düzeltme) Local SQL aşağıdaki Ansi-Standard Alter Table alt kullanım deyimlerini desteklemektedir. Tabloyu değiştirirken yeni sütunlar ekleyebilirsiniz. Sütun ekleme ALTER TABLE tablo_ismi ADD sütün_ismi veri_tipi [,ADD sütun ismi veri tipi ...] Örneğin aşağıdaki ifade Dbase tablosuna 1 sütun ekler ALTER TABLE "Ogrenci.DBF" ADD ortalama smallint Sütun silme ALTER TABLE tablo_ismi DROP sütün_ismi [,DROP sütun ismi ...] Aşağıdaki ifade tablodan iki sütün siler ALTER TABLE "Ogrenci.Dbf" DROP soyad, DROP ad ADD ve DROP işlemleri tek ifadede birlikte kullanılabilir. Örneğin aşağıdaki ifade iki sütun siler ,bir sütun ekler: ALTER TABLE "Market.DB" DROP kdv,DROP topkdv,ADD topalıs integer NOT : Query1.Open dedikten sonra SQL 'i çalıştırırsak EnoResultSet hatası verir . NOT : Aynı alanı eklersen veya olmayan bir alanı kaldırmaya çalışırsa EDBerror hatası verir. B4. Drop Table (Tablo Silme) Bu komut Paradox veya Dbase tablosunu siler . Örneğin DROP TABLE "ISCI.DB" Bu işlem tabloyu tamamen siler. NOT : Query1.Open dedikten sonra SQL 'i çalıştırırsak EnoResultSet hatası verir . B5. Create Index (Index Oluşturma ) Create Index kullanıcılara aşağıdaki formatı kullanarak tablolara index oluşturmayı sağlar. Create Index index_adı ON tablo_adı (sütun [,sütun...]) Create Index dbase tabloları için index oluşturmanın tek yoludur. Aşağıdaki ifade Dbase dos-yası için index oluşturur. Create Index namex ON "Depo.Dbf" (malz_adi) Paradox kullanıcıları Create Index ile ikincil indexler oluşturur. İlk index olan Primary dosyala-rı Primary Key belirterek tablo oluştururken Create Table ile birlikte yazılarak oluşturulur. B6. Drop Index (Index Silme) Local SQL Ansi -Standard Drop Index ifadesi ile oluşturulmuş indexi silmenize izin verir. Bu Dbase ve Paradox dosyalarını destekler. DROP INDEX tablo ismi.index_ismi |PRIMARY Primary anahtar kelimesi Paradox primary indexleri silmek için kullanılır. Örneğin aşağıdaki ifade ISCI.DB deki ana primary index 'i silmek için kulllanılır. Drop Index "ISCI.DB".Primary Base index dosyalarını veya ikincil Paradox indexlerini silmek için index ismini yazmanız ge-rekiyor. Drop Index "ISCI.DB".Namex NOT : Eğer tablonuzun indexi yoksa EdbEngineError index does'nt exist mesajı verir. B7. Create View Görüntü Select ifadesinden bir görsel ifade oluşturur. İhtiyacınız olan bu veriyi bu hareketli ızgara veya pencereyle tablo üzerinde görebilir. Bunu yaparken de teknik işlemler gözükmez. Karışık beceri gerektiren Select cümleciği yazmaktansa kullanıcı bir görünüm seçer. Create View bir veri görünümü seçer ki bu veri tabanında ki bir veya daha fazla tablodan oluşur. Geri döndürülecek (veya görüntülenecek) satırlar kaynak tablodaki sütun listelerinden Select ifadesiyle seçilenlerce belirlenecektir. Select proje ,birleştirme işlemlerini eğer bunlar tabloysa yapılabilir. Create View kullanıcılara aşağıdaki biçimi kullanarak tablolar üzerinde görünümler oluşturmalarına izin verir. Create View görünüm_adı [sütun_adı [,sütun_adı]...] Create View ClientDataRepository (CDR) ile birleşiyor. CDR görünümü tanımlayan Select cümleciğini içerir. "WITH CHECK OPTION" sabit görü-nümler oluşturmak için desteklenir. Görünümlerin görünümü de desteklenir. Yine de Basa-makla/Yerel (cascade/local) görünüm özelliği desteklenmez. Çünkü tüm güncellenebilen gö-rünümler sabitleri basamaklar. DDL Örnekleri A) Drop Table ( Tablo Silme) Eğer tablo ismi , karakter periyodu içeriyorsa, ismi çift tırnak içinde gösteriniz. Drop Table "C:\Data\Customer.Db" Eğer tablo ismi , karakter periyodu içermiyorsa, ismi çift tırnak içinde göstermeyin. Drop table clients NOT: Query1.Open yazılmamış olması gerekiyor. B) CREATE INDEX Örneğin : Create Index Insoyad On Tez9[Soyad] Create Index Parca On Parcalar (Part_No) Create Index Pers_maas On personel(brüt) Paradox : Paradox birincil indexleri yalnızca tablo oluşturulurken oluşturulabilir. İkincil indexler büyük harf duyarsız korunduğunda mümkünse oluşturulur. Dbase : Dbase indexleri belirtildiği gibi oluşturulur. Index ismi tag ismidir C) DROP INDEX Index silerken Tablo_ Ismi.Index_ Ismi şeklinde bir yazılım kullanırız. Drop index.part_no Drop index.primary Drop tez9.insoyad DML ( Data Manipulation) Örnekleri Aşağıdaki cümlecikler : Select From, Where ,Order By, Group by ve Having Aşağıdaki toplamlar SUM , AVG , MIN , MAX , COUNT ve Aşağıdaki operatörler , , / , =, <> , is NULL UPDATE , INSERT , DELETE tarafından desteklenen operatör ve cümleciklerdir. Aşağıdaki örnekler standart veri tabanlarıyla kullanılan DML ifadelerine birer örnektir. 1. Örnek UPDATE Update Esya Set sehir=' Erzurum' Where esya.sehir='Aydın' Sehir adı 'Aydın' olan kayıtların sehir adı alanlarını 'Erzurum' ile değiştirir. 2. Örnek INSERT Insert into Esya(parca_no,sehir) Values ('aa090','Ankara') Parca ve Sehir alanlarına bu değerleri ekler 3. Örnek DELETE Delete From Esya Where parca_no='aa090' Parca_nosu 'aa090' olan kayıtları siler 4. Örnek Birleştirmek için SELECT Aşağıdaki örnek SELECT ifadesinin nasıl JOIN olarak kullanıldığını gösteriyor Select Distinct P.parca_no, P.miktar, E.sehir From Parca P ,Esya E Where p.parca_no=E.parca_no And P.miktar>20 Order by P.miktar, E.sehir, P.parca_no Birleştirme amacıyla kullanılan bir SELECT ifadesi WHERE cümleciğini içermelidir ki en a-zından bir alanın her iki tabloda da eşit olduğunu kontrol edebilsin. 5. Örnek Alt Seçimler Select P.parca_no from Parca P Where P.miktar In ( Select I.miktar from Ithalat I Where I.parca_no='aa090') Parca.Db 'deki miktar alanı ithalattaki parca_nosu aa93 olan kayıtlardaki miktarların birine eşit olan parca.dbf deki kayıtların parca_no' larını alır. 6. Örnek Group By Select parca_no , Sum (miktar) as PQTY From Parca Group by parca_no NOT : Select cümleciklerindeki Toplam alanları eğer hesaplanan alan kullanıldıysa Group By cümleciği kullanılmalıdır. 7. Örnek Order By Aşağıdaki örnek azalan tipteki cümlecikte kullanılan Order By 'a bir örnektir. Select Distinct musteri_no From c:\data\musteri Order by musteri_no Descending NOT : Ascending= artan Descending = azalan BÖLÜM IV TQUERY NESNESİ Tquery Nedir : SQL ifadelerine dayanan dataset 'leri işleyen visal bir Delpi nesnesidir. Veri tabanına SQL ifadeleriyle ulaşmak için Tquery kullanınınız . Query öğeleri Sybase, SQL Server, Oracle, Informix, DB2, InterBase gibi uzaktan kontrollü serverlarda , Paradox, dBASE, Access, FoxPro gibi Interbaselerde , ve ODBC türü veri tabanlarıyla kullanılır. Avantajları : · Aynı anda birden fazla tabloya erişme (Join İşlemi) · Tüm satır ve sütünü çağırmaktansa istenen sat ır ve sütunlara ulaşma. Şekil 3 TQery Nesnesi NOT: Tquery ölçülebilir veri tabanı uygulamalarında özel bir önemi vardır. Eğer yerel veri tabanlarıyla yapılan uygulamaları daha sonra uzaktan kontrollü server uygulamaların dönüş-türmek gibi bir olasılık da Tquery öğesi bu geçiş kolaylığına garanti verir. TQUERY'nin Hiyerarşik Yapısı TObject TPersistent TComponent TDataSet TBDEDataSet TDBDataSet TQERY Tquery' den Gelen Özellikler Constrained DataSource Local ParamCount Params Prepared RequestLive RowsAffected SQL SQLBinary StmtHandle Text UniDirectional TDBDataSet' den Gelen Özellikler Database DatabaseName DBHandle DBLocale DBSession Provider SessionName UpdateMode TBDEDataSet' den Gelen Özellikler CacheBlobs CachedUpdates CanModify ExpIndex Filter Filtered FilterOptions Handle KeySize Locale RecNo RecordCount RecordSize UpdateObject UpdateRecordTypes UpdatesPending TDataSet' den Gelen Özellikler Active AutoCalcFields Bof Bookmark Constraints DefaultFields Designer EOF FieldCount FieldDefs Fields FieldValues Found Modified Name State TComponent' dan Gelen Özellikler ComObject ComponentCount ComponentIndex Components ComponentState ComponentStyle DesignInfo Owner Tag VCLComObject 1) CONSTRAINED (KISITLAMA) Select ifadeleriyle üretilen sonuç kümesine uymayan güncellemelere veya eklemelere izin verilip verilmeyeceğini ve konulan sınırlamaların aktif olup olamayacağını belirler. Property Constrained: Boolean; Bu özelliği kullanarak SQL de Paradox veya Dbase tabloları için yazılmış sonuç kümesine aykırı bir veri girildiğinde buradaki sınırlamaların geçerli olup olmayacağı belirlenir. False ise sınırlamalar göz ardı edilir. True ise eğer değiştirme veya ekleme işlemlerindeki veriler sınırlara uymuyorsa bu girişlere izin verilmez. Select From Customers Where (Custno > 1400 And Custno < 1500) TCHECKCONSTRAINT Bir alan öğesi için yazılan sınırlamaların toplamını içerir. Alan öğeleri geçerli veri değerlerini tanımlayan kontrol koşullarını destekler. Bu nesne verilen alana etki eden kontrol koşullarının toplamını saklamaktadır 2) DATASOURCE Aktif alan değerlerini veri tabanından alarak SQL ifadesinde kullanmayı sağlayan DataSource öğesini belirler. Property DataSource: TDataSource; Datasource başka bir dataseti işaret etmelidir. Bir query öğesini göstermemelidir. Datasource' ta belirtilen dataset oluşturulmalı,çalıştırılmalı ve parametre bağlanmadan önce açılmalıdır. Parametreler Query' nin Prepare metoduyla çalıştırılırlar. İpucu : DataSource' u özellikle linklerde master-detail ilişkisinde kullanın. Aynı zamanda Params setinde olmayan parametreleri bağlamayı garantilemek için veya Parambyname me-todunu çağırmak için kullanılır. Eğer SQL cümlesi parametre içermezse veya parametreler Params özelliğini veya ParambyName olayını kullanıyorsalar bunu kullanmanıza gerek yok. 3) -R- LOCAL Bir Querynin uzak erişimli servarlardakl SQL tablolarından daha çok bir veya daha fazla Paradox veya dBase tablosunu mu tercih ettiğini belirtir. Property Local :Boolean; Bir sorgu uzak serverdaki SQL tablosuna değilde bir veya daha fazla Paradox veya Dbase tablosuna erişiyorsa ( SQL tablosu yerine ) bu özellik true olur. Yoksa Local False 'tur. Local bir uygulama sorgunun Prepare metodunu sorguyu çalıştırmadan önce otomatikman ayarlar. Bazı sorgu öğe setleri (constrained gibi) Paradox veya Dbase tabloları için çok anlamlıdır. Diğerleri SQL serverların uzaktan kontrolünde anlamlıdır. Local bize ulaşılan veri tabanının tipine dayanarak code'da mantıksal ayrımlar (branşlar) için yaralı bilgiler verir. Aynı zaman-da BDE' nin bir sorguyu kendi Local Query motorunu kullanarak mı yoksa SQL ifadelerini doğrudan uzaktan kontrollü server 'a geçerek mi bir sorguyu parsellediği belirlenebilir 4) PARAMCHECK SQL özelliği çalışma anında değiştirildiğinde parametre listesinin (bir sorgu için) tekrar üreti-lip üretilmediğini belirler. property ParamCheck: Boolean; Default 'u true dur. Ve bu params özelliğinin çalışma esnasında otomatik olarak yeniden üre-tileceğini belirler. Paramcheck true olduğunda aktif SQL ifadesi doğru parametre numarası-nın üretileceğini garantilemiş olur. Bu özellik parametre kullanan veri tanımlama ifadeleri için çok yararlıdır. Örneğin interbase store procedure için sorgu öğesi kullanırken. Parametresiz sorgu kullanan uygulamalar Paramcheck özelliğini False ayarlayabilir ama diğer durumlarda bu özellik true olmalıdır. 5) -R- PARAMCOUNT Query için aktif parametre sayısını belirtir Property Paramcount :Word; Paramcheck özelliği true ise Paramcount daima Query için SQL ifadesindeki gerçek para-metre sayısına uyar.Bir uygulama Params özeliğine parametre ekleyebilir veya parametre silebilir. Bu tür değişiklikler Paramcount a otomatik olarak yansır. 6) PARAMS Sorgunun SQL ifadesi için parametre bilgisi saklanır. Property Params[Index:Word] Tparams Çalışma anında Params'a parametre isimlerini değerlerini ve veri tiplerini dinamik olarak görmek ve ayarlamak için ulaşır. Params 0 tabanlı bir parametre kayıt dizisidir. Index ulaşıla-cak dizi elemanını belirtir. NOT: Her parametrenin ismi bilindiğinde parametre değerlerini ayarlamanın ve çağırmanın daha kolay bir yolu ParambyName kullanmaktır. Fakat Parambyname ile parametrenin ismi-ni ve tipini değiştiremeyiz. Select ifadelerinde kullanılan parametre boş (NULL) olamaz Fakat bunlar Update ve Insert ifadelerinde Null olabilir. Şekil 4 TQuery Params girisi Örnek1: Query1.Prepare; Query1.Params[0]:='Argentina'; Query1.ExecSql; Örnek2: Query1.Params[0].Asstring:=(sender as Tedit).Text; Query1.ExecSql; 7) PREPARED Bir sorgunun çalıştırılmak için hazırlanıp hazırlanmadığını belirler. property Prepared: Boolean; Eğer true ise Query hazırlanmıştır. False ise hazırlanmamıştır. Bir sorgunun çalıştırılmadan önce hazırlanması gerekiyorsa ve bu daha önce hazırlanırsa çalıştırma performansı ar-tar.(özellikle bu aynı parametre değerlerini alarak birden fazla çalıştırılan bir parametreli sor-gu ise) . if not Query1.Prepared then begin Query1.Close; Query1.Prepare; Query1.Open end; NOT : Bir uygulama aktif Prepared ayarlarını sorguyu hazırlamak veya hazırlamamak için değiştirebilir. Eğer Prepare true ise bunu False yapmak Unprepare metodunu sorguyu hazır-lamaması için çağırmak demektir. Prepared false ise bunu true ayarlamak sorguyu hazırla-mak için Prepare metodunu çağırmak demektir. Prepared False ise bunu true ayarlamak sor-guyu hazırlamak için Prepare metodunu çağırmak demektir. Genelde Prepare ve Unprepare 'ı direkt olarak çağırmak daha iyi bir programlama tekniğidir. 8) REQUESTLIVE Sorgu çalıştığında uygulamanın BDE' den canlı sonuç seti bekleyip beklemeyeceğini belirler. Property Requestlıve :Boolean; Requestlive 'i BDE nin uygulama için sonuç seti üretmeyi deneyip denemeyeceğini belirle-mek için ayarlayın. Varsayılan değeri False'dur ve bu Query read-only sonuç seti döndürür. Requestlive 'ı true olarak ayarlamak BDE' den canlı sonuç setinin döndürüleceğini garantile-mez. Yalnızca BDE 'nin bu seti döndürmek için çalışacağını garantiler .BDE yalnızca Select yazılımı canlı sonuç seti için gerekli ifadelere sahip olduğunda canlı sonuç seti döndürür. Eğer Requestlive true ise fakat yazılım gereklere uygun değilse BDE read-only sonuç setini Paradox veya Dbase için döndürür veya uzaktan kontrollü serverlar için hata koduna döndü-rür. 9) -R- ROWSAFFECTED Son query işlemince kaç satırın güncellendiğini veya silindiğini belirler. Property Rowsaffected :Integer; Eğer RowsAffected -1 ise sorgu hiçbir satıra etki etmemiştir. Örneğin Label1.Caption:=Inttostr(Query1.RowsAffected) 10) SQL Sorguca çalıştırılmak üzere SQL text' ini saklar. Property SQL:Tstrings SQL 'i bir sorgu öğesi olan Execsql veya Open metotları çağrıldığında çalışmak üzere SQL ifadesi oluşturmak için kullanınız. Dizayn aşamasında Object Inspector' daki string list editöre başvurarak SQL özelliği düzenlenebilir. NOT : Delphi Client/server geliştiricileri aynı zamanda SQL cümleciği yazmak için Visual Query Builder da kullanırlar. SQL özelliği şunlara ulaşmak için kullanılır. · Local SQL 'ı kullanarak Paradox veya Dbase tablolarına erişmek .İzin verilen yazım şekli Ansi-Standard SQL 'de olduğu gibidir ve Select Insert,Update,Delete ifadelerini içe-rir. · Local interbase serverlarındaki veri tabanlarına , SQL -92 standardını ve özel interbase uzantılarını SQL yazılımı için kullanır. Bunun yazım kuralı ve sınırı için Interbase Language Referenca bakabilirsiniz. · SQL link sürücüleri yaklaşımını (yöntemini) kullanarak uzaktan erişimli veri tabanı serverlardaki veri tabanlarına SQL yazılımı ve sınırları için server dökümantasyonuna ba-kınız. SQL için hazırlanan SQL ifadeleri yeniden yerleştirilebilen parametreleri içerebilir. Pa-rametreler params özelliğinde oluşturulur ve saklanır. Çalışma esnasında SQL ifadesi yazmış olmak için ; 1) Query çalışıyorsa kapatmak için CLOSE 'u çağırın. 2) SQL özelliğini temizlemek için CLEAR 3) Yeni bir yazı eklemek için ADD veya SQL özelliğinde script dosyasına bir dosya ata-mak için LOADFROMFILE 'ı kullanın 4) Eğer kullanıyorsa parametreleri ayarlamak için ParamByName kullanın 5) Sorguyu çalıştırmaya hazırlamak için PREPARE kullanın 6) Sorguyu çalıştırmak için EXECSQL veya OPEN kulanın. NOT : SQL ifadesi aynı anda bir SQL ifadesi taşıyabilir. Genelde bir server destekleyene ka-dar çoklu (batch) ifadelere izin verilmez. Şekil 5 Query1.SQL 11) SQL BINARY SQL sorgu ifadesini veya sonuç setini temsil eden ikilik veri akışını gösterir. Property SQLBinary: PChar; NOT : SQL Binary' yi direk kullanma .Bu BDE ' ye direk iletişim erişimi için dahili olarak kullanılır. Bu SQL özelliğinin çalıştırdığı SQL ifadesini görmek ve ayarlamak için SQL kullanın. 12) -R- STMTHANDLE Sorgu için BDE ifadesini tutar. Property StmtHandle: HDBIStmt; Bunu eğer bir uygulama BDE' yi direk çağırıyorsa kullanın.(Tquery metotlarını es geçin). Bazı BDE API uygulamaları durum yöneticisine parametre olarak ihtiyaç duyarlar. Bunun dışında-ki bütün durumlarda bu özelliğe ihtiyaç yoktur. 13) -R- TEXT BDE 'ye geçen gerçek SQL sorgu metnini gösterir. Property Text: PChar; Read-only bir özelliğe sahiptir ve BDE 'ye geçen gerçek SQL query metnini araştırmak için kullanılır. Parametreli sorgular için ,parametrelerle ? sembolü kullanılan metindir. Genelde bu özelliği kullanmaya gerek yoktur. Sorgudaki SQL ifadesini değiştirmek veya u-laşmak için SQL özelliğini kullanın. Parametreler için Params özelliğini kullanın. 14) UNIDIRECTIONAL BDE iki yönlü kursörlerinin sorgunun sonuç seti için uygun olup olmadığını belirler. property UniDirectional: Boolean; BDE kursörünün sonuç setinde ileri veya geri gidip gitmeyeceğini ayarlayabilirsiniz. Varsayı-lan değeri False tur. NOT :Genelde SQL kursörler unidirectional dır. Sadece veri yapısında ileri gidebilirler. Yine de BDE buna izin vermektedir. Eğer bir uygulama sonuç setinde iki yönlü kayıtlara ulaşma gereği duymuyorsa bunu true olarak ayarla. true olduğunda uygulama daha az hafızaya ihtiyaç duyar ve hız artar. TDBDATASET 'DEN GELEN ÖZELLİKLER 15) -R- DATABASE Bir veya daha fazla tabloyu temsil eden veri tabanı öğesini tanımlar. property Database: TDatabase; Tablo ile ilişkili veri tabanı öğesinin özelliklerine ,olaylarına ve metotlarına ulaşmak için database' i kullanın. Read-only 'dir ve DatabaseName özelliği ile belirtilen veri tabanı açıldığında otomatik olarak ayarlanır. with Table1.Database do begin StartTransAction; {Bazı kayıtları Table1 ile kaydeder} Commit; end; 16) DATABASENAME Dataset ile ilişkilendirilecek veri tabanının ismini belirtir. property DatabaseName: string; DatabaseName uygulamada kullanılan Database öğesinin ismiyle aynı olma-lıdır. NOT : DatabaseName 'i veri tabanı bu öğe ile ilişkili olduğunda ayarlamaya kalkarsan hata oluşur. İPUCU : Dizayn esnasında Tdatabase öğesini çift tıklayarak Database editö-rü çağır ve DatabaseName özelliğini ayarla. DatabaseName özelliğini değiştirirken table kapalı olmalıdır. Table1.Active := False; try { Ilk önce alias kullanmaya çalışıyoruz } Table1.DatabaseName := 'Delphi_Demos'; Table1.Active := True; except on EDatabaseError do { Eğer hata oluşursa sürücü ve dizin belirtiyoruz } Table1.DatabaseName := 'c:\delphi\demos\database'; Table1.Active := True; end; 17) -R- DBHANDLE BDE veri tabanı yönetimini tablo için belirler Type HDBISES:longint; Property Dbhandle: HDBISES; Dbhandle sadece database ve dataset metotlarını atlayarak direkt BDE API' lerine yazma yapılan uygulamalarda yararlıdır. Birçok BDE fonksiyon çağrısı yönetim parametresine ihtiyaç duyar. Oturum aktif edildiğinde Dbhandle' a bir başlangıç değeri atanır. NOT: Bu özelliği BDE fonksiyonel olarak standart Delphi öğelerince kullanı-lamayacak duruma gelene kadar kullanmayın. 18) -R- DBLOCALE BDE dil sürücüsünü tablo öğesi için ayarlar. Type Tlocale : Pointer Property Dblocale : Tlocale Dblocale' ı tablonun ilişkilendirildiği veri tabanı öğesince kullanılan BDE dil sürücüsünü belirlemek için kullanın. BDE ye direk çağrı yapan uygulamalar Dblocale bilgisini API fonksiyonu parametresi olarak vermek zorunda olabilir-ler. NOT: Bunu BDE zorunlu olarak ihtiyaç duymadan kullanmayın. 19) -R- DBSESSION Bu dataset öğesinin ilişki içinde olduğu database oturum öğesini gösterir. Property DBSession: TSession Veri tabanı oturum öğesini bununla ilişkili olan tablo öğesiyle birlikte gösterir Varsayılan olarak database öğesi varsayılan oturum öğesiyle ilişkilidir. Otu-rum otomatik olarak bütün veri tabanı uygulamaları için oluşturulur. TSession Tsession bir uygulamada bir grup database' in global yönetimini sağlar. Tsession 'ın üç kullanım şekli vardır; standart , çoklu Paradox için ağ dosya-ları ve çoklu iç içe veri tabanı uygulamalarında. Delphi otomatik olarak global ulaşılabilir varsayılan Tsession öğesini Oturum olarak bütün veri tabanı uy-gulamaları için yapar .Varsayılan oturum öğesi standard veri tabanı bağlantı-larını tutar. Bir uygulama oturumu onun properties' lerine event' lerine veya metotlarına girerek kontrol edilebilir.Farklı network yerleşim birimlerindeki çoklu oturumlara eş zamanlı olarak erişmesi gereken veri tabanı uygulamala-rında kullanılır 20) -R- PROVIDER Bu dataset için provider arayüzünü belirler. Property Provider: IProvider; Bu tablo için koruyucu arabiriminı tarif eder. Bu nesne için Provider arabirimi-ni belirlemek amacıyla kontrol edin. Iprovider arabirimi geliştirmecilerin çoklu uygulamalar üzerindeki meraklarıdır. ( Iprovider arabirimi aracılığıyla server uygulamalarında kullanıcı tabloların bu tablo nesnesiyle direk olarak ilişki kurmasını isteyen geliştirmeciler) 21) SESSIONNAME Bu tablonun ilşkili olduğu oturumun ismini belirler. Property SessionName: string; SessionName otomatik olarak tablo 'nun bağlantılı olduğu database öğesinin SessionName özelliğinin ismine ayarlanır. Eğer sessionName boş ise tablo öğesi otomatikman varsayılan oturumla ilişkilendirilir. Bir tablo öğesini farklı grupla ilişkilendirmek istersen SessionName var olan session öğesinin sessionName özelliğiyle aynı olmalıdır. Aynı zamanda bu session bu tablonun bağlı olduğu database öğesince kullanılan bir session olmalıdır. 22) UPDATEMODE BDE' nin SQL database'de güncellenmekte olan kayıtları nasıl bulacağını belirler. type TUpdateMode = (upWhereAll, upWhereChanged, upWhereKeyOnly); property UpdateMode: TUpdateMode; UpdateMode'u datasetteki bir kayda konumlanılacağında kriteri belirtmek için kullanınız. UpdateMode aşağıdaki değerleri alabilir: upWhereAll :Tüm sütunlar kayda konumlanmak için kullanılır upWhereChanged : Sadece anahtar alanlar ve değişen alanlar kayıt bulmak için kullanılır upWhereOnly :Sadece anahtar alanlar kayıt bulmak için kullanılır TDBEDATASET 'DEN GELEN ÖZELLİKLER 23) CACHEBLOBS Blob'ların hafızada saklanıp saklanmayacağını (cache edilmesi) belirler. property CacheBlobs:Boolean; Cacheblobs 'u blob resimler gösteren kayıtlar arasında ilerlerken perfor-mansı artırmak için Blob resimlerin hafızada saklanıp saklanmayacağını be-lirtmek için kullanın . Eğer bir uygulama kayıtlarla ilişkili Blob'ları göstermeye ihtiyaç duymuyorsa Cacheblobs' u False yapın ki sistem kaynaklarını daha optimum kullanmış olsun. 24) CACHEDUPDATES Cached güncellemelerin (bir tablo ) için kullanıma hazır olup olmadığını belir-ler. property CachedUpdates:Boolean; Eğer CachedUpdates true ise Cached değişikliği yapılabilr yoksa yapılamaz. CachedUpdates enable olduğunda (bir tablonun güncellenmesi ; tablonun kaydedilmesi yeni kayıt ekleme,silme,düzeltme) direkt olarak veri tabanında-ki tablolara yazılmak yerine ana bellekte tutulur. Değişiklikler tamamlandığın-da bir uygulama Cached olan değişiklikleri veri tabanına kaydeder. Cached güncellemesi kullanıcı uygulamalı bir server veri tabanıyla çalışırken çok yaralı olur. Bu özelliği aktif etmenin yararları şunlardır. · Daha az iş ve daha kısa iş zamanı · Network trafiğini minimize etmek Potansiyel olabilecek zararları şunlardır. · Kullanıcılar verinin yerel kopyasını düzeltirken ,başka uygulamalar server üzerindeki gerçek veriye erişebilir ve bunu değiştirebilir. · Başka uygulamalar uygulamaca yapılan değişikliklere cache'teki bilgi-ler veri tabanına uygulanana kadar veri değişikliklerine ulaşamazlar. 25) -R- CANMODIFY Bir tablo' nun temelinde yatan veri tabanının veriye yazma erişimine izin ve-rip vermediğini belirtir. property CanModify:Boolean; Veri tabanı bağlantısı yapıldığında bir tablo genelde yazma erişimi ister. Canmodify yazma veya korumanın garantilenmesidir. Eğer true ise veri de-ğiştirilebilir ve ana server kütüğüne yazılabilir. Fakat false ise veri görülebilir ama düzeltilemez NOT: Eğer canmodify true ise verilen kullanıcı için yazılan kısıtlamalar SQL veri tabanı server' ına yazmayı engeller. 26) -R- EXPINDEX Tablo 'in Dbase açıklama indexi kullanıp kullanmadığını belirler. Property Expındex:Boolean; Eğer true ise bir açıklama indexi aktif olur. 27) FILTER Tablo için aktif filtre metnini belirtir. Property Filter:Strıng; Tablo için aktif filtreyi belirtir. Filtreleme çalıştırıldığında uygulamada filtre ko-şullarına uyan kayıtlar gösterilir. Örneğin aşağıdaki filtreleme koşulu Sehir alanı "ERZURUM" VE "ANKARA" olanları gösterir. SEHIR='ERZURUM" OR SEHIR='ANKARA' Karakter tabanlı kısmi aramalar için joker karakterini kullanabilirsiniz Örneğin sehir='a' NOT : Uygulamalar çalışma esnasında filtreleme durumunu değiştirmek için ( kullanıcı girişine cevap verilirken ) kullanılır. 28) FILTERED Filtrelemenin aktif olup olmayacağını belirler. Property Filtered :Boolean; Filter özelliğini veya OnFilterRecord olay yöneticisini aktif etmek için bu özel-liği true ayarlayın.Filtreleme true iken kullanıcının bir kaydı düzeltmesi demek kaydın filtrenin test koşuluna uygulanmaması demektir.Filtre aktif iken bir sonraki kayıt getirildiğinde kayıt gözükmeyecek .Böyle olursa filtre koşuluna göre erişilen bir sonraki kayıt aktif kayıt olur. 29) FILTEROPTIONS Filtrelemenin büyük küçük harf duyarlı olup olmadığı ile kısmi karşılaştırmala-ra izin verilip verilmeyeceğini belirler TFilterOption = (foCaseInsensitive, foNoPartialCompare); TFilterOptions = set of TFilterOption; Property FilterOptions: TFilterOptions FilterOptions' ı foCaseInsensitive yaparsanız tüm olasılıkları denetlemiş olu-sunuz. FilterOptions' ı foNoPartialCompare 'a ayarlarsanız çoklu durumlar ve alanlar için yazılan filtre koşullandırmalarından tam bir sonuç elde edersiniz. Stringlerde kısmi karşılaştırmayı engellemek için FilterOptions ''ı foNoPartialCompare 'a ayarlayın 30) -R- Handle Tablo için BDE kursör yönetimini belirtir. type HDBICur: Longint; Property Handle: HDBICur; Tdataset metotlarını atlamak ve BDE ye direkt çağrı yapmak amacıyla kulla-nın. Bir çok BDE fonksiyon çağrısı kursör kullanım parametresine ihtiyaç du-yar. Tablo açıldığında buna bir başlangıç değeri atanır. Aktif kaydın pozisyo-nunu değiştiren bir BDE çağrısıyla kullanıldığında Resync yi BDE çağrısın-dan hemen sonra kullanın. NOT: Bu fonksiyonu BDE fonksiyonel olarak standart Delphi öğeleri üzerinde etkili olamayana kadar kullanmayın. 31) -R- DBLOCALE BDE Dil sürücüsünü tablo öğesi için ayarlar. type TLocale: Pointer; Property DBLocale: TLocale; BDE ye direk bağlantı yapan uygulamalar API fonksiyon parametresi olarak Dblocale bilgisini göndermek zorunda olabilirler. NOT: Bu fonksiyonu BDE fonksiyonel olarak standart Delphi öğeleri üzerinde etkili olamayana kadar kullanmayın. 32) FILTEROPTIONS Filtrelemenin string veya karakter alanlar üzerinde büyük küçük harf duyarlı olup olmayacağını ve kısmi kıyaslamaların kayıtları filtrelerken kullanılmasına izin verilip verilmeyeceğini belirtir. type TFilterOption = (foCaseInsensitive, foNoPartialCompare); TFilterOptions = set of TFilterOption; Property FilterOptions: TfilterOptions Varsayılan değeri boştur. Karakter alanlardaki filtrelemelerde büyük harf du-yarlılığı seçerseniz bütün karakterleri elde etme imkanına kavuşursunuz. E-ğer filtrelemeyi birden fazla alan üzerinde yapıyorsanız veya çoklu durum filtrelemesi kullanıyorsanız foNoPartialCompare seçeneğini true işaretleyin NOT :Kısmi karşılaştırmaya dayanan filtrelemelerde FoNoPartialCompare ı true yapmaya gerek yoktur. Bunun yerine joker karakterleri kullanın . Örneğin Sehir='A' Sehir adı a ile başlayan kayıtlar. 33) -R- HANDLE Tablo için BDE kursör yönetimini kullanmayı belirtir. type HDBICur: Longint; Property Handle: HDBICur; Tdataset metotlarını atlamak ve BDE ye direkt çağrı yapmak amacıyla kullanın.Bir çok BDE fonksiyon çağrısı kursör kullanım parametresine ihtiyaç duyar. Tablo açıldığında buna bir başlangıç değeri atanır. Aktif kaydın pozisyonunu değiştiren bir BDE çağrısıyla kullanıldığında Resync yi BDE çağrısından hemen sonra kullanın. Not :Bu fonksiyonu BDE fonksiyonel olarak standart Delphi öğeleri üzerin-de etkili olamayana kadar kullanmayın. 34) -R- KEYSIZE Tablonun aktif indexi için anahtar boyutunu belirler Property KeySize: Word; Keysize indexi oluşturan alanların sayısına ve tipine göre değişir. Byte cinsinden belirtilir. 35) -R- LOCALE BDE Dil sürücüsünü tablo öğesi için ayarlar. type TLocale: Pointer; Property DBLocale: TLocale; BDE ye direk bağlantı yapan uygulamalar API fonksiyon parametresi olarak Locale bilgisini göndermek zorunda olabilirler. Dil sürücüsü bilgisi tabloya sahip olan database öğesinin Params özelliğinde-ki bir değeri de olabilir. NOT: Bu fonksiyonu BDE fonksiyonel olarak standart Delphi öğeleri üzerinde etkili olamayana kadar kullanmayın. 36) RECNO Tablodaki aktif kaydı belirtir. Property RecNo: Longint; RecNo 'yu aktif kaydın tablodaki numarasını bulmak için kullanın. Uygulama-lar bu özelliği bütün kayıtlar arasında dolaşmak için kullanırlar. Böylece tipik kayıtlar arası dolaşım First ,Last ,Moveby, Next, ve Prior ile yapılır. NOT: Eğer erişim Paradox tablolarıyla yapılıyorsa Recno kursörü belirtilen özel bir kayıt numarasına ayarlanarak o kayıt üzerine konumlanabilir. 37) -R- RECORDCOUNT Tabloyla ilişkilendirilmiş toplam kayıt sayısını verir. Property RecordCount: Longint; Uygulamalar bunu kayıtlar arasında dolaşmak için kullanabilirler. Böylece tipik kayıtlar arası dolaşım First ,Last ,Moveby, Next, ve Prior ile yapılır. NOT : Bunu dikkatli kullanın çünkü kayıt saymak pahalı bir işlem olabilir .(Özeklikle geniş sonuç kümeleri döndüren SQL sorguları için ) Genelde bir uygulama bunu yalnız Dbase ve Paradox ile kullanmalıdır. Kayıtlar arasında dolaşmayı ve dolaştıkça progressbar'ı değiştirme işlemini gerçekleştiren bir örnek aşağıda verilmiştir. procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin with ProgressBar1 do begin Min := 0; Max := Table1.RecordCount; Table1.First; for i := Min to Max do begin Position := i; Table1.Next; end; end; end; 38) RECORDSIZE Tablo' daki bir kaydın boyutunu belirtir. Property RecordSize: Word; Recordsize 'ı Delphi bufferının tablodaki bir kaydı tutmak için byte olarak işgal ettiği yeri bulmak amacıyla kullanılır. Tablo açıldığında Open prosedürü DBE' den kayıt tampon bellek bilgisi ister ve gelen bilgiyi RecordSize da sak-lar. Delphi bu bilgiyi dahili olarak kullanır. Uygulamalar nadir de olsa bu bilgi-ye ihtiyaç duyarlarsa kullanırlar. Aktif Query ve tablodaki kayıtsayısını, kayıt boyutunu ,anahtar alan boyutu-nu,aktif kayıt numarasını gösteren bir program. procedure TForm1.FormCreate(Sender: TObject); begin Query1.open; Label2.caption:=inttostr(query1.recordcount); Label4.caption:=inttostr(query1.recno); Label6.caption:=ittostr(query1.recordsize); Label8.caption:=inttostr(query1.keysize); end; 39) UPDATEOBJECT Cached güncellemeler yapılabilir olduğunda yalnızca okunabilen sonuç kü-mesini güncellemek için kullanılan güncelleme nesne öğesini belirtir. type TDataSetUpdateObject = class(TComponent) Property UpdateObject: TdataSetUpdateObject BDE ,uygulama özellikle read-only bir veri görünümü istemedikçe ,güncellenebilir veya canlı sorgu sonucu ,sağlamaya çalışır. Bazı durumlarda mesela çoklu tablolar için bir sorgu hazırlandığında canlı sonuç seti döndürülemez. Bu durumlarda UpdateObject' i güncellemeleri uy-gulama için transparant olan ayrı transaction olarak güncelleme yapan TUpdateSQL öğesini belirtmek için kullanırız. 40) UPDATERECORDTYPES Cached güncellemeler aktif olduğunda tablodaki görünen kayıtların tiplerini belirtir. TUpdateRecordTypes=set of (rtModified, rtInserted, rtDeleted, rtUnmodified); Property UpdateRecordTypes: TUpdateRecordTypes; TupdateRecordTypes aşağıdaki değerleri Alabilen bir tiptir. Değer Anlamı rtModified değiştirilen kayıtlar görünür rtInserted eklenen kayıtlar görünür rtDeleted silinen kayıtlar görünür RtUnmodified değiştirilmemiş kayıtlar görünür Varsayılan değer olarak bütün bu küme içindeki kayıtlar görünür haldedir .Kayıtlar üzerinde işlem yapan bir uygulamada silinen kayıtların uzun bir süre sonra bile kurtarılabilmesi Updaterecordtypes' ın undelete metodu sayesinde olmaktadır. Bir uygulama aynı zamanda Updaterecordtypes ı kullanarak açık olan otu-rumdaki kayıtlar için bir filtreleme görevi yapar (ekle-nen,silinen,değiştirilen,değiştirilmeyenleri gösterme şeklinde) 41) -R- UPDATESPENDING Cache bellekte uygulanmaya hazır kayıt olup olmadığını belirtir. Property UpdatesPending: Boolean; Bu özelliği, cached updates buffer 'ın durumunu kontrol etmek için kullanın. Eğer true ise bu düzeltilen ,eklenen,silinen kayıtların olduğunu ve bunların güncellenecek olduğunu gösterir. Eğer False ise Cache' te hiçbir kayıt yok demektir TDATASET 'DEN GELEN ÖZELLİKLER 42) ACTIVE Tablonun açık olup olmayacağını belirler. Property Active: Boolean; Tablonun database ile olan bağlantısını ayarlamak için kullanılır. Active özel-liği False ise tablo kapalı yani veri tabanından okuma ve buraya yazma yapı-lamaz. Eğer true ise veri tabanına yazama ve buradan okuma yapılabilir. Active' i true yapmak : · BeforeOpen olay çağrısını yapar. · Dataset State özelliğini dsBrowse 'a ayarlar. · Tablo içinde bir kursör ayarlar. · Eğer tanımlandıysa AfterOpen olayını çalıştırır. Eğer tablo açıkken bir hata oluşursa dataset State dsInactive durumuna a-yarlanır ve kursör kapanır. NOT: Bir uygulama veri tabanının özelliklerini değiştirmeden önce Active' i False olarak ayarlamalıdır. Yoksa bu değişiklikleri yapamaz. Open metodunu çağırmak Active özelliğini true yapar. Close metodunu çağırmak Active özel-liğini False yapar. 43) AUTOCALCFIELDS OnCalcFields olayının nezaman tetikleneceğini belirler. Property AutoCalcFields: Boolean; Tablo işlemi boyunca hesaplanmış alanların güncellenmesi için OnCalcFields olayının çalıştırılıp çalıştırılmayacağını belirlemek amacıyla kullanın. Hesap-lanmış alan değeri tablodaki bir veya birden fazla alandan etkilenerek bazen de bazı ek işlemlere tabi kalarak oluşur. OnCalcFields true olduğunda -ki varsayılan budur- şu durumlarda çalıştırılır. · Tablo açık olduğunda · Tablo dsEdit durumunda olduğunda · Veriden -etkilenen ızgara kontrollerinde ki ( Aktiflik bir görsel kontrol-den diğerine veya bir sütundan diğerine hareket eder) ve değişikliklerin kayda yapıldığı durumlarda · Veri tabanından bir kayıt çağrıldığında OnCalcFields özelliğininin çağrılma sıklığını düşürmek için AutoCalcFields özelliğini False yapın . AutoCalcFields özelliği False olduğu zaman kayıtlarda bir değişiklik olduğunda OnCalcFields olayı çağrılmaya-caktır. Eğer bir uygulama verinin değiştirilmesine izin veriyorsa bu olay sıkça çağrılacaktır. Bu sıklığı azaltmak için Bu özellik False yapılır. 44) -R- BOF Kursörün tablo içinde , ilk kaydın başında olup olmadığını belirtir. Property BOF: Boolean; Bof true ise kursör kesinlikle tablonun ilk satırındadır. BOF aşağıdaki durum-larda true olur : · Tablo açılır, · Tablo in First metodu çağrılırsa , · Tablo 'in Prior (önceki) metodu çağrılır ve bu işlem başarısız olursa (çünkü kursör zaten ilk kayıttadır) · Boş bir kayıtta veya dizide SetRange çağrılırsa. Diğer tüm durumlarda BOF False 'tur. Bir uygulama yukarıdaki du-rumlar ve uygulamanın özelliği direkt test etmesi hariç BOF 'u False kabul etmelidirler. 45) BOOKMARK Tablodaki aktif yer imini belirler. type TBookmarkStr: string; Property Bookmark: TBookmarkStr; Tablodaki aktif yer imini ayarlamak veya çağırmak amacıyla kullanılır. İşaretleme sayesinde tablodaki bir yer işaretlenir ve daha sonra buraya kolayca ulaşılabilir. Bir uygulama aktif kayıtla alakalı işareti çağırmak için İşareti okuyabilir ve bu özelliğe sakanmış işaret değerini atayarak tablodaki istenen pozisyona ko-numlanılabilir. 46) CONSTRAINTS Dataset 'e yüklenen veriyi düzenlerken kullanılması gereken kayıt düzeyindeki sınırlamaları belirler. Property Constraints: TCheckConstraints; Constraint' i kayıt seviyesindeki sınırlamaları okumak veya eklemek için kullanın. Constraints özelliği TCheckConstraint nesnesinin indeksli toplamından oluşur. Bu kısıtlamalar tek bir kayıttaki alanlar arasındaki ilişki üzerine dayandırılarak yapılır. NOT : Bu özellik çift tıklatıldığında Editing Query1.Constraints penceresi ekrana gelir. ADD ile ekleme yapabiliriz. Properties' indeki Custom Constraint' e koşulları yaz. Error Message ise hata mesajını belirlemek için kullanılır. Şekil 6 (Query1.Constarints) 47) -R- DEFAULTFIELDS Tablonun temel alan öğelerinin tablo açıldığında dinamik olarak üretilip üre-tilmediğini belirler. Property DefaultFields Boolean; Veri tabanının dinamik alanlar mı yoksa kalıcı alanlar mı kullandığını belirler. Eğer DefaultFields True ise tablo dinamik olarak ayrılan alan öğelerini kullanır. Eğer False ise tablo kalıcı alan öğelerini kullanır. Tablo daima dizayn sırasında Fields Editör kullanılarak kalıcı alan öğeleri bir tabloya atanmadıkça, dinamik alan öğeleri tablo bunu kullanan veri tabanı tablo veya tablolarının yapısına dayanarak oluşturur. 48) -R- DESIGNER Tablo için table designer' a dizi sonu işareti koyar. Property Designer: TDataSetDesigner; Fields Editör gibi Tablo Dizaynırlar da dizayn sırasında programcıya tabloya bağlı alanları belirlemesine izin verirler. Tablo nesnelerinin torunları tablo dizaynır' a Designer özelliğini ayarlama ve getirmek için kullanılan metotları tekrar tanımlamak için kullanılırlar. dataset designer düzenlenmek için açıldığında Designer özelliği boş (nil) ayarlanır. Dataset designer geliştirmecilere dizayn aşamasında datasete ait olan alanları belirleme olanağı sağlar. 49) -R- EOF Kursörün tablonun sonuna konumlanıp konumlanamadığını belirtir. Property EOF: Boolean; Eof ( end of file) true ise kursör kesinlikle tablonun sonundadır. Eof aşağıdaki durumlarda true olur: · Boş bir tablo açıldığında, · Tablonun Last metodu çağrıldığında, · Tablonun Next metodu çağrıldığında ve bu işlem başarısız olduğunda · Boş bir dizi veya tablo üzerinde SetRange çağrıldığında , EOF diğer durumlarda False 'tur. Bir uygulama yukarıdaki durumlar ve uygulamanın özelliği direkt test etmesi hariç EOF 'u False kabul etmeliler. Eğer EOF ve BOF aynı anda true ise tablo veya dizi boştur. 50) FIELDCOUNT Tabloyla ilişkili alan öğelerinin sayısını belirtir. Property FieldCount: Integer; Dinamik olarak oluşturulan alanlara sahip tablolar her açıldığında FieldCount sayısı değişebilir. Kalıcı alanlara sahip tablolar için FieldCount tablo her açıl-dığında aynı değere sahip olmalıdır. 51) FIELDDEFS Tablo için alan tanımlama listesini işaret eder. property FieldDefs: TFieldDefs; Bir uygulama FieldDefs' i tablo için alan tanımlamalarını araştırmak amacıyla incelerken CreateTable ile yeni bir tablo oluşturmadıkça bu tanımlamaları değiştirmemelidirle FieldDefs öncelikli olarak Tdataset ve torunlarının diğer özellikleri, metotları ve olaylarında dahili olarak kullanmak için üretilmiştir. Tablodaki alanlara ve bunların değerlerine erişmek için Field ve FieldValues özelliklerini ve FieldsByName metodunu kullanın. Aşağıdaki örnek yeni bir tablonun nasıl oluşturulduğunu gösterir with Table1 do begin Active := False; { Table öğesi aktif olmalıdır } { İlk önce table tipini belirle ve buna bir isim ver} DatabaseName := 'DBDEMOS'; TableType := ttParadox; TableName := 'CustInfo'; { Tablodaki alanları tarif et} with FieldDefs do begin Clear; Add('Field1', ftInteger, 0, True); Add('Field2', ftString, 30, False); end; { Indexleri tanımla } with IndexDefs do begin Clear; { İlk indexin ismi yok çünkü bu Paradox primary key dir } Add('', 'Field1', [ixPrimary, ixUnique]); Add('Fld2Indx', 'Field2', [ixCaseInsensitive]); end; { Özellklerini belirlediğimiz tabloyu oluşturalım } CreateTable; end; 52) FIELDS Tablodaki tüm alan öğeleri için indeksli bir dizi sağlar. Property Fields[Index: Integer]: TField ; Alan öğelerine index numarasıyla erişmek için bunu kullanın. Fields 0 tabanlı bir dizidir. Eğer bu tablodaki alanlar dinamik olarak oluşturuluyorsa alan öğe-lerinin sırası tablodaki sütunların sırasına göre değişir. Eğer tablo sabit alan-lar kullanıyorsa alan öğelerinin sırası dizayn zamanında Fields Editörce belir-lenen sıradadır. Alanlara Fields özelliği ile ulaşmak aşağıdaki uygulamalar için kullanışlıdır: · Tablodaki bazı veya tüm alanlarda dolaşmak için · Çalışma anında yapıları bilinmeyen altı çizili tablolar için Eğer bir uygulama her alanın veri tipini biliyorsa bu alanlar Fields özelliğini kullanarak okuma-yazma yapabilir. Örneğin aşağıdaki satırlar Bir alanın de-ğerini editbox 'ın Text özelliğine atıyor. Edit1.Text := CustTable[6].AsString; Aşağıdaki ifade ise editbox' tan alana değer aktarır. CustTable.Edit; CustTable.Fields[6].AsString := Edit1.Text; CustTable.Post; NOT : Alan çağırma veya alanlara değer aktarma için tercih edilen metot FieldsByName metodudur veya bunların kalıcı alanlar için yapılmasıdır. 53) FIELDVALUES Tablodaki aktif kayıttaki tüm alanlardaki değerlerine erişmeyi sağlar. Property FieldValues[const FieldName: string]: Variant; Bu özellik tablodaki alanlara değer yazmak ve buralardan değer okumak için kullanılır. Fieldname yazılacak veya okunacak alandır ve tek tırnak içinde yazılmalıdır. FieldValues değişken alır ve gönderir bu yüzden her türden veri taşıyabilir ve çevirebilir. FieldValues TdataSet için varsayılan özellik olduğundan bu özel-liği referans ederken özellik adını atlayabilirsiniz. Örneğin aşağıdaki iki ifade aynı işi yapar: editbox ' taki değeri integer alana aktarır. Customers.FieldValues['CustNo'] := Edit1.Text; Customers['CustNo'] := Edit1.Text; Aşağıdaki ifade alandan bir string ifade okur ve editbox 'a atar Customers.Edit; Edit1.Text := Customers['Company']; Customers.Post; NOT : FieldValues her zaman değişkenleri kullandığı için ,özellikle büyük miktarda veri işleyen uygulamalarda ,veriye ulaşmak için alanın doğal formatını ( AsXXX özelliği) kullanmaktan daha yavaş bir yol olabilir. 54) -R- FOUND Başka bir kayda dallanma işleminin başarılı olup olmadığını belirtir. Property Found: Boolean; Bu özelliği FindFirst, FindLast, FindNext veya, FindPrior metotlarının başarılı olup olmadığını anlamak için kullanabilirsiniz. Eğer Found true ise işlem gerçekleştirildi . False ise başka bir kayda geçme işlemi gerçekleşemedi anlamı taşır. 55) -R- MODIFIED Aktif kaydın değiştirilip değiştirilmediğini belirtir. Property Modified: Boolean; Eğer true ise aktif kayıt değiştirilmiştir. NOT: Genelde Modified özelliğini kontrol etmek gereksizdir. Tdataset' in ve bunun torunlarının özellikleri, olayları ve metotları bunu otomatik olarak kont-rol ederler ve bunun değerine göre uygun davranışları gösterirler. 56) NAME Diğer öğelerce referans edilen dataset' in ismini verir. type TComponentName: string; Property Name: TComponentName; Name özelliğini dataset'in adını aktif uygulamadaki amacını yansıtmak için değiştirmede kullanın. Varsayılan olarak Delphi, öğenin tipine bağlı olarak öğelere sırasal numaralar verir :(table1,table2...) de olduğu gibi. Dataset ismi dizayn sırasında değişirse bu ismi ,alan isminin ön eki olarak kullanan alan öğeleri varsa bunlarda yapılan değişiklikten etkilenirler. 57) -R- STATE Dataset 'in aktif işletim modunu belirtir. type TDataSetState = (dsInactive, dsBrowse, dsEdit, dsInsert, dsSetKey, dsCalcFields,dsFilter, dsNewValue, dsOldValue, dsCurValue); Property State: TdataSetState; State tablodaki veri ile ne yapılabileceğini belirler. Var olan kayıtları düzeltme veya yeni bir tane ekleme gibi. Tablonun State özelliği ,uygulama veriyi iş-ledikçe sürekli değişir. Aşağıdaki liste State in alabileceği tüm değerleri ve bunların anlamını belirtir. Değer Anlamı DsInactive Tablo kapalı,yani kullanılamaz DsBrowse Data görülebilir ama değiştirilemez. Bu açık tablonun varsayılan durumudur DsEdit Aktif kayıt değiştirilebilir. DsInsert Yeni bir kayıt eklenebilir. DsSetkey Yalnızca Ttable . Kayıt aramak mümkün veya SetRange işlemi yapılabilir. Sınırlı veri kümesi görülebilir ama kayıt eklenemez veya düzeltilemez. DsCalcFields OnCalcFields olayı işlemektedir .Hesaplanmamış alanlar düzeltilemez ve yeni kayıtlar eklenemez. DsFilter OnfilterRecord olayı aktifse Hesaplanmamış a lanlar düzeltilemez ve yeni kayıtlar eklenemez. DsNewValue Tfield.NewValue özelliğine erişildiğini belirtmek için geçici durum dahili olarak kullanılır. DsOldValue Tfield.Old.Value özelliğine erişildiğini belirtmek için Geçici durum dahili olarak kullanılır. DsCurValue Tfield.Cur.Value özelliğine erişildiğini belirtmek için geçici durum dahili olarak kullanılır. Tablo açılınca State dsInactive 'den DsBrowse' a geçer. Bir uygulama Edit' i tabloyu edit moduna, Insert' ü dsInsert durumuna geçirmek için çağırabilir. Eğer tablo Ttable öğesi ise uygulama tabloyu DsSetKey durumuna getirmek için Setkey veya Setrange metotlarını çağırır. Düzenlemeleri kaydetmek veya iptal etmek,eklemeler veya silmeler yapmak State' i aktif durumundan DsBrows' a geçirir. Tabloyu kapatırsan State Dsinactive olur. Bazı durumlar ki(dsCalcFields, dsFilter, dsNewValue, dsOldValue, ve dsCurValue) bir uygulamaca direkt olarak değiştirilemeyen durumlardır. Bu durumlar OnCalcFields ve OnFilterRecord olayları oluştu-ğunda veya uygulama Tfield.XXXValue özelliğine eriştiğinde ortaya çıkar TCOMPONENT' DAN GELEN ÖZELLİKLER 58) -R- COMOBJECT ComObject COM 'u destekleyen öğelerce uygulanan arabirim referansını döndürür. property ComObject: IUnknown; Bu özellik COM arabirimini destekleyen VCL öğelerince kullanılır. Eğer öğe COM öğesini desteklemiyorsa ComObject EcomponentError hatasını üretir. 59) -R- COMPONENTCOUNT Öğe özellik listesinde listelendiği gibi bir öğenin sahip olduğu öğe sayısını belirtir. property ComponentCount: Integer; Bu özellik Delphi'de ilerleme işlemleri için dahili olarak kullanılır. Bu sayı Component indeks sayısından bir fazladır .Çünkü indeks 0 dan başlar. 60) COMPONENTINDEX ComponentIndex öğenin ,atasının öğe dizi özellik listesindeki yerini belirtir. property ComponentIndex: Integer; ComponentIndex isimler öğe listesi içinde sahip olunan öğeler üzerinde bazı işlemler yapmak için ilerlemeniz gerektiğinde kullanırız. Bu özellik dahili ola-rak kullanılır. Listedeki ilk öğenin indeks nosu 0 dır. İkincisi 1 ve ... Bu yüzden ComponentCount daima Componentindexin olabileceği maksi-mum rakamdan 1 fazladır 61) -R- COMPONENTSTATE ComponentState bazı belli işlemlerden sakınmak için öğenin o anki aktif ko-numunu belirtir. type TComponentState = set of (csLoading, csReading, csWriting, csDestroying, csDesigning, csAncestor, csUpdating, csFixups); property ComponentState: TComponentState; Component 'lar bu özelliği belli işlemlerin yapılmasına izin verip vermemek için belirleyici olarak kullanırlar. Örneğin eğer bir öğe çalışma esnasında iş-lenecek ama dizayn esnasında bazı işlemlerin gerçekleşmemesini istiyorsa csDesigning bayrağını kontrol edebilir. Bu özellik değiştirilemez ve her bir bayrağı çeşitli metotlarca otomatik olarak ayarlanır. TcomponentState tipi ComponentState özelliği için var olan durumları belirtir. BAYRAK Öğe durumu CsAncestor CsDesigning aktifse ve öğe bir ata formunda tanıtıldıysa kullanın CsDesigning Öğenin Form Designerca işlenmekte olduğu durumdur CsDestroying öğenin değiştirilmekte olduğu CsFixups Daha yüklenmemiş başka bir formdaki öğeye bağlantı yapıldıysa .Bu özellik bütün kararlaştırılmış fixuplar yeniden çözüldüğünde sıfırlanır. CsLoading Filer nesnesinden yükleniyor. CsReading Özelliklerini akışından okuyorsa CsUpdating Değişiklikleri ata forma yansıtmak için öğe güncelleniyor sa . Bu csAncestor aktif edildiyse aktif edilir. CsWriting Özellik değerlerini akışa yazıyorsa 62) -R- COMPONENTSTYLE Öğenin hareketlerini yöneten stil için bir bayrak aktif eder. type TComponentStyle = set of (csInheritable, csCheckPropAvail); property ComponentStyle: TComponentStyle; Bu tip ComponentStyle için bir dizi değer tanımlar. 63) DESIGNINFO Form Dizaynır'ca kullanılan bilgiyi taşır property DesignInfo: Longint; Delphi çevre birimlerince dahili olarak kullanılır. Bu özelliği uygulamalarda kullanmayınız. 64) -R- OWNER Bu öğenin sahibinin hangi nene olduğunu belirtir. property Owner: TComponent; Bir öğe diğerince sahiplendiği zaman sahiplenen öğe için ayrılan hafıza ser-best bırakıldığında , bu nesne için ayrılan hafıza da serbest bırakılır. Bu bir form düzenleneceği zaman bütün öğelerinin düzenlenme moduna geçtiği anlamına gelir. Delphi de form üzerindeki her şey o forma aittir. İlkönce form application'a aittir. Uygulama için ayrılan hafıza serbest olduğunda form ve aynı zamanda bu form üzerindeki elemanlar için ayrılan hafıza serbest bırakılmış olur. Öğenin sahibi öğe yapılandırıldığı zaman Create metoduyla verilen paramet-rece belirlenir. Delphi Form Designerca oluşturulan öğelerin sahibi otomatik olarak yapıya geçirilir. LABEL1.Caption:=QUERY1.Owner.ClassName; LABEL2.Caption:=QUERY1.Owner.Name 65) TAG Tag öğenin bir parçası olarak bir sayısal (integer) değer saklar. property Tag: Longint; Tag'ın önceden tanımlanan bir anlamı yoktur. Bu uygulamada özel istek üze-rine bir pointer değeri veya bir sayısal değer saklamak amacıyla kullanılır. Programlamada kullanıcıya kolaylık sağlar. Mesela case durumlarında bunu kullanabilirsiniz. 66) VCLCOMOBJECT COM destekleyen öğelerce dahili olarak kullanılır. property VCLComObject: Pointer VCLCOM öğelerince işlenen arabirimlere erişmek için kullanın. BÖLÜM 5 TQUERY METOTLARI TQUERY Create Destroy ExecSQL ParamByName Prepare UnPrepare TDBTABLO 'DAN GELEN CheckOpen CloseDatabase OpenDatabase TBDETABLO 'DAN GELEN ApplyUpdates BookmarkValid Cancel CancelUpdates CommitUpdates CompareBookmarks ConstraintCallBack DisableConstraints EnableConstraints FetchAll GetCurrentRecord GetIndexInfo Locate Lookup RevertRecord UpdateStatus TDataset' den Gelen ActiveBuffer Append AppendRecord CheckBrowseMode ClearFields Close ControlsDisabled CursorPosChanged Delete DisableControls Edit EnableControls FieldByName FindField FindFirst FindLast FindNext FindPrior First FreeBookmark GetBookmark GetFieldList GetFieldNames GotoBookmark Insert InsertRecord IsEmpty IsLinkedTo Last MoveBy Next Open Post Prior Refresh Resync SetFields Translate UpdateCursorPos UpdateRecord TComponent'dan Gelen DestroyComponents Destroying FindComponent FreeNotification FreeOnRelease GetParentComponent HasParent InsertComponent RemoveComponent SafeCallException TPersistent' dan Gelen Assign GetNamePath ClassInfo' dan Gelen ClassName ClassNameIs ClassParent ClassType CleanupInstance DefaultHandler Dispatch FieldAddress Free FreeInstance GetInterface GetInterfaceEntry GetInterfaceTable InheritsFrom InitInstance InstanceSize MethodAddress MethodName NewInstance TQuery Metotları 1) CREATE Örnek bir query öğesi oluşturur. constructor Create(AOwner: TComponent); Bu çağrı boş bir SQL ifade listesi oluşturur. SQL durum listesi için Onchange olay durumunu ayarlar. Data link (veri bağlantısını ) kurar. Requestlive özelli-ğini False yapar, ParamCheck özelliğini true yapar ve RowsAffected 'ı -1 yapar. 2) DESTROY Query durumunu düzenler. destructor Destroy; Destroy çağrısını direk olarak çağırır. Bundan önce Free çağrısını yapın ve query'nin daha önceden serbest bırakılmadığından emin olun .Destroy serverdan bağlantıyı keser, SQL ifadesini, parametre listesini,veri bağlantısını, SQL ikili saklama bölgesini temizler ve kendisinin kalıtsal Destroy işlemini başlatır. 3) EXECSQL Query için SQL ifadesini çalıştırtır. procedure ExecSQL; Execsql' i INSERT,DELETE,UPDATE çağrılarını yapmak için kullanın. Aynı zamanda veri tanımlama durumlarını çalıştırmak için de kullanılır NOT: Select ifadelerinde Execsql yerine Open 'ı kullanın. Execsql eğer SQL hazırlanmadıysa SQL' in çalıştırılması için SQL ifadesi oluşturur. Hız artırmak için ExecSQL ilk defa çağrıldığında , bundan önce Prepare çağrısı kullanılmalıdır. Örnek: Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('Delete from Country where Name = ''Argentina'''); Query1.ExecSQL; 4) PARAMBYNAME Özel parametre ismine dayanan parametre bilgisine ulaşır. function ParamByName(const Value: string): TParam; Value getirilecek bilginin parametre ismidir. ParamByName parametrenin değerini çalışma anında değiştirmek için kullanılır. Örneğin aşağıdaki ifade Soyad adı verilen parametredeki aktif değeri bir edit kutusuna alır. Edit1.Text := Query1.ParamByName(' Soyad ').AsString; Select ifadelerinde parametreler boş olamaz fakat Update ve Insert ifadelerinde boş olabilir. Örnek2 var Buffer: Pointer; { Custno alanının hafızada tutabilmek için gerekli yer ayır} GetMem(Buffer, Query1.ParamByName('CustNo').GetDataSize); { Datayı al } Query1.ParamByName('CustNo').GetData(Buffer); 5) PREPARE BDE' ye ve sunucuya yürütme öncesi optimizasyon için bir sorgu gönderir. procedure Prepare; Prepare' ı BDE' ye sahip olmak için ve uzak veri tabanı sunucusunu sorgu için kaynaklarını yerleştirmesi ve ek optimizasyonlar gerçekleştirmesini sağ-lamak için kullan. Prepare' ı uygulamadan önce çalıştırmak performansı artı-rır. Sorgu işi bitince Unprepare yapmak iyi olur. NOT: Bir sorgunun yazısını çalışma anında değiştirirsen sorgu otomatikman kapanır ve UnPrepare yapılır. Örnek: if not Query1.Prepared then begin Query1.Close; Query1.Prepare; Query1.Open end; 6) UNPREPARE Daha önceden hazırlanan sorgu için ayrılan kaynakları boşaltır. procedure UnPrepare; UnPrepare metodunu ,server ve client lardaki daha önceden hazırlanan sor-gular için ayrılan kaynakları serbest bırakmak amacıyla çağırın. Query met-nini çalışma anında değiştirirseniz query otomatik olarak kapanır ve Unprepare metodu çağrılır. TDBDataSet' den Gelen Metotlar 7) CHECKOPEN Borland Database Engine (BDE) çağrısının sonucunu kontrol eder. function CheckOpen(Status: DBIResult): Boolean; CheckOpen' ı bir BDE çağrısının tabloya erişmek isterken hata döndürüp döndürmediğini belirlemekte kullanın. Durum bir önceki çağrının dönüş sonu-cudur. Eğer erişim başarılıysa true döner. Eğer durum Paradox tablosuna erişmek için yeterli haklara sahip olunmadığını belirtiyorsa CheckOpen veri tabanı oturumunun GetPassword moduyla kullanıcıya şifreyi girmesini ister. Eğer doğru şifre girilirse sonuç true olur. Diğer durumlarda tablo erişim işle-minin başarılamadığını belirten False görünür 8) CLOSEDATABASE Veri tabanı oturumu ile ilişkilendirilen veri tabanı bağlantısını keser. procedure CloseDatabase(Database: TDatabase); Bu metodu kalıcı veya geçici veri tabanı bağlantısını kesmede kullanılır. Bu çağrı veri tabanı öğe referans sayısını azaltır ve bu sayı 0 olursa ve veri ta-banı öğesinin KeepConnection özelliği False ise bu çağrı hem geçici hem de kalıcı veri tabanı öğelerin ilişkisini keser. NOT: Kalıcı veri tabanı için bu metot çağrıldığında bağlantı kesilmez bunun için veri tabanı öğesinin Close metodunu direk olarak çalıştırmak gerekir. Geçici veri tabanı öğeleri veri tabanıyla ilişkilendirilen son tablo kapandığında otomatik olarak kapanır. Fakat bir uygulama bu işi daha erken yapmak iste-yebilir. Eğer oturumun KeepConnections özelliği true ise (Varsayılan budur) geçici veri tabanı öğesiyle kurulan bağlantı bu çağrıyla kapanmaz. Veri ta-banı öğesini serbest bırakmak için bağlantılarını kapattıktan sonra oturumun DropConnections metodunu çağır. 9) OPENDATABASE Tablo içeren veri tabanını açar. function OpenDatabase: TDatabase; OpenDatabase' i tablo içeren veri tabanına bağlanmak veya geçici veri taba-nı öğesi oluşturup veri tabanına bağlamak için kullanınız. DatabaseName özelliği açılacak veri tabanını belirtir. OpenDatabase şu anki oturumu aktif yapar. DatabaseName özelliğinin var olan veri tabanı öğesinin özelliklerine uyup uymadığına bakar. Uymuyorsa OpenDatabase geçici veri tabanı öğesi oluşturur. Bunu da DatabaseName parametresini DatabaseName özelliğine atayarak yapar. Sonunda OpenDatabase veri tabanının Open metodunu veri tabanı sunucusuna bağlanmak için çağırır. Daha sonra oturumun veri tabanı referans sayısını bir artırır. TBDEDATASET' DEN GELEN METOTLAR 10) APPLYUPDATES Cache bellekteki tablo bilgilerini veri tabanına yazar. procedure ApplyUpdates; Bu metotla cache bellekteki bilgiler saklanmak amacıyla veri tabanına alınır ama değişiklikler veri tabanına işlenmez . Uygulama açık bir şekilde veri ta-banı öğelerinin Commit metodunu ,eğer yazma başarılıysa ,onaylamak için çağırmalıdır. Veya veri tabanının Rollback metodunu eğer hata varsa, geri almak amacıyla kullanınız. Veri tabanına başarılı bir yazma işleminden ve veri tabanının Commit meto-duna yapılan başarılı bir çağrıdan sonra uygulama CommitUpdates metodu-nu cachelenmiş tampon belleğini temizlemek amacıyla çağırmalıdır. NOT: Her bir tablonun ApplyUpdates metodunu çağırmaktansa veri tabanı öğesinin ApplyUpdates metodunu çalıştırmak daha doğru bir iş olacaktır. Veri tabanının ApplyUpdates metodu değişiklikleri onaylama veya transferleri geri alma işlemlerini otomatik yaptığı gibi işlem tamamlanınca cache belleği değişken temizler. StartTransaction, ApplyUpdates, Commit, Rollback Örneği Aşağıdaki prosedür bir tuş ile nasıl tablonun değişikliklerinin kaydedileceğini gösterir. procedure ApplyButtonClick(Sender: TObject); begin with CustomerQuery do begin Database1.StartTransaction; try ApplyUpdates; {database'e değişiklikleri yaz}; Database1.Commit; {hata yoksa onayla }; except Database1.Rollback; {hata varsa değişiklikleri geri al}; raise; {hata durumu oluştur} end; CommitUpdates; {Başarı durumunda cache'i temizle} end; end; 11) BOOKMARKVALID Belirtilmiş yer iminin geçerliliğini test eder. type TBookmark = Pointer; function BookmarkValid(Bookmark: TBookmark): Boolean; override; Belirtilen yeriminin doğru bir değere atanıp atanmadığını kontrol etmek için kullanılır. Bookmark test edilecek yer iminin ismidir. BookmarkValid yerimi doğruysa true , aksi halde False döndürür. 12) CANCEL Eğer aktif kayıt kaydedilmediyse yapılan düzenlemeleri iptal eder. procedure Cancel; Cancel kaydı önceki konumuna döndürür ve tablo durumunu dsBrowse' a getirir. Bu metot o alana illegal veri girildiğinde veya kullanıcı istediği zaman çağrılır. Örneğin TDBNavigator bir Cancel düğmesi içerir. Aşağıdaki örnek kullanıcıya değişiklikleri onaylamasını isteyen bir diyalog görüntüler .Kullanıcı Yes' e basarsa değişiklikler kaydedilecek yoksa iptal edilecek. if MessageDlg('Update Record?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then Table1.Post else Table1.Cancel; 13) CANCELUPDATES Cache' teki tablonun güncellenmiş haline ait verileri siler ve tabloyu eski ko-numuna döndürür. procedure CancelUpdates; Tablo kapandıysa veya CachedUpdates özelliği False ayarlandıysa CancelUpdates otomatik olarak çağrılır. NOT: Tek bir kaydı geri almak için RevertRecord 'u kullanın. 14) COMMITUPDATES Cache'teki güncellenmiş tampon belleği temizler procedure CommitUpdates; CommitUpdates 'i ApplyUpdates' i başarıyla uyguladıktan sonra ve veri ta-banı öğelerinin Commit metodundan sonra tampon belleği temizlemek için kullanın. Güncellemeleri yaptıktan sonra cache belleği temizlemek demek cache'in boşalacağını şu surumlar hariç garanti eder: işlenemeyecek kayıtlar ve OnUpdate Record ve OnUpdateErrror durum kontrolcülerince atlanan kayıtlar . Bir uygulama kayıtları cache' teyken bile değiştirmeye çalışabilir . CommitUpdates' ten sonra yapılan kayıt düzenlemeleri cached update bufferını tekrar kullanılabilir hale getirir ve yapılan değişikliklerin veri tabanına kaydedilmesi için bir alt çağrıya ihtiyaç duyar. 15) COMPAREBOOKMARKS İki bookmark arasındaki ilişkiyi belirler. Type TBookmark = Pointer; function CompareBookmarks(Bookmark1, Bookmark2: TBookmark): Integer; İki bookmark'ın aynı olup olmadığını belirlemek için kullanın. Eğer bookmarklar farklı ise 1 döndürür, aynıysa veya ikisi de boş ise 0 döndürür. 16) CONSTRAINTCALLBACK ConstraintCallBack tablonun BDE sabit katmanıyla ilişki kurmasına izin ve-ren bir geri çağrım fonksiyonudur. function ConstraintCallBack(Req: DsInfoReq; var ADataSources: DataSources): DBIResult; stdcall; Bazı BDE fonksiyonları tabloda veya kendi alanındaki sabitler hakkında bilgi sağlanması için bir ger çağrıma ihtiyaç duyarlar. ConstraintCallBack' in adre-sini bu fonksiyonlara direk API çağrısı yaparken parametre olarak kullanın. 17) DISABLECONSTRAINTS Tablodaki sunucu sabitlerinin uygulamalarını pasif yapar. procedure DisableConstraints; Sunucu sabit uygulamalarının geçici kaynakta yer işgal etmesini engellemek için kullanırız. Uygulama tablo içinde ilerlerken sabitleri geçici olarak pasif yaparak performansı artırır. NOT: DisableConstraints' i çağırmak referans sayısını artırır. Referans sa-yısı 0 dan fazla olduğu sürece tablo için sabitler pasif yapılır. Sabitleri yanlış-lıkla pasif yapmamak için çağrılarınızı gruplandırın. 18) ENABLECONSTRAINTS Tablo girişleri için sunucu sabit uygulamalarını aktif eder. procedure EnableConstraints; Bu çağrıyı daha önceden DisableConstraints ile pasif edilen uygulama sunu-cu sabitlerini aktif etmek için kullanın. NOT: Bu çağrıyı kullanmak referans sayısını azaltır. Bu referans sayısı 0 ise tablo için sabitler aktif olur. Sabitleri yanlışlıkla pasifleştirmemek için bunu kullanın. 19) FETCHALL Aktif kursörün olduğu pozisyondan itibaren dosyanın sonuna kadar olan tüm kayıtları getirir ve onları yerel olarak saklar. procedure FetchAll; Cachelenmiş güncellemeleri kullanırken network trafiğini düşürmek için kulla-nın. FetchAll ChecekBrowseMod' u yapılan değişiklikleri kaydetmek için kul-lanır. Sonra kursörün bulunduğu yerden itibaren tüm kayıtları çağırır ve sak-lar. Genellikle cache güncellenmeler aktif edildiklerinde görüntülenecek bilgi ka-dar veri çağrılır. her yeni getirme olayı yalnızca okunabilir bir transaction başlatır. Transferleri sağlamlaştırmak ve network trafiğini azaltmak için uy-gulama fetchall çağrısını kullanır. NOT: Bu çağrıyı yapmak network ortamında aynı anda birden fazla kullanı-cının aynı kayda ulaşmaya çalışması ve değişiklik yapmak istemesi yüzün-den güvenilirlik ve kullanışlılık açısından sakıncalıdır. 20) GETCURRENTRECORD Aktif kaydı tampon belleğe çağırır. function GetCurrentRecord(Buffer: PChar): Boolean; Çoğu uygulamalar .GetCurrentRecord a ihtiyaç duymazlar. Ttable otomatik olarak aktif kaydı belleğe yerleştirir. Buffer en az RecordSize ile belirtilen bo-yut kadar olmalıdır. 21) GETINDEXINFO Tablonun indeks veri alanlarına aktif indeks hakkındaki bilgileri çağırır . procedure GetIndexInfo; GetIndexInfo 'yu aktif indeks hakkındaki bilgiyi güncelleştirmek için çağır. Genellikle bir uygulama bu çağrıya ihtiyaç duymaz. Bazı uygulamalar yinede kullanmaları gerekir. GetIndexInfo BDE 'yi şu bilgileri de içererek sorgular. Aktif indeks bir Dbase indeksimi? indeks büyük-küçük harf duyarlı mı ? , İn-deksi oluşturan alan sayısı , İndeks için alan haritası , İndeks anahtarının boyutu. İndeks eğer Dbase indeksi ise alan sayısı ve alan haritası çağrılmaz. 22) LOCATE Tablo içinde özel bir kaydı arar ve onu aktif kaydı arar. type TLocateOption = (loCaseInsensitive, loPartialKey); TLocateOptions = set of TLocateOption; function Locate(const KeyFields: string; const KeyValues: Variant; Options: TLocateOptions): Boolean; Anahtar alan bir string olup virgülle ayrılmış aranacak isimlerin bulunduğu bir alanı içerir. Anahtar değer anahtar alandaki değerlerle eşleşen farklı bir dizi-dir. Çoklu arama değeri belirtebilmek için anahtar değeri değişken dizisi ola-rak giriniz. Vararrayof komutuyla dizi yapısı oluşturulur. with CustTable do Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver', 'P']), [loPartialKey]); Options ek arama seçenekleri sunan bir dizidir. Eğer Options IoCaseInsentive ayarlar içeriyorsa Locate büyük harf ayarına uymayanları atlar. Eğer Options IoPartialKey ayarlarını içeriyorsa Locate verilen anah-tarın belli bir kısmına uyan ilk kayda konumlanır. Eeğer Options boş bir set ise veya anahtar alan string alan değilse Options atlanır. Locate aranılan kaydı bulursa true döndürür ve onu aktif kayıt yapar. Diğer hallerde Locate False döndürür.Locate eşlenen kayda ulaşmak için en hızlı metodu kullanır. Eğer indeks varsa ve aranılan değer de bu indeks alanıyla aynıysa Locate indeksi kullanır. Yoksa Locate arama için filtre üretir. 23) LOOKUP Arama değerlerine eşit olan kayıtlardaki değerleri getirir. function Lookup(const KeyFields: string ; const KeyValues: Variant; const ResultFields: string): Variant; Lookup 'ı belirlenmiş alanlara arama kriterine eşit olan kayıtlardan değerler getirmek için kullanın. Anahtar alan virgülle ayrılmış aranacak olan alan isim-lerinin listesidir. Çoklu arama değerleri belirtebilmek için KeyValues' ü değiş-ken dizisi olarak , argüman olarak girin. 24) REVERTRECORD Cached güncellemeler aktif olduğunda aktif kaydı unmodified durumuna ye-niden yükler. Procedure RevertRecord; Bunu yapılan değişiklikleri geri almak için kullanın. Yalnız cached güncellemeler aktif olduğu zaman yapın. NOT: Cache teki bütün değişiklikleri iptal etmek için CancelUpdates' i çağı-rın. Örnek : Cachelenmiş güncellemeler enable olduğunda silinen kayıtları kur-tarmayı gösteren bir örnek program. procedure UndeleteAll(DataSet: TDataSet); begin with DataSet do begin UpdateRecordTypes := [rtDeleted]; {sadece silinen kayıtlar görünür olacak } try First; while not EOF do begin RevertRecord; {aktif kaydı kurtar} Next; end; finally UpdateRecordTypes := [rtModified, rtInserted, rtUnmodified]; end; end; end; 25) UPDATESTATUS Tablonun aktif güncelleme durumunu rapor eder. type UpdateStatus = (usUnmodified, usModified, usInserted, usDeleted); function UpdateStatus: TUpdateStatus; Update durumu kayıtlar düzeltildikçe, eklendikçe, silindikçe sık sık değişir. UpdateStatus metodunun geri dönüş değerlerinden bazıları şunlardır. UsUnmodified Kayıt değiştirilmemiş UsModified Kayıt değiştirilmiş UsInserted Kayıt eklenmiş UsDeleted Kayıt silinmiş. TDATASET' den Gelen Metotlar 26) ACTIVEBUFFER Aktif kayıt için tampona pointer döndür . function ActiveBuffer: PChar; ActiveBuffer ın , aktif kaydın bufferına işaret ettiğiden emin olmak için tablo yöntemleri tarafından dahili olarak kullanılır . Eğer uygulama , varolan tablo yöntemlerini kullanırsa , aktif tampon her zaman, true olarak ayarlanılır . Bundan dolayı ActiveBuffer' ı doğrudan çağırmaya genellikle gerek yoktur . Aynı zamanda ActiveBuffer yer imi metotlarınca yerimi bilgisini getirmek için kullanılır. Özel tablo yöntemleri gerektiren uygulamalar tampon veriye erişmek için ActiveBuffer' ı çağırırlar. Özellikle veri tabanındaki kayıtlar arasında ilerlerken bu daha çok lazımdır. Bu durumlarda bile eğer özel yöntemler Next , Prior gibi metotları çağırırsalar aktif tampon otomatik olarak ayarlanır. 27) APPEND Tablonun sonuna yeni , boş kayıt ekler . Procedure Append; Append' i şunlar için kullanın. 1) Tablonun sonunda yeni , boş kayıt açmak , 2) Yeni kaydı aktif kayıt olarak ayarlamak, Append çağrısı yapıldıktan sonra uygulama kayda veri girebilir ve bunları post çağrısıyla kaydedebilir. Yenice eklenen kayıt , aşağıdaki üç yolun biriy-le veri tabanına kaydedilir . a) İndekslenmiş paradox ve dbase tabloları için kayıt , dizinine dayanılan konumda tablo içine eklenir . b) Indekslenmemiş paradoxu ve dbase tabloları İçin , kayıt , tablonun sonu-na eklenilir . c) Sql veri tabanları için , eklemenin fiziksel yerleşimi özel yapılır. d) İndekslenmiş tablolar için , dizin , yeni kayıt bilgisi ile güncelleştirilir . Örnek : Bu örnek butona tıklandığında yeni bir kayıt ekler. Alfanumeric ve integer adlıiki alan iki edit kutusundaki değerce doldurulur. procedure TForm1.Button1Click(Sender: TObject); begin Table1.Append; Table1.FieldValues['ALPHANUMERIC'] := Edit1.text; Table1.FieldValues['INTEGER'] := StrToInt(Edit2.text); Table1.Post; end; 28) APPENDRECORD Veri tabanının sonuna yeni bir kayıt ekler. procedure AppendRecord(const Values: array of const); Tablonun sonunda yeni , boş kayıt oluşturmak için AppendRecord' u çağırır ve veri tabanına değerleri kaydeder . Yeni eklenilen kayıt , aşağıdaki üç yo-lun biriyle veri tabanına kaydedilir . İndekslenmiş Paradox ve Dbase tabloları için , kayıt , onun dizinine daya-nan konumda tablo içinde araya eklenilir . İndekslenmemiş Paradoxu ve Dbase tabloları İçin , kayıt , tablonun sonuna eklenilir . Sql veri tabanları için , eklemenin fiziksel yerleşimi özel yapılır. . İndekslenmiş tablolar için , dizin , yeni kayıt bilgisi ile güncelleştirilir . Yeni eklenilen kayıt , aktif kayıttır . Örnek: Customer.AppendRecord([CustNoEdit.Text,CoNameEdit.Text, AddrEdit.Text, Null, Null, Null, Null, Null, Null, DiscountEdit.Text]); NOT : Eğer dizinin sonunda belli bir değer yoksa Null yazmana gerek yoktur. Burada en son eleman DiscountEdit.Text olduğu için aradakileri Null ile be-lirtmemiz gerekir. 29) CHECKBROWSEMODE Uygulama aktif kaydı değiştiren bir metodu çağırdığında otomatik olarak değişiklikleri kaydeder veya iptal eder. Procedure CheckBrowseMode; Tablonun durumu , dsEdit , dsInsert veya dsEetkey durumu olduğunda ve başka bir kayda bağlanan bir metot çağrıldığında CheckBrowseMode , aktif kayıtta yapılan değişikliklerin veri tabanına kaydedildiğinden emin olmak için bir çok tablo yöntemlerinin tarafından dahili olarak kullanılır . Eğer du-rum , dsEdit veya dsInsert olsa , CheckBrowseMode , UpdateRecord 'u çağırır ve sonra , eğer tablo için değiştirilmiş özellik , true olursa , CheckBrowseMode, Post' u çağırır . Modified False ise CheckBrowseMode Cancel' ı çağırır. Eğer durum , dsSetkey olsa , CheckBrowseMode, Post' u çağırır . Eğer durum , dsInactive olursa , CheckBrowseMode, kural dışı durumu or-taya çıkarır. Eğer uygulama var olan tablo yöntemlerinden birini kullanıyorsa CheckBrowseMode yalnızca ihtiyaç duyulduğunda çağrılır. Bu yüzden genel-likle bunu direk olarak çağırmak gerekmez. Özel tablo yöntemlerini gerekti-ren uygulamalar CheckBrowseMode' u başka bir kayda geçildiğinde deği-şikliklerin kaydedilip kaydedilmediğinden emin olmak için kullanırlar. 30) CLEARFIELDS Aktif kayıt için bütün alanların içindekilerini temizler . procedure ClearFields; Aktif kayıt için bütün alanların aktif içeriklerini silmek amacıyla ClearFieldsi çağır . Eğer tablo ne dsInsert ne de dsEdit durumunda ise ClearFields bir istisna durumu çıkarır. Diğer hallerde DataEvent durum ayarlayıcısını CheckBrowseMode' u çağırmak için kullanır. Sonra kayıttaki tüm alanları te-mizleyerek işe başlar. Eğer Setkey işlemi yapılmamışsa ClearFields tüm he-saplanmış alanları tekrar hesaplamak zorunda kalacaktır. Aynı zamanda DataEvent denetimciyi kaydın değiştiğini bildiren bir parametre ile çağırır. . Dönüşte , Data Event denetimcisi , tablo ile ilgili veri kaynağı bileşeni için ondatachange olay denetimcisini çağırır . 31) CLOSE Tabloyu kapatır . Procedure Close ; Tablonun Active özelliğini false ayarlamak için Close' u çağır . Active , False olduğunda tablo, kapatılır. Tablo , veriyi okuyamaz veya veri taba-nına veriyi yazamaz . Uygulamada veriyi gösteren veri tabanı veya dene-timlerin durumunu etkileyen diğer özellikler değişmeden önce uygulama , Active' i false ayarlamalı . Örneğin , DataSource' un tablo özelliğini değiş-tirmeden önce Active false ayarlanmalı ki bu işlem yapılabilsin. Active' i false ayarlamak tabloyu dsinactive durumuna koyar ve BDE imlecini kapatır. 32) CONTROLSDISABLED Data-aware denetimlerinde gösterilen güncellenen verinin tablo için pasif-leştirilip pasifleştirilmediğini belirler. Function controlsdisabled: boolean; Eğer ControlsDisabled , true ise , denetimler , o anda pasifleştirilirler. Controlsdisabled referans sayısı- ki bu tablonun pasifleşme izlerini tutar- 0 dan büyük olduğu sürece true 'dur. Bu sayı DisableControls çağrıldıkça artar. Uygulamalar DisableControls 'u performansı artırmak ve çok sayıda kayıt içeren tablolar arasında dolaşırken sabit görüntü güncellemesini engellemek için çağırmalıdırlar. Kompleks uygulamalarda kontroller zaman zaman pasif-leşebilir bu durumu kontrol edip etkinleştirmek için ControlsDisabled kullanılır Örnek: procedure ReEnableControls (TABLE: TDATASET); begin while TABLE.ControlsDisabled do TABLE.EnableControls; end; 33) CURSORPOSCHANGED Tabloda imleç konumunu -1 e ayarlar procedure CursorPosChanged; Curposchanged , mantıksal imleç konumu ile ilgili fiziksel imleç konumu ta-rayan değişkeni geçersiz kılan iç yöntemdir . Curposchanged istenilen kayıt için Locate ve Lookup metotlarından önce çağrılır. Bu metotlar eğer başarılı olursa imleci aranana uyan ilk kayda konumlandırır. 34) DELETE Aktif kaydı siler ve , sonraki kayıta imleci konumlar . Procedure Delete ; Delete' i aktif kaydı veri tabanından silmek için kullanın. Tablo pasifse Delete bir istisna ortaya çıkarır. Diğer hallerde tablonun boş olmadığını onaylar CheckbrowseMode çağırarak yapılan değişiklikleri kaydeder. BeforeDelete olay denetimcisini tetikler kaydı siler. Kayıt için ayrılan hafızayı serbest bıra-kır. Tabloyu dsBrowse moduna sokar .Kursörü bir sonraki kayda konumlar . AfterDelete denetimcisini tetikler. 35) DISABLECONTROLS Veri kaynağı bileşeni içinden tablo ile ilgili data-aware denetiminde gösterilen veriyi geçersizleştirir . Procedure Disablecontrols ; Tabloda çok miktardaki kayıtların içinden önce data-aware denetiminde veri gösterilmesini önlemek için disablecontrols' u çağır . Kayıtlar arsında hızla ilerlerken bunları ekranda göstermeye gerek yoktur. Bunu da bu komutla ya-parız. Eğer kontroller pasifleştirilmemişse disablecontrols tablonun durumunu kay-deder. Pasif değişken sayısını bir artırır. Aktif denetimcisi ve pasif değişken sayısı diğer metotlarca dahili olarak veriyi objelere yansıtıp yansıtılmayaca-ğını belirlemek için kullanırlar. Pasif değişken sayısı 0 dan büyükse veri gös-terilmez. Denetimler , zaten geçersizleştirildiğinde disablecontrols , emniyet-le çağırılabilir . Kompleks uygulamalarda farklı işlemler olabilir. Örnek: with CustTable do begin DisableControls; try First; while not EOF do begin { Her kaydı burada işle } . . . Next; end; finally EnableControls; end; 36) EDIT Tabloda verinin biçimlemesini mümkün kılar . Procedure Edit ; Edit' i aktif kaydı düzenlemeye olanak vermek için çağır. Edit tablonun aktif durumunu belirler. Tablo boş ise Edit Insert 'ü çağırır. Yoksa Edit; CheckBrowseMode' u herhangi bir değişiklik olduğunda kaydetmek için çağı-rırlar. BeforeEdit denetimcisini tetikler . Kaydı getirir. Tabloyu dsEdit durumu-na getirir. Uygulamaya veya kullanıcıya kayıttaki alanları düzenleme imkanı verir. Kayıt değiştirme denetimcisini tetikler. AfterEdit olay denetimcisini tetik-ler. Örnek: Procedure TForm1.Button1Click(Sender: TObject); var Stream1, Stream2 : TBlobStream; begin Stream1 := TBlobStream.Create(Table1Notes, bmRead); try Table2.Edit; { Aşağıda bloab akışı oluşturmanın diğer bir yolu } Stream2 := Table2.CreateBlobStream(Table2.FieldByName('Remarks'), bmReadWrite); try Stream2.CopyFrom(Stream1, Stream1.Size); Table2.Post; finally Stream2.Free; end; finally Stream1.Free; end;end; 37) ENABLECONTROLS Veri kaynağı bileşeni içinden tablo ile ilgili data-aware denetiminde veri gös-terilmesini aktif kılar . procedure EnableControls; Eğer pasif değişken sayısı 0 ise EnableControls tablodaki aktif durumu gün-celler. Eğer gerekirse olay denetimcisini veri gösterimini yeniden aktif kılabil-mek için çağır. 38) FIELDBYNAME Belirlenmiş alan ismine dayanılan alanı bulur . function FieldByName(const FieldName: string): TField; Sadece alanın ismi , bilinildiğinde alan için alan bilgisine erişmek için FieldbyName' i çağır. Fieldname , varolan alanın isimidir . Fieldbyname , belirlenmiş alan için Tfield bileşeni döndürür . Uygulama , özel özelliklere ve alanın yöntemlerine doğrudan erişebilir . Örneğin , aşağıdaki deyim , belir-lenmiş alanın hesaplanmış alan olup olmadığını belirler. if Customers.FieldByName('FullName').Calculated then MessageDlg(Format('%s is a calculated field. ', ['FullName']), mtInformation, [mbOK], 0); FieldbyName , veri tabanı uygulamalarını ama temelde olan tabloya eriş-meyeni yaratan geliştiriciler için özellikle tasarım zamanında yararlıdır ve bu yüzden , kalıcı alan bileşenlerini kullanamaz . NOT: Özel alan için değere erişmek veya ayarlamakta , FieldByName yeri-ne varsayılan tablo yöntemiyle FieldValues' ü çağır . procedure TForm1.Table1BeforeInsert(DataSet: TDataSet); begin try {edit alanının integera çevrilebildiğinden emin olun } StrToInt(Edit1.Text); except Edit1.Text := '0'; end; end; procedure TForm1.Button1Click(Sender: TObject); begin Table1.Insert; Table1.FieldByName('QUANTITY').AsInteger := StrToInt(Edit1.Text); Table1.Post; end; 39) FINDFIELD Tabloda belirlenmiş alan nesnesini arar . Function FindField(const fieldname: string): tfield; Belirlenmiş alan bileşeninin , tabloda olup olmadığını belirlemek için Findfield' ı çağır . Fieldname , aranacak alanın isimidir. Eğer Findfield , eşlenen isimle aynı alanı bulursa , belirlenmiş alan için tfield bileşeni dön-dürür . Aksi halde boş döndürür . Findfield , parametre olarak geçerli alan isimi gerektiren fieldbyname gibi , diğer tablo yöntemlerini çağırmadan önce kullanma amacına yönelik yararlı bir işlevdir . Örnek with Table1 do begin { Bu 'CustNo' alanını değiştirmenin güvenli bir yoludur } FindField('CustNo').AsString := '1234'; { Bu 'CustNo' alanını değiştirmenin güvenli olmayan bir yoludur } Fields[0].AsString := '1234'; end; 40) FINDFIRST Süzgeçlenmiş tabloda imleci ilk kayda konumlamak için görsel bir işlem yeri-ne getirir. function FindFirst: Boolean; Bu işlev , imleç başarılı biçimde yeniden yerleşemediğinde False döndürür . Genellikle uygulama , tablo düzeyinde FindFirst' ü çağırmamalı ama yerine , redeclared' ı ve ttable gibi torun nesnede findfirst' ü çağırmalıdır . Findfirst , Findfirst'ü yapmayan türemiş tablo nesneleri için Fallback yöntemi sağlar . 41) FINDLAST Süzgeçleniş tablodaimleci son kayda konumlamak için görsel bir işlem yeri-ne getirir. function FindLast: Boolean; Bu işlev , imleç başarılı biçimde yeniden yerleşemediğinde False döndürür . Genellikle uygulama , tablo düzeyinde FindLast'ı çağırmamalı ama yerine , redeclared' ı ve ttable gibi torun nesnede FindLast 'ı çağırmalıdır. FindLast, FindLast 'ı yapmayan türemiş tablo nesneleri için fallback yöntemi sağlar . 42) FINDNEXT Süzgeçlenmiş tabloda imleci bir sonraki kayda konumlamak için görsel bir işlem yerine getirir. function FindNext: Boolean; Bu işlev , imleç başarılı biçimde yeniden yerleşemediğinde False döndürür . Genellikle uygulama , tablo düzeyinde findlast' ı çağırmamalı ama yerine , redeclared' i ve ttable gibi torun nesnede Findfirst' ü çağırmalıdır. Findfirst , Findfirst' ü yapmayan türemiş tablo nesneleri için fallback yöntemi sağlar . 43) FINDPRIOR Süzgeçlenmiş tabloda imleci bir önceki kayda konumlamak için görsel bir işlem yerine getirir. function findprior: boolean; FindPrior , FindPrior' u yapmayan türemiş tablo nesneleri için Fallback yöntemi sağlar . 44) FIRST Tabloda ilk kayda imleci konumlamak için genel yöntemi uygular . procedure first ; First' ü tdataset düzeyinde çağırma. Tdataset torunlarında , onu aktif kayıt yapmak için ve tabloda ilk kayda imleci konumlamak için first' ü çağır . First , yapılan değişiklikleri aktif kayda kaydeder ve : Kayıt tamponlarını temizler . Tablo dosyasının başlangıcına imleci ayarlar . Sanalı çağırır , ilk kayda gidip almak için , kursörü onun üstüne konumlan-dırır, ve onu aktif kayıt yapar . TDataset için bu yöntem , sadece tanımlanır uygulanmaz . · Gösterilecek ek kayıtları getirir .Buda başka bir etkili metodu çağırır ki bu sadece tanımlanır ,yürütülmez. · Bof özelliğini true ayarlar. · Tablo değişim olayları için olay denetimcisini tetikler Örnek için Qery Nesnesinin özelliklerinden olan RecordCount' a bakınız. 45) FREEBOOKMARK Belirtilmiş yerimi için ayrılan kaynakları boşaltır. type TBookmark = Pointer; procedure FreeBookmark(Bookmark: TBookmark); virtual; Freebookmark'ı çağır . Yeniden atamadan önce varolan yer imini serbest bırak . Yer imi , artık ihtiyaç duyulmadığında belirlenmiş yer imi için ayrılan belleği serbest bırakır .Aşağıdaki örnek bir önceki kayıttaki alanın değerini aktif kayıttaki aynı alana kopyalar. procedure TForm1.CopyDataClick(Sender: TObject); var SavePlace: TBookmark; PrevValue: Variant; begin with Table1 do begin { Yerimi al böylece aynı kayda dönebiliriz } SavePlace := GetBookmark; { Önceki Kayda konumlan } FindPrior; { Değeri al } PrevValue := Fields[0].Value; {Yerimine geri git } GotoBookmark(SavePlace); { Değeri Set et } Fields[0].Value := PrevValue; { Yerimini temizle } FreeBookmark(SavePlace); end; end; Tablonun başına gelindiğinde önceki tuşunun pasif olması için BOF fonksi-yonuyla bir kontrol yapılır. procedure TForm1.Table1DataChange(Sender: TObject; Field: TField); begin if Table1.BOF then CopyData.Enabled := False else CopyData.Enabled := True; end; 46) GETBOOKMARK Tabloda aktif imlecin konumuna yer imini yerleştir. type TBookmark = Pointer; function GetBookmark: TBookmark; virtual; Tabloda aktif kayıt için yer imini kurmak amacıyla getbookmark ı çağır . yer imi , varken kayıt için yer imi kurarak her istendiğinde tabloda o kayda dönmeyi mümkün kılar . getbookmark , tbookmark tipinde uygulamada za-ten tanımlanmış değişkeni gerektirir .Getbookmark' ı GotoBookMark ve FreeBookMark 'a yapılacak sonraki çağrılarda referans edecek bir değer aktarmak için kullanın. NOT :GetBookmark artık bu yer imlerine ihtiyaç olmadığında FreeBookmark' ı kullanarak bunun için ayrılan hafızayı serbest bırakmalıdır. 47) GETFIELDLIST Liste içine belirlenmiş alan nesnelerinin setini getirir. procedure GetFieldList(List: TList; const FieldNames: string); Uygulama tarafından yaratılan ve uygulamaca sürdürülen liste nesnesi içine belirlenmiş alan nesne setlerini kopyalamak için GetFieldList' i çağır. Liste , alan nesnelerini kopyalanması gereken tlist nesnesidir . FieldNames , kop-yalanacak alanların ismini içeren dizidir . Dizide her bir alan isimi , noktalı virgül ile diğer alan isimlerinden ayrılmalıdır . GetFieldList , tablonun alan nesnelerinin isimlerinden oluşan bir liste yapar. NOT: Normal olarak uygulamalar , alan nesnelerini kopyalamak için GetFieldList' i çağırmamalılar . alan nesneleri , tablonun içinden doğrudan erişilmelidirler . Bazı durumlarda , ancak , o tabloda güncel nesnede çalış-mak yerine alan nesnesi veya verisinin kopyası ile çalışmak yararlı olabilir . Bu durumlarda , GetFieldList, yararlıdır . 48) GETFIELDNAMES Tabloda bütün alanlar için isimlerin listesini getirir . procedure GetFieldNames(list: tstrings); Tablodaki bütün alanlar için isim listesini almak amacıyla GetFieldNames ' i çağır . Liste , uygulama tarafından yaratılan ve korunan tstrings nesnesidir . Nesneleri runtimede dinamik olarak yaratılan alan nesnelerine sahip olan uygulamalar için alan isimlerinin listesini almak oldukça yararlıdır . Alan i-simlerinin listesine erişerek , uygulama , runtime da sadece var olan alanlar ile çalışmağa zorlanabilir. 49) GOTOBOOKMARK Belirlenmiş yer imi tarafından işaret edilen kayda imleci konumlamak için sanal yöntem uygular . type TBookmark = Pointer; procedure GotoBookmark(Bookmark: TBookmark); Tdataset düzeyinde gotobookmarkı çağırma . gotobookmark , sanalı çağırır Tdataset tarafından uygulanılmayan iç yöntemi ayırır. bunun yerine tdataset' in torunları GotoBookmark metodunu yeniden tanımlar ve yürütür. Uygulamalarda torunların metodunu kullanmaları tavsiye olunur. 50) INSERT Tabloya yeni , boş kayıt ekler. Procedure Insert ; Insert' ü şu durumlarda çağır. 1) Tabloda yeni , boş kaydı açmak için , 2) Yeni kaydı aktif kayda ayarlamak için . Insert metodu kullanıldıktan sonra uygulama kullanıcıların kaydın alanlarına veri girilmesine izin verir. Daha sonra bu değişiklikleri Post ile veya eğer Cached Updating aktifse applyupdates ile kaydetmenize izin verir. Yenice eklenen kayıt , aşağıdaki üç yolun biriyle veri tabanına kaydedilir. 1) İndekslenmiş paradox ve dbase tabloları için , kayıt , indeks pozisyo-nuna göre tablo içine araya eklenilir . 2) Unındexed Paradoxu ve dbase tabloları için , kayıt , aktif imleç konu-munda tablo içine araya eklenilir 3) Sql veri tabanları için ekleme işlemi özel olarak yapılır. indekslenmiş tablolar için , dizin , yeni kayıt bilgisi ile güncelleştirilir . 51) INSERTRECORD Tabloya yeni bir kayıt ekler ve bunu veri tabanına kaydeder. procedure InsertRecord(const Values: array of const); Tabloda yeni , boş kayıt yaratmak için InsertRecordu çağır ve veri tabanına değerleri kaydet. araya yeni kayıt ekleme , üç yolun biriyle veri tabanıya kaydedilir. 1) İndekslenmiş paradox ve dbase tabloları için , kayıt , dizini dayanılan ko-numda tablo içine araya eklenilir 2) Unındexed Paradoxu ve Dbase tabloları için , kayıt , aktif imleç konumunda tablo içine araya eklenilir 3) Sql veri tabanları için ekleme işlemi özel olarak yapılır. indekslenmiş tab-lolar için , dizin , yeni kayıt bilgisi ile güncelleştirilir . Yeni araya eklenen kayıt , aktif kayıtdır . InsertRecord örneği Aşağıdaki ifade Customer tablosuna kayıt ekler. Bazı değerlere boşluk a-tanmıştır fakat dizinin sonundaki elemanlar için boşluk atamaya gerek yoktur. Bu elemanlar belirtilmediğinde boş sayılırlar. Customer.InsertRecord([CustNoEdit.Text, CoNameEdit.Text, AddrEdit.Text, Null, Null, Null, Null, Null, Null, DiscountEdit.Text]); 52) ISEMPTY Tablonun kayıt içerip içermediğine , karar verir function IsEmpty: Boolean; Eğer tablo , herhangibir kayıt içermezse IsEmpty , true döndürür , aksi halde false döndürür . 53) ISLINKEDTO Tablonun belirlenmiş veri kaynağına bağlanıp bağlanmadığını denetler . function IsLinkedTo(DataSource: TDataSource): Boolean; NOT .IsLinkedTo geliştiriciler için üretilmiştir. Genel veri erişimi için buna ihtiyaç duyulmaz Eğer tablo , belirlenmiş veri kaynağını zaten kullanıyorsa , IsLinkedTo , true döndürür . Eğer tablo , belirlenmiş veri kaynağını kullanmazsa ve veri kaynağı , kendi tablosuna sahip değilse, IsLinkedTo , false döndürür. 54) LAST Tabloda son kayda imleci konumlamak için genel yöntemi uygular . Procedure Last ; Tdataset düzeyinde Last' ı çağırma. Tdataset torunları , onu aktif kayıt yapmak ve imleci son kayda konumlamak için Last' ı çağırır .Last aktif kay-da yapılan her değişimi kaydeder.Ayrıca : · Kayıt tamponlarını temizler, · Tablo dosyasının sonuna imleci ayarlar , · Sanalı çağır , son kayda erişmek için bu metodu çıkarır kursörün üzerine konumlandırır ve onu aktif kayıt yapar tdataset için bu tanımanmış fakat çalıştırılmamıştır, · Gösterilecek ek kayıtları da getirir. Grid kontrolü dolduracak olan kayıtları getirir, · Eof özelliğini true yapar, · Tablo değişim olayları için olay denetimcisi tetikler . 55) MOVEBY Tabloda aktif kaydı ile ilişkili kayda imleci konumlandır. function MoveBy(Distance: Integer): Integer; Uzaklık , gidilecek kayıt sayısını gösterir. Negatif değer , geriye gitmeyi gös-terir iken pozitif değer , tablo içinde ileriye doğru hareket etmeyi gösterir. Örneğin , 10 kayıt kadar tablo içinden geriye gitme işlemini Moveby ( -10 ) ile gerçekleştiririz. Moveby , aktif kaydı veya herhangi bir değişimi kaydeder. Eof' 'a ve Bof' a false özelliğini ayarla . Eğer dosyanın sonuna gelindiyse Moveby , eof 'u true ayarlar. Eğer dosyanın başına gelindiyse Moveby , bof 'u true ayarlar. Tablo kaydırma olayları için olay denetimcisini tetikler. Ha-reket ettirilen kayıtların gerçek sayısını döndürür . Çoğu durumda , sonuç , uzaklığın mutlak değeridir ama eğer Moveby , kütük başı veya kütük sonu ile karşılaşırsa, sonuç , uzaklığın mutlak değerinden daha az olacaktır. 56) NEXT Tabloda sonraki kayda imleci konumlamak için genel yöntem uygulanır. procedure Next; Tdataset düzeyinde next' i çağırmayın .Tdataset torunlarında,onu aktif kayıt yapmak ve dataset de imleci sonraki kayıtta konumlamak için next' i çağır . Aktif kayıttaki herhangi bir değişimi next kaydeder . Eof' a ve Bof' a false özelliğini ayarla . Eğer son kayda gelindiyse eof 'u true ayarlar. Tablo kaydırma olayları için olay denetimcisini tetikler. 57) OPEN Tabloyu açar. Procedure open; Tablonun active özelliğini true ayarlamak için open' ı çağır .Active true iken veri tabanına yazılabilir ve buradan okunabilir. Active' i true ayarlayarak :tablo tanımlandı ise BeforeOpen olay denetimcisini tetikler .Tablo durumunu dsBrowse' a ayarlar. Tablo içine BDE' yi açar(sadece Tquery ,TstoredProc, Ttable için geçerli) Eğer tanımlandıysa AfterOpen olay denetimcisini tetikler. Eğer tablo açma sırasında hata çıkarsa tablo durumu , dsInactive' e ayar-lanır ve imleç kapatılır . 58) POST Veri tabanına değiştirilmiş kaydı yazmak için genel yöntemi uygular . Procedure Post; virtual; Tdataset , veri tabanına değiştirilmiş kaydı yazmak için gerçek yöntemi uygu-lar. Tablo durumunu değiştiren tablo metotları (Edit, Insert,Append veya First,Last,Next ve Prior otomatik olarak Post metodunu çağırırlar. Tdataset in tüm torunları veri tabanına yazmak için post metodunu yeniden tanımlar ve işler. Aşağıdaki örnek kullanıcı butona tıkladığında tabloya yeni bir kayıt ekler. Alphanumeric ve ınteger adlı iki alan edit kontrollerince doldurulur. procedure TForm1.Button1Click(Sender: TObject); begin Table1.Append; Table1.FieldValues['ALPHANUMERIC'] := Edit1.text; Table1.FieldValues['INTEGER'] := StrToInt(Edit2.text); Table1.Post; end; 59) PRIOR Tabloda önceki kayda imleci konumlamak için genel yöntemi uygular. procedure Prior; Tdataset düzeyinde Prior 'u çağırma. Tdataset torunlarında , tabloda önceki kayıtda imleci konumlamadan önce çağır ve o aktif kaydı aktif kayıt yapar ve her değişimi kaydeder. Eof'a ve bof'a false özelliğini ayarla . Eğer ilk kayda gelindiyse gelindiyse eof 'u true ayarlar. Tablo kaydırma olayları için olay denetimcisini tetikler. 60) REFRESH Tablonu veri görüşünü yenilemek için veri tabanıdan verinin yeniden genel yöntemlerce getirilmesini sağlar. procedure Refresh; Tdataset nesnesi için tazelemeyi çağırmayın. Yerine , redeclared' ı çağırın ve TDataset in torunları için refresh' i yeniden yürüt refresh ile uygulama ,veri tabanındaki en son veriye sahip olunduğundan emin olur . Örneğin :bir uygulama bir tablonun filtrelemesini sonlandırınca ,o hemen tablodaki tüm kayıtları listelemek için Refresh' i çağırmalıdır. 61) RESYNC Aktif kaydı ve onun önündeki ve sonundaki kayıtları yeniden getirir. type TResyncMode = set of (rmExact, rmCenter); procedure Resync(Mode: TResyncMode); virtual; Resync diğer tablo metotlarınca Delphi tablolarıyla fiziksel verileri - bunlar çağrı yapıldığında kursör pozisyonunu değiştirebilirler - yeniden uyumlu hale getirmek için kullanılır. Uygulamalar Resync yerine Refresh metodunu kul-lanmalılar. Mode Resync 'nin alabileceği mümkün işlemleri belirtir. Eğer mod , rmexasct'ı içerir , resync eğer imleç ,geçerli kayıtta yerleştiril-mediğinde , resync çağrılırsa resync istisna çıkarır. Eğer mod rmCenter içe-rirse, Resync aktif kaydı tüm buffırlanmış kayıtların merkezine koyar. Mode ne olursa olsun resync aynı zamanda aktif kayıt için buffer' ı aktif eder. Önceki ve sonraki kayıtları ekrana getirmek için çağırır ve tablonun change olayını tetikler. 62) SETFIELDS Kayıttaki bütün alanların değerlerini ayarlar . procedure SetFields(const Values: array of const); Aynı anda bazı için değerleri veya bütün alanları ayarlamak için SetFields' ı çağır. Values , her bir alan içine eklenecek değerleri içerir . Değerler sutunların sırasına göre atanır. Bu değerler literal,değişken veya boş olabilir. Eğer sütun sayısından az değer dirilirse bunlar boş sayılır. Böyle alanlarda herhangibir varolan değerin üstüne yazar. SetFieldsı çağırmadan önce , dataseti dsedıt durumu içine koymak üzere editi çağır. Setfıeldsı ça-ğırdıktan sonra , veri tabanına değişiklikleri yazmak İçin post'u çağır . NOT: Bazı alanların değerlerini var olanların değerlerini diğerleri için sak-lamak ve değişmeyeceklere boşluk atamak suretiyle ayarlamaktır. 63) TRANSLATE Kaynaktan hedefe veri kopyalama sırasında karakter transferi yapar. procedure Translate(Src, Dest: PChar; ToOem: Boolean); virtual; Bu işlev , hedef dizgisine kaynak dizgisini kopyalar ve , ToOem'de geçilen değeri yok sayar . Genelde uygulama Tdataset seviyesinde bu çağrıyı yap-maz. Fakat bunun yerine torunların geliştirilmiş ve yeniden tanımlanmış çağ-rılarını kullanın. Örneğin Ttable veya geliştirici tabanlı objeler gibi. 64) UPDATECURSORPOS İmleci aktif kayıta konumlar. procedure UpdateCursorPos; Updatecursorpos , fiziksel imlecin aktif kayıtta doğru yerleştirildiğinden emin olmak amacıyla bir çok tablo yöntemi tarafından kullanılan iç yordamdır. Normal olarak uygulamanın , UpdateCursorpos' u çağırması gerekmez. Ge-nelde fiziksel kursor pozisyonu ile mantıksal kursor durumunun eşit olup ol-madığına bakar. 65) UPDATERECORD Kayıt güncelleştirmesi için veri olayını harekete geçirir . procedure UpdateRecord; UpdateRecord cached güncellemeler aktif iken onUpdateRecord olayını tetiklemek için bazı tablo yöntemlerince dahili olarak kullanılır. Uygulamalar genelde tablo yöntemlerini es geçecek özel yöntemler gerekmedikçe bunu kullanmazlar. 66) DESTROYCOMPONENTS Destroycomponents sahibi bulunulan öğeler arasında ilerlerken sahipleri tarafından değiştirilir. procedure DestroyComponents; Destroycomponents , bileşenlerin sahipleri tarafından otomatik olarak silin-diğinden emin olmayı sağlar. Destroycomponents' i doğrudan çağırmak ge-rekli değildir. 67) DESTROYING Destroying csDestroying bayrağını öğeler ve sahiplenmiş tüm öğeler için bu öğelerin yokedilmekte olduğunu belirten şekilde ayarlar. procedure Destroying; Eğer csDestroying , zaten ayarlanılırsa , destroying, hiçbir şey yapmaz . Destroying' i doğrudan çağırmak gerekli değildir. 68) FINDCOMPONENT Verilen öğenin -Aname- bir öğece sahiplenip sahiplenmediğini belirtir. function FindComponent(const AName: string): TComponent; FindComponent , arama parametresindeki dizgiye eşit olan isim özelliğine sahip bileşen dizisi içinde olan bileşeni döndürür. Verilen bileşenin başkası tarafından sahiplenip sahiplenmediğini bulmak için kullanın. FindComponent , büyük ve küçük harfe duyarlı değildir. 69) FREENOTIFICATION Freenotification , Acomponent bileşenin imha edileceğinin bildirildiğinden emin olmak için kullanılır . procedure FreeNotification(AComponent: TComponent); Farklı bir formdaki bileşen , bileşenin özelliğine atandığında FreeNotification' ı kullanın. Bileşene sahip olan diğer formlarda bileşenler için FreeNotification' u çağırmak gereklidir. Fakat aynı formdaki bileşenler için Notification metodu otomatik olarak çağrılır. 70) FREEONRELEASE FreeOnRelease , com sınıflarından oluşturulan bileşenler için arayüz kayna-ğını serbest bırakır . procedure FreeNotification(AComponent: TComponent); Freeonrelease bileşence işlenen arabirim serbest bırakıldığında çağrılır. Freeonrelease , dahili olarak kullanılır ve uygun arayüz yöntemi çağrılır. Freeonrelease' i doğrudan çağırmak gerekli değildir. 71) GETPARENTCOMPONENT Getparentcomponent , Tcomponent için boş (null) döndürür . function GetParentComponent: TComponent; dynamic; GetparentComponent yöntemi Tcomponent' de, delphi akış sistemi için uy-gunluk amacıyla tanıtıldı. Torun sınıflar , kendi ata sınıflarını döndürürler. 72) HASPARENT Hasparent , TComponent için False döndürür . function HasParent: Boolean; dynamic; True değeri dönerse bundan mesul olan bir obje var demektir. Hasparent'dan true döndüren herhangi bir çocuk bileşeni , GetParentComponent ve SetParentComponent yöntemleri şimdi aynı zamanda uygulamalıdır. 73) INSERTCOMPONENT Bileşeni , Acomponent parametresinde geçen bileşenin sahibi olarak kurar. procedure InsertComponent(AComponent: TComponent); InsertComponent , bileşenin dizi özelliğinin sonuna bileşen ekler. Sokulan parça , isme sahip olmamalı veya isim , bileşen listesinde bütün diğerleri ara-sında tek olmalıdır . Ana bileşen , imha edildiğinde , acomponent , aynı za-manda imha edilir . Delphi Form tasarımcısında görsel biçimde işlenen bileşenler otomatik ek-lenir ve kaldırılacaklar otomatik olarak kaldırılırlar. Başka bileşen sahibinin bileşen listesine bileşenleri el ile eklediğinde InsertComponent'i kullanın . 74) REMOVECOMPONENT RemoveComponent , bileşenin bileşen listesinden Acomponent parametre-sinde belirtilen bileşeni çıkarır. procedure RemoveComponent(AComponent: TComponent); Delphi Form tasarımcısında görsel biçimde işlenen bileşenler otomatik ola-rak kaldırılırlar. Bileşeni el ile kaldıracağında RemoveComponent' i kullanın. ComponentCount, Components, RemoveComponent, InsertComponent 'a bir örnek aşağıda verilmiştir. Bu parça form üzerindeki görsel olmayan bile-şenleri ayrı veri modüllerine ayırır. Çıkarılan bileşenler sondan itibaren çıkarı-lır. Bu kod formu veya veri modülünü diske görsel olmayan bileşen eklen-dikten sonra saklanmaz var I: Integer; Temp: TComponent; begin for I := ComponentCount - 1 downto 0 do begin Temp := Components[I]; if not (Temp is TControl) then begin RemoveComponent(Temp); DataModule2.InsertComponent(Temp); end; end; end; 75) SAFECALLEXCEPTİON SafeCallException OLE istisnalarını desteklemek için kullanılan bir hata tutma metodudur. function SafeCallException(ExceptObject: TObject; ExceptAddr: Pointer ): Integer; override Safecallexception , ole kural dışı durum tutma desteği için kullanılır . Com ve OLE arayüzlerini bu uygulayan sınıflar , ortaya çıkabilecek diğer hataları tutmak için bu yöntemi kullanmalılar. Delphi'de Com ve OLE sınıfları , SafeCallException'a engel olurlar. Eğer bir tanesi varsa , TComponent , bi-leşenin tarafından desteklenilen arayız için bu yöntemi işleştilmesi için çağı-rır. Eğer bileşen , ara yüzleri desteklemezse , bu yöntem , E_UNEXPECTED döndüren miras yöntemini çağırır. Bu , herhangi bir ara birimleri destekle-meyen sınıflar için uygun olan varsayılan dönüş değerdir . TPERSISTENT DEN GELEN METODLAR 76) ASSIGN Assign , bir nesneyi diğer neneye , o nesnenin içindekilerlerini yüklemek su-retiyle kopyalar. procedure Assign(Source: TPersistent); Az miktardaki Delphi sınıfları farklı tiplerdeki nesnelere atama yapmaya izin verir. Diğer durumlarda eğer iki nesne Tpersistent'in torunuysa fakat aynı tipte değilseler Assign' a yapılan çağrı EconvertError hatasını verir. Standard Assign çağrı şekli Hedef.Assign ( kaynak ) dır ve bu hedef nesne-ye kaynak nesnenin içeriğini kendisine kopyalamasını söyler. Genelde, he-def: = kaynak , deyimi Hedef. Assign ( kaynak ) 'a eşit değildir. Hedef: = kaynak deyimi , kaynak nesnesinin aynısından bir hedef nesnesi yapar oysa Destination.Assign ( kaynak ) , kaynakla belirtilen nesnenin içeriğini hedefle belirtilen nesneye kopyalar. NOT. Bazı özelliklerin tipleri , aynı zamanda nesnedirler . Eğer bu özellikler Assign' ı özelliğin değerini ayarlamak için kullanılan yazma metotlarına sahipseler , bu durumda Hedef := Kaynak" deyimi "He-def.Assign (Kaynak)" deyimiyle aynı olacaktır. Değişim Assign ve AssignTo metotlarının ikisinde de olacaktır. Fark kimin atama işlemi için çalıştığıdır. Aynı zamanda kaynak , boş da olabilir . 77) GETNAMEPATH Getnamepath , Object Inspector .tarafından kullanılan karakter dizisi döndü-rür . function GetNamePath: string; dynamic; GetNamePath , sadece dahili kullanım içindir . Biçimlenen nesnenin ismi için Objece Inspector da gösterilecek metne karar vermek amacıyla kullanılır. GetNamePath , TPersistent 'ta tanıtılır bu yüzden toplamalar gibi torunlar Objece Inspector'da görünebilirler. NOT: Doğrudan GetNamePath' i çağırmayın . Bileşenler için bu bileşen ismidir. TCollectionItem nesneleri için bu ev sahibi bileşeninin ismidir , özelliğin ismidir,parantezlerle çevrilen toplamanın içindeki dizindir. Bileşenler için bu bileşen ismidir. TCollectionItem nesneleri için bu ev sahibi bileşeninin ismidir , özelliğin ismidir,parantezlerle çevrilen toplamanın içindeki dizindir. TOBJECT' DEN GELEN METOTLAR 78) CLASSINFO ClassInfo nesne tipi için çalışma anı tip bilgisi tablosu ( RTTI ) için bir pointer döndürür. class function ClassInfo: Pointer; Nesne tipi hakkında bilgiyi içeren RTTI tablosuna ve onun ata tipi ve yayın-lanmış özelliklerine erişmek için ClassInfo'yu kullanın. RTTI , Delphi orta-mında dahili olarak çokça kullanılır . Classinfo , uygulamada nadiren doğru-dan çağırılır. Tobject özelikle RTTI bilgisine erişmek amacına yönelik tasar-lanan diğer metotları da destekler. 79) CLASSNAME Classname , değişkenin tipinden daha ziyade , değişken tarafından referans edilen nesne örneğinin güncel tipinin ismini içeren bir karakter dizgi döndü-rür. class function ClassName: ShortString; Başka yordama parametre olarak dizginin geçtiği gibi , dizgi formatındaki nesnenin gerçek tipini bulmak amacıyla ClassName' i kullanın. Örneğin , ata tipinin değişkeni , herhangi bir torun tipin örneğine başvurabilir. Bu durumda , ClassName , tanımlı değişkenin tipini kapsayan dizginden daha ziyade , nesnenin güncel tipini gösteren dizgi döndürür. Classname , nesne karşıtı modülleri hakkında bilgi sağlar .Bu yüzden İstisna -kullanma için özellikle yararlıdır . Kısmi nesne üzerindeki istisna -kullanma hatalarını rapor eder-ken, ClassName sınıfların karakter karşılaştırmasını yapan deyimce kulla-nılır. 80) CLASSNAMEIS ClassNameIs , nesnenin özel bir tipten olup olmadığını belirler . class function ClassNameIs(const Name: string): Boolean; ClassNameIs 'i bir nesnenin nesne geçit modüllerini veya DLL' leri sorgula-mak için veya nesne tipine dayanan dururmsal kodlar yazarken kulla-nın.Eğer Name parametresinde geçen dizgi , sınıf ismine eşitse ClassNameIs , true döndürür . Aksi halde , false döndürür 81) CLASSPARENT ClassParent , sınıfın yakın (şimdiki) atasının tipini döndürür. class function ClassParent: TClass; Classparent , TOobject tipi için boş döndürür: çünkü Tobject' in atası yoktur ClassParent Delphi' ce dahili olarak is ve as operatörlerince ve InheritsFrom metodunca RTTI bilgisine erişmek amacıyla kullanılır. Sınıf yöntemi oldu-ğundan , herhangi bir sınıf referansının tipine karar vermek için de kullanıla-bilir . NOT: Uygulamalar direkt olarak bunu çağırmamalıdır. Bunun yerine is ve as operatörlerini kullanın. ClassType, ClassParent Örnekleri Bu örnek bir bileşenin ClassType ve ClassParent özelliklerini kullanarak bi-leşenin atasının elde edildiğini gösterir. Form üzerinde bir düğme, bir liste kutusu kullanır. Kullanıcı düğmeyi tıkladığında düğmenin sınıfının ve onun ebeveyn sınıflarının ismi liste kutusuna eklenir. procedure TForm1.Button1Click(Sender: TObject); var ClassRef: TClass; begin ListBox1.Clear; ClassRef := Sender.ClassType; while ClassRef <> nil do begin ListBox1.Items.Add(ClassRef.ClassName); ClassRef := ClassRef.ClassParent; end; end; Liste kutusu kullanıcı düğmeyi tıkladığında şunları içerir. · TButton · TButtonControl · TWinControl · TControl · TComponent · TPersistent · TObject 82) CLASSTYPE Classtype , nesne örneğinin yürütme anı tip bilgisi için bir pointer döndürür . Function ClassType: TClass; ClassType dinamik olarak, nesnenin gerçek tipin belirler. ClassType Delphide is ve as operatörlerince dahili olarak kullanılır . Classtype' ı doğrudan çağırmayın. NOT: Uygulamalarda bunu kullanmayın. Yerine is ve as operatörlerini kulla-nın. 83) CLEANUPINSTANCE CleanUpInstance uzun dizgiler , değişkenler ve arayüz değişkenlerinde bir sınıf dahilinde sonlandırmayı gerçekleştirir . procedure CleanupInstance; Doğrudan CleanUpInstance' ı çağırmayın.Free çağırıldığında, CleanUpInstance otomatik olarak çağırılır .CleanUpInstance, bütün uzun dizgileri ve değişkenleri serbest bırakır . Uzun dizileri boşa ve değişkenleri Unassigned' a atar. 84) DEFAULTHANDLER DefaultHandler , ona geçilen mesaj kaydını işlemek için arayüz ile tanıştırır . procedure DefaultHandler(var Message); virtual; Dispatch tarafından , kısmi mesaj için yöntem bulamadığında bu metot çağı-rılır. DefaultHandler , nesnenin özel denetimcilere sahip olmadığı bütün bildi-riler için mesaj yöneticisi sağlar . Bildirileri işleyen Tobject' in torun sınıfları , genellikle işledikleri bildirilerin tipine göre DefaultHandler yöntemini tanımlar-lar.Örneğin , TWinControl , DefWindowProc' u çağırmak için DefaultHandler' a baskı yapar. 85) DISPATCH Mesaj parametresinin içeriğine dayanan nesne için ,mesaj yönetme metodu-nu gönderir. procedure Dispatch (var Message); Dispatch, bir mesajın ,nesne için tanımlanan mesaj yöneticisi listesinde olup olmadığını belirler. Eğer nesne mesajı kullanmazsa Dispatch ata tipinin me-saj yönetim listesini inceler. Atalarını DefaultHandler 'ı çağırdığı durumlarda hem ataları bitene hem de özel yöneticiler bulana kadar kontrol etmeye de-vam eder. Mesaj parametresi , Dispatch için tipsizdir. Ne kadar verinin her çeşidi , Dispatch' e geçilebildiği halde , Tmessage gibi veya özel mesaj kayıt tipi gibi mesaj kaydını kullanın. Mesajın ilk iki baytı mesaj ID' yi içerir ve hangi mesaj yöneticisinin mesajı kullandığını belirtir. 86) FIELDADDRESS FieldAddress , yayınlanmış nesne alanının adresini döndürür. function FieldAddress(const Name: ShortString): Pointer; FieldAddress Delphi akış sistemini tarafından dahili kullanılır. Eğer varsa FieldAddress, alana pointer döndürür. Eğer nesne o isimde yayımlanmış ala-na sahip değilse FieldAddress boş döndürür. Kullanıcılar , FieldAddress ye-rine özellikler kullanarak alanlara erişmeliler ve alanlar üzerinde işlem yap-malılar. 87) FREE Free , gerekliyse nesneyi yok eder ve onun için ayrılan belleği serbest bıra-kır. Procedure free ; Free' yi , nesneyi yok etmek için kullanın. Free nesne durumu boş değilse otomatik olarak Destroy' u çağırır. 88) FREEINSTANCE FreeInstance , önceki NewInstance metodunu çağırmak yoluyla ayrılan hafı-zayı serbest bırakır. . procedure FreeInstance; virtual; FreeInstance' ı direk çağırmayın. Gerçi NewInstance ile bellekte ayrılan yeri bununla boşaltmak gerekiyor ama yinede direk olarak kullanmamak gerekir. Newınstance olduğu gibi , FreeInstance , nesne belleğini serbest bırakmak için InstanceSize' dan geri döndürülen değeri kullanır . 89) GETINTERFACE GetInterface , verilen tanımlayıcıyla tanımlanılan arayüzü getirir. function GetInterface(const IID: TGUID; out Obj): Boolean; GetInterface dahili olarak as operatörünce nesnece yürütülen arayüzü çağır-mak için kullanılır. Getınterface , TInterfacedObject'ce QueryInterface yön-temini uygulamak için kullanılır . Arayüz tip ismi , IUnknown da olduğu gibi , IID parametresinden sağlanılabilir. Bu da compiler arayüzü ilişkili GUID ile yer değiştirmesinden itibaren olur. Nesne , arayüzü destekleyemediğinde VCL nesne örneğinden arayüzü elde etmek için GetInterface' i kullanın ama kural dışı durum(istisna) , hata durumunda çıkmamalı. GetInterface dış parametre olan Obj de olduğu gibi IID parametresince ta-nımlanan arayüzü bir pointer olarak döndürür. ,Eğer arayüz , nesnen tarafın-dan desteklenilirse , GetInterface , true döndürür Eğer arayüz , nesne tara-fından desteklenmezse , GetInterface , false döndürür ve obj parametresi , boşdur. 90) GETINTERFACEENTRY GetInterfaceEntry , bir sınıfta uygulanan özel arayüz için giriş döndürür type PInterfaceEntry = ^TInterfaceEntry; TInterfaceEntry = record IID: TGUID; VTable: Pointer; IOffset: Integer; end; class function GetInterfaceEntry(const IID: TGUID): PInterfaceEntry; GetInterfaceEntry sınıfta , IID parametresi tarafından belirtilen arayüz için giriş döndürür GetInterfaceEntry , dahili olarak kullanılır . Nadiren doğrudan çağırılır . NOT: Bu metodun bir faydası da OLE' nin çift gönderme arayüzüne çağrıla-rı nasıl otomatik olarak gönderdiğini tarif etmesidir. 91) GETINTERFACE TABLE GetInterfaceTable , verilen sınıf tarafından uygulanılan arayüzlerin hepsini kapsayan yapı ya pointer döndürür type PInterfaceTable = ^TInterfaceTable; TInterfaceTable = record EntryCount: Integer; Entries: array[0..9999] of TInterfaceEntry; end; class function GetInterfaceTable: PInterfaceTable; GetInterfaceTable, sınıf için TInterfaceEntry' ler döndürür . Bu liste yalnızca bu sınıfça işletilen arayüzleri içerir ,bunların atalarını içermez. Ata listesi bul-mak için , GetParentClass' ı çağır ve sonra onun GetInterfaceTable yönte-mini çağır . Özel arayüze giriş bulmak için , bunun yerine GetInterfaceEntry yöntemini kullanın . 92) INHERITSFROM InheritsFrom , sınıf yöntemidir , iki nesne tipi arasındaki ilişkiye karar ver-mekte kullanılır . class function InheritsFrom(AClass: TClass): Boolean; Eğer belirli bir sınıf tipi , nesnenin atası olarak belirleyeceksen InherıtsFrom 'u kullanın . InheritsFrom Aclass parametresiyle belirtilen nesnenin tipi nene tipinin atasıysa veya nesne tipinin kendisiyse True döndürür. Yoksa False döndürür. NOT: İs ve as operatörleri InheritsFrom' u işlemlerinde kullanırlar.Ancak , is operatörü , sadece örneğin kalıtsal ilişkisine karar verebilir Sınıf yöntemi olarak InheritsFrom , sınıf kaynaklarının ilişkisine karar verebilir. 93) INITINSTANCE InitInstance yeni yerleştirilen nesne örneğini 0 la başlatır. Ve örneğin sanal metot tablo pointer' ını başlatır. class procedure InitInstance(Instance: Pointer): TObject; InıtInstance' ı doğrudan çağırmak için hiç sebep yoktur. Nesne , yaratıldığında InitInstance, NewInstance tarafından otomatik olarak çağırılır . NewInstance' a engel olurken InitInstance' ı son ifade olarak çağırmayı unutmayın. InıtInstance , sanal değildir bundan dolayı ona engel olamazsınız. Yapıdaki nesne için herhangi bir veriyi başlat . Ortak bellek havuzundan sınıf tipinin bütün örneklerini tahsis etmek gibi , özel bellek atama gereksinimleri için sadece NewInstance' ı kullanın 94) INSTANCESIZE InstanceSize , nesne tipinin her bir örneğinin boyutlarını bayt olarak döndü-rür . class function InstanceSize: Longint; InstanceSize' ı sınıfların örnek verisi için ne kadar bellek baytına ihtiyaç ol-duğuna karar vermek için kullanın. Delphi , belleği tahsis eden ve serbest bırakan yöntemler için dahili olarak InstanceSize'ı kullanır. InstanceSize , sanal yöntem değildir, bundan dolayı iptal edilemez. InıtInstance , sadece NewInstance' ın özel versiyon uygulamalarında çağrılmalıdır. 95) METHODADDRESS Yayınlanmış yöntemin adresi döndürür . class function MethodAddress(const Name: ShortString): Pointer; Methodaddress , duraksız işlem sistemi tarafından Delhi' de dahili olarak kul-lanılır . Methodaddress bir metot ismini dönüştürmek için Name ile belirtilen-den Akıştan okurken metot adresini içeren pointer' a yönlendirmek için kulla-nılır. Methodaddress' i direkt çağırmaya gerek yoktur. Eğer Name nesne için yayınlamış metot belirtmezse Methodaddress boş döndürür. 96) METHODNAME Methodname , adreste yerleştirilen yöntemin ismini kapsayan dizgi döndürür. class function MethodName(Address: Pointer): ShortString; Methodname , duraksız işlem sisteminin tarafından Delhi'de dahili olarak kul-lanılır Akışa olay özellikleri yazdığında methodname , yöntem ismini kapssayan dizgiye yöntem adresini kapsayan göstergeyi dönüştürmek için kullanılır . Methodaddress' in aslında tamamlayıcısıdır. Methodname' i doğ-rudan çağırmaya hiç gerek yoktur . Eğer adres , nesnenin yayınlanmış yön-temine işaret etmezse , methodname , boş dizgi döndürür . 97) NEWINSTANCE NewInstance nesne tipinin her örneği için hafızada yer ayırır ve bu yeni ör-nek için bir pointer döndürür. class function NewInstance: TObject; virtual; Tüm yapılar NewInstance' ı otomatik olarak çağırırlar. NewInstance InstanceSize' ı heap hafızada ne kadar yer ayrılacağını belirlemek için kulla-nır. NewInstance' ı direk olarak çağırmayın. Torun sınıf NewInstance' ı bir sınıfın kendi için başka hafıza ayırma yöntemi kullanmasını engelleyebilirler. Bu işlem FreeInstance ile hafızayı boşaltmayı da engeller. Örneğin aynı tip-ten birçok nesnenin aynı anda hafızada bulunması gerekiyorsa ve bunlar için yer ayrılacaksa bütün hepsi için hafızadan büyük bir blok ayrılır ve her örnek için o parçadan büyük blokları NewInstance' ın kullanmasına engel olunur. NewInstance' a engel olurken InıtInstance' ı çağır ama son satırda değil. NOT :Varsayılan olarak NewInstance InitInstance' ı çağırır. SONUÇ VE ÖNERİLER Bütün bu bilgilerin ve analizlerin ışığında şunları söyleyebiliriz Yapısal bir program yazabilmek için belirttiğimiz şekilde SQL 'e tamamen hakim olmamız gerekiyor. Bunların da ötesinde değişik amaçlar için geliştiri-len sorgu dillerini de kullanmamız gerekebilir. Delphi' de Tquery nesnesinin çok geniş özelliklere sahip olduğunu ve çok sayıda ve yaralılıkta metotlarının olduğu görüldü. Bütün bu verilerin bilinmesi ama sadece bu nesne ile profesyonel ve yapısal bir progam yazmanın zor olacağını gördük. Bu konuda araştırma yapmak isteyen kişilere SQL le ilşkili Delphi' nin diğer öğelerini (UpdateSql,TstoredProc,Tsession vb..) aynı şekilde inceleyip bun-lar arasında bağlantı kurmalarını tavsiye ederim. Yalnız bu konuda çalışmak isteyen araştırmacıların çok sabırlı olması gerekir. Bu konuda tam hakimiyet sağlamak çok uzun ve yorucu bir çalışma döneminden sonra gerçekleşebilir. KAYNAKLAR Balboni, Jeffrey H. (1991) SQL access overview . 36th IEEE Computer Society International Conference - COMPCON Sping '91. (114-119) Feb 25-Mar 1 .San Francisco, CA, USA Barengi,R. (1998) Delphi 3'e bakış. Seçkin Yayınevi. Ankara, matbaaismi Delphi 3.0 Professional 1997 (Help) Finkelstein, Rich (1990) Product focus. Multiuser databases: The SQL. Byte (15) 5 , 136.Chicago, IL, USA Goel, P.; Iyer, B. (1996) SQL query optimization: Reordering for a general class of queries . Proceedings of the 1996 ACM SIGMOD International Conference on Management of Data. (47-55). 2 June 1996- . Montreal, Can Keçeci, H. F.;Atalay, E. (Çeviri) (1997) Delphi unleashed. Sistem Yayıncılık. İstanbul, matbaaismi Khoshafian, S.; Blumer, R.; Abnous, R.(1991) Inheritance and generalization in Intelligent SQL. Computer Standards & Interfaces . (13) 1-3 ,213-220. Walnut Creek, CA, USA Khoshafian, S. (1991) Intelligent SQL. Computer Standards & Interfaces. (13) 1-3 ,169-184. San Jose, CA, USA Meng, X.; Wang, S.; Lum, V.Y.; Wong, K.F.; Low, B.T. (1997) Multi-statement features and optimization in CHIQL . Ruan Jian Xue Bao/Journal of Software (8) 7,549-554. Renmin Univ, Beijing, China Penaloza, M. A.; Welch, R. M.(1997) Infectious disease and climate change: A fuzzy database management system approach. Proceedings of the 1997 IEEE International Geoscience and Remote Sensing Symposium, IGARSS'97 (1950-1952) 03/08/1997- 08/08/1997. Rapid City, SD, USA Perkovic, P. (1991) SQL access and ANSI/ISO SQL and X/Open. 36th IEEE Computer Society International Conference - COMPCON Sping '91 (120-122) Feb 25-Mar 1. San Francisco, CA, USA. Sicurello, F.; Villa, M.; D'Arminio Monforte, A.; Formenti, T.; Moroni, M.; Nicolosi, A.; Saracco, A. (1992) System to manage a clinical data base on aids. Proceedings of the 1992 Engineering Systems Design and Analysis Conference (185-186) Jun 29-Jul 3 . New York, NY, USA. Uysal,M. (1994) SqL veri tabanı sorgulama dili. Beta Yayınevi. Ankara, Beta Basım A.Ş. Uysal,M. (1999) Sql veri tabanı sorgulama dili. Beta Yayınevi. Ankara, Be-ta Basım A.Ş.