DOSYALAMA İŞLEMLERİ ve MENÜ HAZIRLAMA

Programdaki bazı bilgilerin kalıcı olması için saklanması ihtiyacı her zaman vardır. Örneğin personelle ilgili işlemler yapan bir programın personel bilgilerini kaydetme imkanı sağlaması gerekir. Bunun için dosyalama işlemlerine gerek duyulur. Şimdi hazırlayacağımız projelerde kayıt giriş işlemi, kayıt düzeltme, kayıt silme ve liste alma işlemlerini ayrı ayrı inceleyelim.

15.1. Dosyaya Kayıt Girme

Öncelikle dosyaya kayıt olarak hangi bilgilerin yazılacağı belirlenmelidir. Bir kayıtta bulunan bilgileri dışarıdan girerken kullanmak üzere bir Form hazırlayacağız. Hazırlamak istediğimiz örnek veri tabanı dosyasına yazılacak her kayıtta şu bilgiler olacaktır:

1. Ad 4. Adres

2. Soyad 5. P.kodu

3. Telefon 6. Sehir

Kayıt bilgilerinin her birine alan adı verilmektedir. Kayıtta bulunan bütün bilgiler karaktersel tipte olacak. Bu amaçla hazırlayacağımız Giris adlı projenin formunda kayıtta bulunacak alanlarla aynı ada sahip TextBox'lar ve TextBox'lar için gerekli olan Label'ler hazırlanır. Kayıt girişi amacıyla kullanacağımız formun hazırlanmış hali Şekil 15.1'de verilmiştir.

Şekil 15.1: Kayıt giriş formu

Properties penceresinden de (Şekil 15.2) görüldüğü gibi formun başlığı "Kayıt Girişi" formun adı ise "GIRIS" olarak alındı. Ayrıca "Kayıt No" başlığına sahip olan Label nesnesinin hemen yanında bulunan ilk TextBox'a "kayıt no" ve diğerlerine ise sırasıyla "ad", "soyad", "telefon", "adres", "kod" ve "sehir" adları verildi.

Şekil 15.2: Properties penceresi

Formun üzerine yerleştirilen Textbox'lara girilen bilgileri her seferinde bir kayıt olarak hard diske yazmak için önceden bazı hazırlıklar yapılmalıdır. Girilecek bilgiler önceden hard diske bir kayıt olarak yazabilmek için daha önceden ilgili dosyanın açılması veya dosya hard diskte yoksa oluşturulması gerekir. Visual Basic'te veri tabanı dosyası hazırlama işlemi Qbasic'ten biraz farklıdır.

Visual Basic dahilinde, C ve Pascal programlama dillerinde olduğu gibi bir veya birden fazla normal değişkenden meydana gelen Kayıt (Record) tipinde bir değişkeni tanımlama imkanı vardır. Tanımlanan Record tipli değişken, dosyaya Put deyimi ile bilgi yazılırken, Put deyimine parametre olarak verilir.

Kayıt girişi için hazırlayacağımız projeye, kayıt tipli değişkenleri tanımlamak için BAS uzantılı "Module" dosyası ekleyeceğiz. Bu projeye Module dosyası eklememizin nedeni, kayıt tipli değişken tanımlama satırları, formlara ait program kodu yazılan pencerelere yazılamaz. Kayıt tipinde değişken tanımlama satırlarının projeye dahil edilen formların dışında ayrı bir BAS uzantılı dosyaya yazılması gerekir.

Projeye Module dosyası eklemek için Şekil 15.3'de görülen Project menüsündeki Add module seçeneğinden yararlanılır.

Şekil 15.3: Projeye Modül dosyası ekleme

Project menüsünden Add Module komutunu verirseniz ekrana projeye modül ekleme işlemi öncesinde Şekil 15.4'de görülen Add Module diyalog kutusu gelir.

Şekil 15.4: Add module diyalog kutusu

