DELPHI de Veritabanı
description
Transcript of DELPHI de Veritabanı
![Page 1: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/1.jpg)
DELPHI de Veritabanı
Veritabanı Bileşenleri ve Kullanımı
![Page 2: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/2.jpg)
VERİTABANI BİLEŞENLERİ
Bileşen paletinde Data Access ve Data Controls sayfalarında bulunurlar. Genel olarak bir veri tabanına bağlanıp veriler üzerinde insert, update,delete veya belli kayıtların görüntülenmesi için kullanılır.
![Page 3: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/3.jpg)
Delphi 5 için VT bileşenleri
![Page 4: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/4.jpg)
Delphi 5 için VT bileşenleri
Data Access sayfasındaki bileşenler unvisible (yani program çalıştığı zaman ekranda gözükmeyen) bileşenlerdir. Bu bileşenler Data Controls sayfasındaki bileşenler yardımı ile görüntülenecek veriler için veritabanları ile köprü vazifesi görürler.
![Page 5: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/5.jpg)
TTable:
BDE kullanılarak hazırlanmış tablolarda kullanılan bir bileşendir. Bu bileşen sayesinde paradox, dBase, Access… gibi tekli ortamdaki veya interbase, Oracle …, gibi uzak serverlarda ki her kayıda ve her alana direk olarak ulaşabiliriz. Ayrıca dizayn sırasında yaratmak, silmek, güncellemek, isim değiştirmek gibi işlemleri table bağlanarak yapabiliriz
![Page 6: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/6.jpg)
TTABLE Önemli özellikleri Active : Boolean değer alır. Tablonun açık
veya kapalı( bağlı olup olmaması) konumunu belirtir.
Tablo üzerinde bir işlem yapılacaksa mutlak suretle açık yani true olmalıdır.
Asıl kontrolü kod içinden yapılmalıdır. Kullanıcının tablodaki işlemleri bittiğinde bir kez açıp kapamak en doğrusudur.
![Page 7: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/7.jpg)
TTABLE Önemli özellikleri 2 DataBaseName: Database Name’e BDE
içinden tanımladığınız herhangi bir alias’ı, projeniz içindeki Database bileşeninin Database Name’ini (bunlar combobox içinde otomatik olarak gelirler) veya paradox vb. gibi tablolar için tabloların bulunduğu dizinin adını verebilirsiniz.
Kısaca buraya önceden hazırladığımız veritabanının ALIAS ismini vereceğiz
![Page 8: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/8.jpg)
TTABLE Önemli özellikleri 3 Name : Kod içinde kullancağımız adı
buraya yazarız. Tablonun işlevine uygun bir ad vermek her zaman avantajlıdır
TableName: DatabaseName’i seçtikten sonra yapacağımız ilk iş olarak TableName vermektir. Bu alanda DataBaseName’de hazırlamış olduğunuz Tableların isimlerini görmek mümkündür. Buna bağlı olarak hangi table’ı kullanacaksanız o ismi seçmelisiniz.
![Page 9: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/9.jpg)
TTABLE Önemli özellikleri 3
![Page 10: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/10.jpg)
ÖRNEKprocedure
TForm1.Button1Click(Sender: TObject);
begin if table1.Active then begin button1.Caption:='AÇ'; Table1.Active:=false; end else begin button1.Caption:='KAPAT'; Table1.Active:=True; end; end;
![Page 11: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/11.jpg)
TTABLE Önemli özellikleri 4 TableType : hazırlanmış olan table ın hangi
ortamda olduğunu belirtir. Default kalması herzaman iyidir.
MasterFields : Link edilecek başka bir table varsa yani bir veritabanı içinde bağlantılı olan ana tablo ve onun yardımcı tabloları bu özellikten başlayarak ilişkilendirilir. Veri tabanından ana tablo ve ilişkiler önceden ayarlanmalıdır ki bu alanda herhangi bir seçenek çıkabilsin
![Page 12: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/12.jpg)
TTABLE Önemli özellikleri 5
Mastersource: bağlantı kurulan table’ın hangi alan adı ile ilişkilendirileceği belirlenir.
IndexName: Tabloda indexlenmiş bir alan burada gözükür. Programın ihtiyacına göre bu alan seçilebilir.
![Page 13: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/13.jpg)
Kayıta ulaşmak Herhangi bir kayıta ulaşmak veya istenilen
bir kayıtı bulmak için genel olarak üç çeşit yöntem kullanılır. Bunlar FindKey() Locate() Lookup() GotoKey() GotoNearest() FindNearest()Prosedürleridir.
![Page 14: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/14.jpg)
Findkey Findkey: index name ve index fields
özellikleri belirtilmiş olmalıdır. Bu fonksiyon istenilen kayıt bulunmuşsa True Table1.FindKey([değişken1,değişken2,…]) Buradaki değişken sayısı index fields özelliğinde tanımlanan veya index name ile belirtilen indexin sahip olduğu alan sayısına eşit olmalıdır ve o alanlara karşılık gelen değerler verilmelidir.
![Page 15: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/15.jpg)
Findkey Örnek: Index Fields=Numara olsun. Bu
durumda kod şu şekilde olmalıdır. Table1.FindKey([2500]) ;
Burada indekste belirtilen alanın tipi ile koda yazdığımız tip birbirini tutmalıdır. Eğer IndexFields=Adi;Soyadi şeklinde ise kod Table1.FindKey([‘Ahmet’,’SAVAŞ’])
şeklinde olmalıdır.
![Page 16: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/16.jpg)
FindNearest
FindKeyden farklı olarak yakınsak arama yapmak için kullanılır.
Kulanım biçimi Findkey gibidir.İkiside parametre olarak dizi alırlar.
Bu diziler indexlenmiş alan olmak zorundadır.
Aranacak bilgi tam yazılmasa da olur.
![Page 17: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/17.jpg)
Setkey:
Setkey yordamı field öğesine bir arama yapılacağını belirtir. dsSetKey bölümünü bir veri setini yerleştirmek ve aktif key bufferinin içeriğini temizlemek için kullanılır. Bu yordam kullanıldıktan sonra field öğesine yazacağınız değer GotoKey GotoNearest yordamları ile aratılır
![Page 18: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/18.jpg)
GotoKey - GotoNearest
Find yöntemleri ile aynı işi yaparlar. İndexlenmiş alanlarda kullanılırlar. Gotokey direk tahmini arar. Diğeri en yakın tahmini bulur.
table1.GotoKey; table1.GotoNearest;Şeklinde kullanılırlar.
![Page 19: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/19.jpg)
Locate
FindKey gibi çalışır. Fakat bunda alan isimlerini de kendiniz verirsiniz.
Eğer belirlediğiniz alanlara ait bir index varsa kullanılır, yoksa sıralı arama yapılır.
Diğerlerine nazaran daha fazla kullanılması tavsiye edilir.
![Page 20: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/20.jpg)
LocateTable1.Locate(‘adi;soyadi’,VarArrayof([‘Ahmet’,’SAVAŞ’]),
[loCaseInsensitive,loPartialKey]) şeklindedir. loCaseInsensitive: Büyük harf-küçük harf
ayrımı yapılmaz. loPartialKey: Bunu kullanırsanız eğer sadece
SAVAŞ’ı değilde eğer SAVAŞÇI da varsa onuda bulabilirsiniz.
![Page 21: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/21.jpg)
Lookup
3 parametre alır. Hangi sütun üzerinde arama yapılacak. Sonra alınacak değerler Arama işlemi olumlu sonuçlandıysa,
döndüreceği alan değerleri. Birden fazla sütun adı varsa araya “;” Lookup fonksiyonunu bir örnekte
kullanın.
![Page 22: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/22.jpg)
STATE
Table’ın durumu için kullanılan bir metottur.
İf table1.state in [dsinactive,dsedit,..]
Table durumuna göre işlem yapılmasını sağlar.
![Page 23: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/23.jpg)
TQuery:
Bu bileşende TTable bileşeni ile hemen hemen aynıdır. Fakat bu bileşen ve SQL yardımı ile kayıtlar üzerinde sıralama, sadece belli kayıtları görüntüleme vb. işlemler çok daha rahat yapılabilmektedir. Aynı şeyler TTable bileşenin Filter, Range gibi özellikleri kullanılarak da yapılabilir.
![Page 24: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/24.jpg)
TQuery:
Fakat, performans açısından bakıldığında TQuery’leri kullanmak her zaman faydalıdır. Query’ler normalde Read-Only’dirler, yani kayıtlar üzerinde değişiklik yapamazsınız.
![Page 25: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/25.jpg)
TQuery - RequestLive
Eğer kayıtlar üzerinde değişiklik yapmak istiyorsanız, RequestLive özelliğini True yapmalısınız
Yapılan değişiklikleri table'da olduğu gibi kaydedebilirsiniz. Fakat SQL cümleciğiniz birkaç tablodan veri alıp getiriyorsa o zaman RequestLive özelliğini kullanmazsınız
![Page 26: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/26.jpg)
TQuery - CachedUpdates
Bu şekildeki query’ler üzerinde değişiklik yapabilmeniz için önce CachedUpdates özelliğini True yapmalısınız. (RequestLive:=False)
CachedUpdates özelliği True yapıldığında kayıtlar üzerinde güncelleme, değiştirme ve silme yapabildiğinizi göreceksiniz
![Page 27: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/27.jpg)
TQuery - CachedUpdates
form1.Table1.RequestLive:=False
form1.Table1.CachedUpdates:=true; form1.Table1.edit;
![Page 28: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/28.jpg)
TUpdateSQL
Fakat bu değişiklikler sadece programda kalır ve fiziksel veritabanını etkilemez. Yaptığımız değişikliklerin kalıcı olması olması için TUpdateSQL bileşenini kullanırız.
![Page 29: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/29.jpg)
TStoredProc:
Bu bileşen SQL tabanlı veritabanları üzerinde yazdığınız prosedürleri veya fonksiyonları kullanmanızı sağlayan bir bileşendir. Eğer Oracle, Sysbase, SQL Server gibi veritabanı kullanmıyorsanız bu bileşene ihtiyacınız yok demektir
![Page 30: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/30.jpg)
TStoredProc:
Avantajları temel olarak şunlardır. Bu çalıştıracağınız prosedürler veritabanı üzerindedir. Normal kullandığınız query’lere göre çok daha hızlı çalışırlar. Network trafiğini asgari seviyeye indirirler. Yazacağınız prosedürle ilgili kullandığınız veritabanının dökümatasyonuna bakmalısınız.
![Page 31: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/31.jpg)
TDatabase:
Bu bileşeni yönetim kolaylığı sağlamak için kullanılbilir. Mesela A1 diye BDE alias’ınız var. Projedeki bütün herşey hepsi buna bağlı. Bunun ismini değiştirdiğinizde bütün projede gidip aliasları değiştirmeniz gerekir. Bunun yerine TDatabase bileşenini kullanırsanız, sadece bu bileşenin alias’ını değiştirdiğinizde projede buna bağlı ne kadar bileşen varsa hepsini etkileyecektir.
![Page 32: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/32.jpg)
TDatabase:
![Page 33: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/33.jpg)
TDataSource: Verilerinizin data controls
sayfasındaki bileşenler yardımı ile görüntülenmesi için table,query vb. gibi datasetleri mutlaka bir DataSource’a bağlamnız gerekir.
Kısaca Table, Query gibi nesnelerle VT’ye bağlantı kurulur. Vt’deki verileri ekrana basmadan önce datasetleri DataSource’ aktarılmalıdır.
![Page 34: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/34.jpg)
TDataSource:
![Page 35: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/35.jpg)
Kayıtlar - Gezinti
Bildiğimiz gibi tablodaki kayıtlar üzerinde hareketimizi sağlayan dataset metodları vardır.
Prior, Next, First, Last bunlardan bazılarıdır.
Next true değeri aldığında EOF, prior true değeri aldığında ise BOF olacaktır.
![Page 36: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/36.jpg)
Kayıtlar - Gezinti
İlk kayıt üzerindeyken bir önceki kayıda gidemeyiz. Çünkü BOF o anda true değerindedir. İlk kayıt üzerinde prior yaptığımızda değerimiz hala ilk kayıtta durur.
![Page 37: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/37.jpg)
Kayıtlar - Gezinti
Son kayıt üzerinde bu durum geçerli değildir. Bunun nedeni ise son kayıt üzerinde next yaptığımız taktirde EOF true olsa dahi yeni bir boş kayıt açılır. (Ghost Record) bu yeni bir kayıt girilebilir anlamındadır.
![Page 38: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/38.jpg)
Kayıtlar - Gezinti
Ayrıca Tablelar için post ve cancel methodları bulunur. Bu methodlar kayıt bazında gerçekleşmektedir. Kayıt üzerinde gerçekleşen değişiklikler post metodu ile kayıt edilir cancel metodu ile vazgeçilir. Eğer post veya cancel’ı çağırmadan başka bir kayda gidersek yine post metodunu devreye sokmuş oluruz.
![Page 39: DELPHI de Veritabanı](https://reader035.fdocuments.net/reader035/viewer/2022062217/56814299550346895daeca5f/html5/thumbnails/39.jpg)
Kayıtlar - Gezinti
Bir farklı uygulama ise kayıt girilirken ESC tuşuna basılırsa cancel metodu otomatik olarak devreye girer. Tabloya kayıt eklerken Append veya insert, kayıt silerken ise delete kullanmamız gerekmektedir.