https://www.youtube.com/watch?v=4cbbuiBdOU8
Delphi ile Vcl Veri Tabanı İşlemleri
İçerik;
-Delphi ile veri tabanı bağlantısı Master Detail Bağlantı yapılması
-Grid üzerinde verilerin gösterilmesi
-Arama işlemlerinin yapılması
- Uygulamamız MsSql üzerinde olmak ile beraber Firedac'ın esnek özellikleri sayesinde destek verilen tüm veri tabanlarında aynı adımları takip ederek bağlanabilirsiniz.
Neden Delphi ile veri tabanı ile uygulaması geliştirmek tercih ediliyor?
Bu soruya verilebilecek çok fazla cevap olması ile beraber temelde 2 özellik yer alıyor.
- İleri seviye yazılım bilgimiz olmadan ileri seviye yazılım üretmemizi sağlıyor.
- Kolaylıkla Framework yapısının oluşturulabiliyor olması.
Delphide büyük bir veri tabanı uygulaması oluşturulurken izlenen yöntem ;
Delphi ile framework oluşturuyorsunuz. Bu framework’ten sizin oluşturduğunuz altyapı ile kullanıcılar kendi ihtiyacı olan raporları formları oluşturabiliyorlar. Delphi ile bu işlemi yapması oldukça kolay bunun nedeni ise delphideki dinamik kütüphanelerin çokluğu ve zenginliği.
Uygulamada kullanacağımız veri tabanı tabloları ve kolon bilgileri;
TBL_KAYIT: {ID, ADI, SOYADI, FOTO}
TBL_HAREKET: {HAREKET_ID, HAREKET_KAYIT_ID, HAREKET_ACIKLAMA, HAREKET_TUTAR}
Kullanılacak tablolarda birer tane otomatik artan sayı ve indexlenmiş alan olması önerilir.
Demo
Uygulamamızı açıyoruz. File> New> Vcl Application seçerek boş bir form açılmasını sağlıyoruz. Formumuzun üzerine FDConnection koyuyoruz.
FDConnection : Bir veri tabanı ile bağlantı kurmak ve ilişkili veri kümelerini yönetmek için kullanılır.
(Biz FireDAC’ın bileşenini kullandık fakat siz başka 3.parti bileşenlerini tercih edebilirsiniz. )
FDConnection’a çift tıklıyoruz açılan pencerede Driver ID = Mssql seçiyoruz siz hangi veri tabanına bağlanmak istiyorsanız onu seçebilirsiniz. Sürümlere göre erişilen veri tabanları değişiklik göstermektedir. (Community sürümü kullanıyor iseniz mssql veri tabanına bağlanamıyorsunuz)
Biz mssql seçtikten sonra Sql Server Management Studio’yu açıyoruz server name kısmını kopyalıyoruz FDConnection penceresindeki server alanına yapıştırıyoruz. Ücretli bir sql server versiyonunuz varsa o zaman bu kısma ip adresini yazmanız yeterli olacaktır. Database kısmına veri tabanı ismimizi yazıyoruz. User_Name ve Password alanlarını doldurmamız gerekiyor bu alanı doldurmanın iki yolu var. Birinci yol sql serverda bir kullanıcı oluşturmak ve kullanmak. İkinci yol OSAuthent kısmını yes seçmek bu şekilde Windows’ta login olduğumuz kullanıcı adı ve şifreyle yetki al demiş olduk. Eğer Windows’unuz ve sql server’iniz aynı domainde ise ya da aynı bilgisayarda ise ikinci yolu kullanabilirsiniz. Test butonuna tıklıyoruz ve bağlantının başarılı olduğu penceresini ekranda görebiliyoruz. FDConnection için Login Prompt özelliğini object inspector’dan false yapıyoruz.
Login Prompt: Bağlantıdan önce oturum açma penceresinin açılıp açılmayacağını belirtir.
Bu haliyle projemizi kaydedelim isimlendirmelerimizi yapalım. Unit1.pas > uMain , Project1.dproj> WebinarDb.
Formumuza tıklayıp object inspector kısmından name> frmMain olarak adlandırıyoruz. İsimlendirmeleri kendi uygulamanızın yapısına göre değiştirebilirsiniz. Formumuza FDQuery yerleştiriyoruz. Name> qKayit olarak değiştiriyoruz. Bu queryden TBL_KAYIT tablomuza ulaşacağımız için biz bu şekilde adlandırdık.
FDQuery : Sql sorgularını yürütmemizi, sonuç küme kayıtlarını görmeyi ve düzenlemeyi sağlar.
QKayit’ a çift tıklıyoruz ve açılan pencerede verisini almak istediğimiz tablo için sorgu yazıyoruz. Bizim sorgumuz;
SELECT * FROM TBL_KAYIT
Execute tıklayarak alt kısımda tablonun içindeki verileri görebiliyoruz.
Not: FDConnection’un connected özelliği her zaman false olmalı ve program açıldıktan sonra bir button yardımı ile açılmalı. Buna dikkat etmeliyiz çünkü bazı veri tabanlarında veri tabanına ulaşılamadığı için program açılmadan hata vermektedir.
Forma DbNavigator ve DbGrid ekliyoruz. Align’larını alTop yapıyoruz her ikisinin de. Ekran düzenini kendi isteğinize göre de ayarlayabilirsiniz. Bir adet DataSource ekliyoruz. Name> dsKayit olarak adlandırıyoruz. DbGrid ve DbNavigator’ün object inspector da DataSource alanlarını dsKayit olarak seçiyoruz. Aynı işlemi sağ tık ile bind visually seçerek açılan ekranda gerekli bağlamaları yaparak da gerçekleştirebilirsiniz. Bir adet Panel ekliyoruz. Align> bottom ayarlıyoruz. Panel’in içine bir adet button ekliyoruz. Align> alleft , name> btnConnect ayarlıyoruz. Butona çift tıklıyoruz;
procedure TfrmMain.btnConnectClick(Sender : TObject);
begin
FDConnection1.open();
qKayit.Open();
end;
Çalıştırıp buttona tıkladığımızda verilerin geldiğini görebiliyoruz.
Ek Bilgi : Nesneleri grid üzerinde değilde örneğin edit üzerinde göstermek istersek query’e sağ tık> fields editor seçerek açılan pencerede sağ tıklayıp add all fields seçerek bu alanda fieldsleri görebiliriz buradan forma sürükleyerek ya da edit bileşenleri yerleştirerek kullanabiliriz. Formu çalıştırdığımızda biz kayıtlar üzerinde gezdikçe editlerde de verilerin değiştiğini görebiliyoruz bunun sebebi editlerinde dbedit olmasıdır. Bu halini projemizde kullanmayacağız örnek olması açısından formdaki görüntüsü aşağıdaki gibidir;
Forma bir query daha ekliyoruz. Name> qHareket olarak adlandırıyoruz. Query’e çift tıklıyoruz. Açılan pencereye ; SELECT * FROM TBL_HAREKET yazıyoruz. 1 Tane FDConnection olduğu için otomatik olarak ona bağlandı execute tıklayınca aşağıda verileri görebiliyoruz. qHareket’in object inspectordan MasterSource kısmını >dsKayit , MasterFields> ID, IndexFieldName> HAREKET_KAYIT_ID seçiyoruz. Forma bir tane daha DataSource yerleştiriyoruz. Object inspectorda Name> dsHareket , DataSet> qHareket yazıyoruz. Bir adet DbGrid ve DbNavigator yerleştiriyoruz. DbGrid align> alclient. DbNavigator> align albottom seçiyoruz. Her ikisininde DataSource kısmını dsHareket seçiyoruz.
btnConnectClick buttonuna ekliyoruz;
qHareket.Open();
Çalıştırıyoruz ve navigatörlerden yardım alarak hareket tablomuza kayıt ekliyoruz. Kayıt tablomuzda kayıtları geziyoruz. Kayıtları eklediğimiz idlere geldiğimizde hareket tablosundaki kayıtları görebiliyoruz.
Master Detail kısmı bu şekildeydi fakat burada dikkat etmemiz gereken bir konudan bahsetmek istiyorum. qHareket querysini açalım execute ettiğimizde görüyoruz ki tüm kayıtlar geliyor. Bu şekilde olması doğru değil. Burada where ile filtreleyerek parametre ile sorgulamamız gerekiyor. Master kısmında seçilen id’ye sahip detail kısmının gelmesi için. Bizim tablomuz için sorgumuzun yeni hali ;
SELECT * FROM TBL_HAREKET
WHERE HAREKET_KAYIT_ID = :kayit_id
Bulunduğumuz pencerede 2. sekme olan parameters sekmesine geliyoruz. Burada yazdığımız parametrenin (kayit_id) oluşturulduğunu görüyoruz. Paramtype > ptInput, DataType> ftString seçiyoruz. Kendimiz doğru sonuç verip vermediğini kontrol etmek için value kısmına tabloda verisi olan idllerden birini yazarak execute tıklayarak deniyoruz ve aşağıda verileri görebiliyoruz. Formu çalıştırdığımızda aynı şekilde sonucu göremiyoruz bunu düzeltmek için qKayit’ın object inpsctordan event kısmından AfterScroll’a çift tıklıyoruz;
procedure TfrmMain.qKayitAfterScroll(DataSet : TDataSet);
begin
qHareket.Params[0].Value := qKayitID.value ; //(burada fieldbyname’ de kullanabilirsiniz)
qHareket.close;
qHareket.Open();
end;
Bu kod aynı anda işlemin ekrandaki nesnelerde gözükmesini sağlayacaktır. Bu şekilde bu kısmı da tamamladık.
Formun çalışır görüntüsü aşağıdaki gibidir;
Edit ile arama işlemini yapmak için az önce kullandığımız proje üzerinden devam edeceğiz. Projemize eklemeler yaparak kolayca tamamlayacağız. Bir panel ekliyoruz panelin içine bir adet button ve edit ekliyoruz. Button için text> ara, name>btnAra. Edit için textini temizliyoruz, name> EditAra şeklinde adlandırıyoruz. Buttona çift tıklıyoruz. Kodlarımızda query’nin sql kısmına ekleme yapacağız fakat önceden sql’ de yazılı olan sorgu için bir global değişken tanımlıyoruz. oldSql : string tipinde tanımladık bunu bu kısımda kullanacağız.
procedure TfrmMain.btnAraClick(Sender : TObject);
begin
qKayit.close;
oldSql := qKayit.sql.text;
qKayit.sql.clear;
qKayit.sql.Add(‘SELECT * FROM TBL_KAYIT’);
qKayit.sql.Add(‘WHERE ADI = ‘+ QuotedStr(EditAra.text)’);
qKayit.open();
end;
Edite tablodan bir kayıt yazdığımızda filtrenin çalıştığını verinin geldiğini görüyoruz.
Formun çalışır haldeki görüntüsü aşağıdaki gibidir;