Eğer normal bir modül dosyası hazırlamak istiyorsanız Add Module diyalog kutusundan Module seçeneğini seçmeniz gerekir. Eğer bir Addin (İçine-ekle) dosyası hazırlayıp projeye dahil etmek istiyorsanız bu kez Addin seçeneğini seçmeniz gerekir. Projeye ilk kez module dosyası ekleniyorsa ekrana gelen module dosyasının başlığı Module1.bas olur. Bu pencere, Form için ekrana kod penceresinden görünüm olarak aynıdır. Artık kayıt tipli değişkenlerimizi tanımlayabiliriz. Kayıt tipli değişken tanımlama satırları Type-End Type bildiri deyimleri arasına yazılır. Tanımlanan değişkenlerin projenin diğer form ve modüllerinde kullanılabilmesi için Global bildiri deyimi ile tanımlanması gerekir. Değişkenlerin tanımlanması Şekil 15.5'de verilmiştir.

Şekil 15.5: Kayıt Tipli değişken tanımlama

Yukarıda görüntüsü verilen kayıt tipi değişken tanımlama örneğinde tanımlanan kayıt tipli değişkenin adını "Kayıtbilgisi", daha sonra "Kayıtbilgisi" değişkeninden yararlanarak tanımlanan Global özellikli değişkenin adını ise "Alanlar" olarak belirledik.

Artık kayıt girişi için gereken program kodlarını yazalım. Öncelikle bilgi kaydedilecek dosyanın açılması gerekir. Bunun için kullanılacak deyim adı Open. Giriş kısmında yalnızca kayıt girişi yapmak istediğimizden, proje başlatılır başlatılmaz kayıt yazılan dosya açılsın. Bu nedenle, Open ile dosya açma işlemini Form_Load() yordamına Şekil 15.6'da görüldüğü yazdık.

Şekil 15.6

Open deyimiyle açılacak dosyanın adı "Adres.dat" olarak seçildi. Open deyimiyle parametre olarak verilen For Random ile dosyanın random yani rasgele erişimli olduğu belirleniyor. Dosyaların hard diskteki adlarından başka bir de proje içinde geçeli olan adları vardır. Random dosyaların proje içindeki adları sayısal bir değerdir. Dosya adını temsil eden sayısal değerin önüne ayrıca "#" karakteri konur. Başka bir ifadeyle dosyanın proje içindeki adı 1 ile 255 arasında değişen bir değer olabilir. Open deyimine parametre olarak verilen son bilgi ise bir kaydın byte olarak uzunluğudur. Bu bilgi için Len() fonksiyonundan yararlanılır.

Random dosyalara kayıt yazarken her kayda bir kayıt numarası verilir. İlk kaydın numarası 1 olmak üzere her yeni kaydın numarası 1 arttırılır. Kayıtlara düzenli ve artan bir sırada kayıt numarası verilmezse dosyada gereksiz boşluklar oluşur. Bu nedenle dosyaya yeni bir kayıt yazılmadan önce, dosyaya o ana kadar kaç kayıt yazılmış olduğu öğrenilir. Dosyadaki mevcut kayıt sayısını öğrenmek için dosyanın byte olarak büyüklüğü, kayıt uzunluğuna bölünür. Burada kullanılan "KayıtNo" bilgisi bu şekilde hesaplanmaktadır. Lof() fonksiyonu, dosyanın byte olarak büyüklüğünü vermektedir.

Bulunan kayıt sayısı, dosyaya yeni bir kayıt yazma işlemi öncesi 1 arttırılarak KayıtNo adlı TextBox nesnesine yazılmaktadır. Yani formdaki KayıtNo adlı TextBox'a kayıt numarasını kullanıcı girmeyecek. Proje bu haliyle çalıştırıldığında dosyada henüz kayıt olmadığından Kayıt No etiketinin karşısında bulunan TextBox'a Şekil 15.7'de görüldüğü gibi 1 değeri yazılır.

Şekil 15.7

Yukarıdaki ekranda dikkat ederseniz, imleç kayıt girişini ikinci TextBox' tan itibaren beklemektedir. Bunun nedeni KayıtNo adlı TextBox nesnesine kayıt girişi engellenmiştir ve şu şekilde yapılmıştır ; Söz konusu Textbox aktif durumda iken Şekil 15.8'de görülen properties penceresinden TabStop özelliğine False değeri aktarılmıştır.

Şekil 15.8: TabStop özelliğinin False yapılması

Kayıt girişi projesi çalıştırıldığında, gelen pencerede Üç düğme veya buton bulunmaktadır. Bunlardan çıkış başlığına sahip olan düğme programı sonlandıracaktır. Çıkış butonuna, bu işlevi yüklemek için tasarım ekranında iken buton üzerinde çift tıklanırsa Şekil 15.9'da görülen kod sayfasına geçilir. Burada, çıkış için gereken, önce Close komutu ile dosyayı kapatmak ve End komutu ile programı sonlandırmaktır.

Şekil 15.9 : Çıkış düğmesine ait kod sayfası

Artık program çalıştırılıp gelen penceredeki çıkış düğmesine basıldığı zaman programdan çıkılır. Şimdi de Kaydet düğmesine basıldığı zaman TextBox'lara yapılan girişlerin dosyaya kaydedilmesi için gereken kodu Şekil 15.10'daki gibi yazıyoruz.

Şekil 15.10 : Kaydet düğmesine ait kod penceresi

Şimdi yukarıda (Şekil 15.10) ekran görüntüsü verilen program kodu penceresindeki program satırlarını inceleyelim. TextBox' lara girilen bilgileri dosyaya kaydedebilmek için öncelikle TextBox nesnelerinin içeriklerini tek tek "Alanlar" adlı kayıt tipli değişkenlere aktarmanız gerekir. Çünkü Put deyimine parametre olarak verilen bilgilerden biri kayıt tipli değişkendir. TextBox'lara girilen bilgiler aşağıda verilen program satırları ile kayıt tipli değişkenin elemanlarına aktarılmaktadır.

Alanlar.Ad=Giris.Ad

Alanlar.Soyad=Giris.Soyad

Alanlar.Tel=Giris.Tel

Alanlar.Adres=Giris.Adres

Alanlar.Kod=Giris.Kod

Alanlar.Sehir=Giris.Sehir

Bu işlemden sonra MsgBox() fonksiyonu ile kullanıcıdan onay alınmaktadır. MsgBox() fonksiyonu ile ekrana getirilen diyalog kutusunda Evet düğmesine tıklama yapılırsa aşağıda verilen program satırları işletilir.

İf Cevap=6 Then

Put #1, KayıtNo,Alanlar

KayıtNo=KayıtNo+1

Giris.Ad = " "

Giris.Soyad = " "

Giris.Tel = " "

Giris.Adres = " "

Giris.Kod = " "

Giris.Sehir = " "

Ad.SetFocus

End if

Bu program satırlarında önce Put deyimi ile kayıt tipli Alanlar değişkeninin içeriği dosyaya yazılmaktadır. Yazma işleminden sonra KayıtNo değişkeninin içeriği 1 arttırılmaktadır. Daha sonra TextBox'ların içeriğine boşluk değerleri aktarılıyor. Kaydet düğmesine tıklama yapılarak gerçekleştirilen kayıt işleminden sonra imlecin yerini belirlemek için SetFocus özelliğinden yararlanılır.

Kullanıcı formdaki TextBox'larda bulunan kayıt bilgilerini dosyaya yazmak istemiyorsa Vazgeç düğmesini seçebilir. Vazgeç düğmesi için hazırlanan program kodlarını Şekil 15.11'de verilen kod penceresinde görebilirsiniz.

Şekil 15.11 : Vazgeç düğmesine ait kod penceresi

Vazgeç düğmesini tıkladığınızda önce MsgBox() fonksiyonu ile dosyaya girilecek başka kaydın olup olmadığı konusunda onayınızı alır. Sorulan soruya Evet cevabının verilmesi halinde tekrar kayıt girişi yapılan forma dönülür. Eğer hayır cevabı verilirse End komutu ile programı sonlandırır.

15.2. Dosyadan Kayıt Okuma

Bir önceki konuda verilen proje örneğinde, hard diske açılan "Adres.dat" adlı dosyaya nasıl kayıt yapılacağı konusunda bilgi verildi. Şimdiki projemizde ise "Adres.dat" dosyasından nasıl bilgi okunacağı ve ekrana yazılacağı konusunda bilgi verilecektir.

Kayıt okumak amacıyla hazırlayacağımız projeyi hard diske Okuma.Vbp olarak kaydedeceğiz. Bu proje çalıştırıldığında, kullanıcı tarafından girilen kayıt nosuna göre kayıt dosyadan okunacak ve kaydın ayrıntıları Form üzerindeki TextBox nesnelerine yazılacak. Bu amaçla Şekil 15.12'deki gibi bir form düzenleyeceğiz. Bu form kayıt yazmak amacıyla kullanılan forma oldukça benzemektedir.

Şekil 15.12 : Kayıt Okuma formu

Bu formdaki ilk TextBox bilgi giriş amacıyla kullanılacak. Diğer metin kutuları sadece bilgi görüntüleme amacıyla kullanılacak. Bu nedenle ilk TextBox hariç bütün TextBox'ların TabStop özellikleri False durumuna getirilmelidir.

Proje çalıştırılır çalıştırılmaz önce kullanıcıdan kayıt numarası girilmesi istenir. Bu sırada "KayıtNo" adlı TextBox'ta dosyada bulunan en son kaydın numarası gelir. Girilecek kayıt numarası bu değerden küçük olmalıdır. Şekil 15.13'de verilen ekran görüntüsü, kayıt okumak amacıyla hazırlanan proje çalıştırıldıktan sonra alınmıştır.

 

 

 

 

 

 

 

 

 

 

Şekil 15.13

Dosyadaki kayıtların okunabilmesi için önce dosyanın açılması gerekir. Dosyanın açılması ve dosyada bulunan toplam kayıt sayısını bulmak amacıyla kullanılan program kodlarını, proje başlatılır başlatılmaz işletilmesini sağlamak için Form_Load yordamına Şekil 15.14'deki gibi yazıldı.

Şekil 15.14

Kayıt numarası girildikten sonra enter tuşuna basıldığında, ekrana kayıt bilgilerinin gelmesi için Şekil 15.15'deki kod sayfası düzenlendi.

Şekil 15.15

Keypress() olayı bir tuşa basılması ile işleme girmektedir. Basılan tuşun ASCII kodu, KeyAscii değişkenine aktarılır. Program satırında basılan tuş Enter, yani KeyAscii değişkenine aktarılan değer 13 olursa, önce Get komutu ile dosyadaki kayıt bilgileri Alanlar değişkenine aktarılmakta ve sonra Alanlar içerisindeki bilgiler TextBox'lara aktarılmaktadır ( Okuma.Ad=Alanlar.Ad gibi ).

Çıkış düğmesi için yazılacak kod ise Şekil 15.16'da görülen kod penceresindeki gibidir.

Şekil 15.16: Çıkış düğmesi kod sayfası

15.3. Kayıt Düzeltme

Bu kısımda kullanıcıdan, üzerinde değişiklik yapacağı kaydın numarasını girmesini isteyeceğiz. Kayıt numarası verilen kaydı dosyadan okuyup ekrana getirip kullanıcıya kayıtta değişiklik yapma imkanı vereceğiz. Eğer kayıt üzerinde herhangi bir değişiklik yapılmışsa, kaydın yeni şeklini tekrar dosyaya yazacağız. Bu işlemler için hazırlayacağımız form Şekil 15.17'deki gibi olacaktır.

Şekil 15.17: Kayıt düzeltme formu

Kayıt okumak amacıyla bir önceki konuda verilen Okuma.Frm formundan farklı olarak kayıt düzeltme başlıklı bu formda Kaydet ve Vazgeç düğmeleri bulunmaktadır. Kaydet düğmesi ile değişikliğe uğratılan kaydın tekrar dosyaya yazılması sağlanacaktır. Vazgeç düğmesi ise ekrana getirilip değiştirilen kayıt, dosyaya yazılmak istenmediği zaman kullanılacaktır.

Proje başlatılır başlatılmaz kayıt girişi yapılan dosyayı Open deyimi ile açacağız. Bu amaçla program satırlarını Form_Load() yordamına Şekil 15.18'deki gibi yazacağız.

Şekil 15.18

Burada adres.dat dosyası açıldıktan sonra Lof() fonksiyonu ile dosyanın byte olarak büyüklüğü ve Len() fonksiyonu ile bir kaydın uzunluğu bulunup birbirine bölünerek dosyadaki toplam kayıt sayısı hesaplanmaktadır. Hesaplanan bu değer KayıtNo değişkenine aktarılmaktadır. Proje bu haliyle çalıştırıldığında Şekil 15.19'da verilen ekran görüntüsü elde edilir.

Şekil 15.19

Program çalıştırılıp form yüklendikten sonra kullanıcıdan ilk olarak düzeltilecek kaydın numarası istenir. Düzeltilecek kaydın numarasının yazıldığı TextBox'ta ilk etapta kayıt sayını gösteren rakam ekrana gelir. Yukarıdaki ekran görüntüsünü aldığımız sırada dosyada 4 adet kayıt olduğu görülmektedir. Bir önceki konuda Kayıt Nosu girilen kaydın okunup ekrana getirilebilmesi için yapılan tanımlamaya göre Enter tuşuna basılması gerekiyordu.

Okunacak kaydın numarası yazılıp Enter tuşuna basılması ile kaydın dosyadan okunup ekrana getirilmesi için Şekil 15.20'de verilen program kodlarını yazdık.

Şekil 15.20

Bu program satırlarının işletilebilmesi için imleç KayıtNo adlı metin kutusu nesnesi içinde iken KeyPress olayının yani klavyeden bir tuşa basılması olayının meydana gelmesi gerekmektedir. Ne zaman klavyeden bir tuşa basılırsa Kayıtno_KeyPrees adlı yordam işletilir. Eğer basılan tuş Enter tuşu ise yani ASCII kodu 13 ise If - End If bloğu işletilir. Kayıtlar Get deyimi ile okunup, Alanlar adlı kayıt tipli değişkenlere aktarılan bilgiler daha sonra Duzeltme adlı formda bulunan aynı adlı TextBox'lara aktarılır.

Okunup ekrana getirilen kayıtta kullanıcı istediği değişikliği yapabilir. Yapılan değişikliklerden sonra kaydın yeni şeklini tekrar dosyaya yazmak için kaydet düğmesini kullanacağız. Bu düğmede tıklama yapılınca Kaydet_Click yordamı işletilecektir. Kaydet düğmesine ait program satırları Şekil 15.21'deki gibidir. Aşağıda verilen program satırlarında sadece Ad ve Soyad'da değişiklik yapılıp yapılmadığı kontrol edilecektir.

Şekil 15.21: Kaydet düğmesine ait kod penceresi

Kayıtta değişiklik yapılmışsa, kaydın yeni şekli dosyaya yazılmadan önce ekrana aşağıdaki (Şekil 15.22) mesaj kutusu gelir.

Şekil 15.22

Eğer burada verilen cevap Evet olursa secim değişkenine 6 değeri aktarılır ve önce TextBox'lardaki bilgiler Alanlar adlı kayıt tipli değişkenlere aktarılır daha sonra Put deyimi ile Alanlar'daki bilgiler dosyaya kaydedilir ve Textbox'ların içerikleri boşaltılır. Böylece kaydet düğmesi ile yapılan değişiklikler dosyaya kaydedilmiş olur.

Yapılan değişiklikler kaydedilmek istenmiyorsa Vazgeç düğmesi kullanılır. Bu düğme için yazılmış program kodu ise Şekil 15.23'deki gibidir.

Şekil 15.23 : Vazgeç düğmesine ait kod penceresi

15.4. Kayıt Silme

Rasgele erişimli bir dosyadan kayıt silmek için önce söz konusu dosya açılır. Ardından silinmek istenen kayıt, kayıt numarasına göre ekrana getirilir. Hazırlayacağımız form Şekil 15.24'deki gibi olacaktır.

Şekil 15.24: Kayıt silme formu

Şekil 15.25'deki kod sayfası ile diğer konularda olduğu gibi form yüklenince, başka bir deyişle proje çalıştırılınca silinecek kaydı içeren dosya açılır ve dosyadaki kayıt sayısı bulunur.

Şekil 15.25

Proje çalıştırıldığında, imleç Kayıtno adlı TextBox'ta kullanıcıdan okunup silinecek kaydın numarasını bekler. İstenen kayıt numarası girilip Enter tuşuna basılırsa, ilgili kayıt dosyadan okunup ekrana getirilir. Kayıt numarası girilip Enter tuşuna basıldığında söz konusu kaydın ekrana gelmesi için Şekil 15.26'daki program satırları yazılır.

Şekil 15.26: Girilen numaradaki kaydı ekrana getiren program satırları

Dosyadan okunup ekrana getirilen kaydı dosyadan silmek için Sil düğmesini kullanacağız. Silme düğmesine basıldığında Silme_Click yordamı altındaki program satırları işletilerek silme işlemi gerçekleştirilir.

Şekil 15.27: Silme işlemine ait program satırları

Silme düğmesine basıldığında Şekil 15.27'deki program satırları işletilir. Burada silinen kaydın dosyada yer kaplamsını önlemek için Adres.Tmp adında geçici dosya oluşturuldu ve silinen kayıt hariç dosyadaki bütün kayıtlar bu dosyaya yazıldı. Daha sonra Adres.tmp dosyası asıl dosya üzerine kopyalandı ve adres.tmp dosyası KILL komutu ile silindi. Böylece kayıt silme işlemi tamamlanmış oldu.

15.5. Menü Hazırlamak

Visual Basic'te menü hazırlamak oldukça kolaydır. Bu kısımda daha önce hazırladığımız kayıt girişi, kayıt okuma, kayıt düzeltme ve kayıt silme işlemlerini içeren bir menü hazırlayacağız. İlk olarak Şekil 15.28'deki gibi bir form hazırlayacağız ve formu Anaform.Frm adıyla hard diske kaydedeceğiz.

Şekil 15.28

Hazırladığımız projeyi ise hard diske Menü.Vbp adıyla kaydedelim ve bu projeye Giris.Frm, Okuma.Frm, Düzeltme.Frm ve Silme.Frm adlı daha önceden hazırlamış olduğumuz form dosyalarını ve kayıt tipi değişken tanımlama satırlarını içeren Giris.Bas adlı modül dosyalarını projeye, Project menüsündeki Add File seçeneği ile dahil edelim.

Üzerinde çalıştığımız projeye Frm ve Bas uzantılı dosyaları eklemek için Project menüsünden Add File seçeneğini seçecek olursak ekrana Şekil 15.29'daki Add File diyalog kutusu gelir.

 

 

 

 

 

 

 

 

 

 

 

 

 

Şekil 15.29: Add File diyalog kutusu

Projeye söz konusu form ve modül dosyalarını dahil ettikten sonra Project penceresi Şekil 15.30'daki gibi olur.

Şekil 15.30: Project penceresi

Kayıt girişi yapmak amacıyla kullanılacak düğmeye Kayıtgir, Kayıt okumak amacıyla forma eklenen düğmeye Kayıtoku ve kayıt düzeltmek için forma eklenen düğmeye ise Kayıtduz adını verdik. Proje çalıştırıldığında kullanıcı formdaki Kayıt girişi başlıklı düğmeye tıklarsa proje içindeki adı GIRIS olan form aktif olacaktır. Bunun için Anamenü adlı formun kod sayfasına geçilerek Şekil 15.31'deki program satırları yazılmalıdır.

Şekil 15.31: Kayıt girişi düğmesine ait kod penceresi

Kullanıcı formdaki Kayıt Girişi adlı düğmede tıklama yapınca GIRIS adlı form show metodu ile belleğe yüklenip aktif duruma getirilir. Aynı işlem diğer düğmelere de uygulanırsa bir menü vasıtasıyla kayıt girişi, kayıt okuma, kayıt düzeltme ve kayıt silme işlemleri kontrol edilmiş olur.