VERİTABANI UYGULAMALARI

Benzer belgeler
VERİTABANI Veritabanı Yönetimi

İNTERNET PROGRAMLAMA 2 A S P. N E T. Marmara Teknik Bilimler MYO / Hafta 5 Veri Tabanı İşlemleri

VISUAL BASIC TE VERĠ TABANI ĠġLEMLERĠ

Bu işleçlerin dışında, aşağıda belirtilen karşılaştırma işleçlerinden de yararlanılır.

DAO İLE SQL KOMUTLARI. Sql komutlarını artık veri tabanında kullanmaktan başka çaremiz yok arkadaşlar. Şimdi bu sql derslerimize başlayalım.

SQL'e Giriş. SELECT Deyimi. SQL Komutları. Yardımcı Deyimler

INPUTBOX() ile Veri Girişi

MOBİL UYGULAMA GELİŞTİRME

OTOBÜS İŞLETMESİ OTOMASYONU. Otobüs işletmesi Otomasyonu hazırlanırken takip edilen Yazılım Geliştirme Süreçleri yukarıda gösterilmiştir.

PostgreSQL ve PL/pgSQL

GÜZ YY. - MKT103 - GÖRSEL PROGRAMLAMA DERSİ - ARA SINAVI

VERİ TABANI YÖNETİM SİSTEMLERİ II. 9. FORMLAR ve ORACLE FORMS PROGRAMINDA FORM OLUŞTURMA

İnternet Programcılığı

ORACLE DA KÜRSÖRLER. Gerekli sistem değişkenleri

SAKLI YORDAM (Stored Procedure) Sibel Somyürek

BÖLÜM 6 6. VERİ ERİŞİM NESNELERİNİN KULLANIMI 6.1. GİRİŞ

Uygulama 1) Aşağıdaki genel (global) değişken tanımlamalarını VB üzerinde yapınız. Süre 10 dak.

HSancak Nesne Tabanlı Programlama I Ders Notları

PostgreSQL ve PL/pgSQL

AOSB 2017 EĞİTİM PROGRAMI

Diziler İndisli Değişkenler

Yaptığımız web sitelerinin daha kullanışlı olması için veritabanı sistemleri ile bağlantı kurup ihtiyaca göre verileri okuyup yazmasını isteriz.

VERİ TABANI YÖNETİM SİSTEMLERİ-II

Def bildiri deyimi projenin general,declarations bölümünde tanımlanmalıdır

8 Oracle da tablo yapısı içinde otomatik artan kolon yoktur. (identity kolon

1. VERİ TABANI KAVRAMLARI VE VERİ TABANI OLUŞTUMA

Uygulamalar 4 IsMissing Fonksiyonlar ve Alt Programlar Prosedür Parametreleri Public Function f(x,y,optional t, Optional k) End Function 1.

VERİ TABANI I. Yrd.Doç.Dr. İlker ÜNAL. Teknik Bilimler Meslek Yüksekokulu

Bu uygulama, MSGBOX fonksiyonun ve Form nesnesinin QueryUnload olayının kullanımı ile ilgili bir uygulamadır.

11TA Veritabanı Organizasyonu Dersi MS ACCESS Ders Notları

Bölüm 10: PHP ile Veritabanı Uygulamaları

VERİTABANI & VERİTABANI YÖNETİMİ

Microsoft SQL Server 2008 Oracle Mysql (Ücretsiz) (Uygulamalarımızda bunu kullanacağız) Access

Oracle da kullanılan veri tipleri:

5 SQL- Yapısal Sorgulama Dili. Veritabanı 1

Sorgudan elde edilen değerin değişkenlere aktarılmasını sağlar. Sorgudan tek satır dönmesi gerekir. Çok satır dönerse hata verir.

Veri Tabanı SQL Server ve Management Studio kurulum linkleri:

Pascalda oluşturulacak dosyalar değişkenler gibi programın başında tanımlanır.

SQL e Giriş. Uzm. Murat YAZICI

Veritabanı üzerinde tablolara ve alanlara uygulanabilecek birçok kural vardır.

Bölüm 4: DDL Veri Tanımlama Dili

Üst Düzey Programlama

Yukardaki gibi sonsuz döngülü programlara Ctrl+Break tuş takımı ile müdahale edilmesi gerekir, aksi halde program sonsuz döngüye girer.

VERİ TABANI YÖNETİM SİSTEMLERİ II. 5. SQL PROGRAMLAMADA CURSOR (İMLEÇ) ve TRIGGERS (TETİKLEMELER)

VERİ TABANI YÖNETİM SİSTEMLERİ

Access e Nasıl Ulaşılır. Araç çubuklarını yeniden düzenlemek için Görünüm komutunun Araç çubukları seçeneği kullanılır.

"SQL Server Management Studio" yazılımını yüklemek için alttaki resmi sitesinden 180 günlük deneme sürümünü indirebilirsiniz.

1. Excel Dönüşümü : 2. Rapor Master Tanımları :

ADO.NET. Öğr. Gör. Emine TUNÇEL Kırklareli Üniversitesi Pınarhisar Meslek Yüksekokulu

Oracle Database 11g: Introduction to SQL

Vbnet Vbne access bağ ba lant lan ı t s ı ı s, ekleme, güncelleme,,silme

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

BLG4134 Görsel Programlama III. Öğr. Grv. Aybike ŞİMŞEK

Data Programming SQL Language. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

VERİTABANI. SQL (Structured Query Language)

SQL veri tabalarına erişmek ve onları kullanmak için geliştirilmiş bir lisandır.

Veritabanına Giriş. Oğuzhan Ceylan. 19 Eylül 2011

ACCESS PLATFORMUNDA SQL

Veri Taban ve Visual Basic

Şekil 2.31: Proje yöneticisi penceresinden değişkenleri tanımlama

OTURUM AÇMA ADLARI. Tavsiye Edilen Önhazırlık Enterprise Manager'i kullanabilmek.

Timer İle arka plan renk değişimi

10-Veri Tabanları.

Veritabanı. SQL (Structured Query Language)

VİSUAL BASİC İN VERİ TABANLARI İLE ETKİLEŞİMİ

Sorgudan elde edilen değerin değişkenlere aktarılmasını sağlar. Sorgudan tek satır dönmesi gerekir, aksi durumda hata olur.

SORGULAR VE ÇEŞİTLERİ II

SQL Uyarı Programı Kurulum ve Kullanımı

Erişim Makina. IFS Admin Kullanım Klavuzu. Umut Aytaç Mutlu

OPTION BUTTON ve ELSEIF UYGULAMALARI

Swing ve JDBC ile Database Erişimi

Durum Yönetimi. Olan sayfalar ekleyelim. BasitSayac.aspx

-- işareti tek satırlık açıklamalarda kullanılır. Açıklama olarak yazılan satırın önüne konulması yeterlidir.

Laboratuvar 2 Tek Kayıt Fonksiyonları

UYGULAMALAR. İkinci liste kutusu (List 2) Birinci liste Kutusu (List 1) Metin Kutusu

BİR İNŞAAT ŞİRKETİNİN DEPO İŞLERİ TAKİP PROGRAMININ ACCESS İLE OLUŞTURULMASI

3. Hafta Tablo İşlemleri BPR255 Veritabanı. Bu Derste Öğrenecekleriniz: 1. Tablo İşlemleri Kısıtlamalar (Constraints)

=A1+A2-A3, =A1*A2/A3,

SORGULAR. Öğr.Gör.Volkan Altıntaş

Asp.Net Veritabanı İşlemleri

INPUTBOX KULLANIMI. Komut Düğmesine uygulanan algoritma örneği

Veri Tabanı Tasarım ve Yönetimi

Visual Basic 6.0. Anadolu Üniversitesi Endüstri Mühendisliği Bölümü. Değişkenler ve Veri tipleri. Ders Notları

Tablolar Arası İlşikiler ve Alan Özellikleri Siparis.musteri_no musteri.musteri_no Siparis.urun_kodu musteri.urun_kodu

Kets DocPlace LOGO Entegrasyonu

Vega Ayarları. Vega Programının kurulu olduğu veritabanı ve web servisi için bağlantı ayarlarının yapıldığı menüdür.

Veritabanı sistemlerinde veri bütünlüğünü sağlayabilmek için CONSTRAINTS olarak adlandırılan bazı zorlayıcı ifadeler kullanılabilir.

İNTERNET PROGRAMCILIĞI DERSİ

SQL Deyimleri. Öğr.Gör.Volkan ALTINTAŞ Volkanaltintas.com

AYAKTAN HASTA İLAÇ MUAFİYET RAPORU

VERİ TABANI YÖNETİM SİSTEMLERİ II. 10. FORMLAR ve VISUAL BASIC PROGRAMINDA FORM OLUŞTURMA

13 Aralık Đlgili Versiyon/lar : ETA:SQL, ETA:V.8-SQL. Đlgili Modül/ler : Raporlar. Kullanıcı Tanımlı Raporlar Bölümünden Yapabildiklerimiz

SQL'e Giriş. SELECT Deyimi. SQL Komutları. 1. DDL (Data Definition Language - Veri Tanımlama Dili)

1 Temel Kavramlar. Veritabanı 1

İçindekiler Tablosu Talep Destek Yönetim Sistemi Programı...3

İLERİ VERİTABANI SİSTEMLERİ SUAT ÜSTKAN

Veritabanı Tasarımı. DML İşlemleri ve Görünümler

Enlil programını açtığımızda karşımıza gelen ilk ekrandır.bu ekranda özel tanımlanmış kullanıcı kodu ve parola ile programa giriş sağlanmaktadır.

Tablolar Arası İlşikiler ve Alan Özellikleri. Şekil 1. Magaza veritabanının tabloları ve tablolar arasındaki ilişkiler

Transkript:

VERİTABANI UYGULAMALARI 2001

DAO Modeli VERİTABANI UYGULAMALARI Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek için öncelikle aşağıdaki şemayla gösterilen, VB nin veritabanı erişim nesnelerinin bilinmesi gerekir. Bu şema, DAO (Database Access Objects) modeli olarak adlandırılır. Modelde yer alan nesneler kısaca açıklanmıştır. Konu içersinde yeri geldikçe bu açıklamalar detaylandırılacaktır. DBEngine (Veritabanı Motoru) : DAO modelinin en üst seviyedeki nesnesidir. Diğer tüm nesneleri içerir ve hiyerarşik yapı içersinde denetimlerini gerçekleştirir. Workspace (Çalışma Alanı) : Bir kullanıcı için tanımlanmış oturumu belirtir. Açık durumda olan veritabanları çalışma alanı içersinde yer alırlar. Yerel (native) verilere erişmek için kullanılan Microsoft Jet database engine ya da Harici (external) verilere erişmek için kullanılan ODBCDirect yöntemlerine bağlı olarak iki farklı türde workspace tanımlanabilir. Connection (Bağlantı) : Bu nesne, bir ODBC (Open Database Connectivity) veritabanına bağlantıyı gösterir. (Sadece ODBCDirect workspace için geçerlidir) Database (Veritabanı) : Açık konumdaki veritabanını gösterir. Group (Grup) : Workspace secure workgroup (güveni çalışma grubu) özelliği taşıdığında, ortak erişim haklarına sahip kullanıcıların oluşturduğu bir kullanıcı grubu tanımlar. (Sadece Microsoft Jet workspaces için geçerlidir) User (Kullanıcı) : Belirli erişim haklarına sahip (secure workgroup durumunda) bir kullanıcı hesabı tanımlar. (Sadece Microsoft Jet workspaces için geçerlidir) QueryDef (Sorgu Tanımı) : Microsoft Jet database ya da ODBCDirect workspace için tanımlanmış bir sorguyu gösterir. RecordSet (Kayıt Kümesi) : Taban tabloda yer alan tüm kayıtları ya da çalıştırlan bir sorgu neticesinde elde edilen kayıtları gösterir. 2

TableDef (Tablo Tanımı) : Taban tablosunun ya da bağlantılı tablonun (linked table) tanımını içerir. Container (Taşıyıcı) : Benzer türdeki Document nesnelerini gruplar. Document (Belge) : Bir nesnenin örneği (instance) hakkında bilgileri içerir. Nesne bir veritabanı, kaydedilmiş bir tablo, sorgu(query) ya da ilişki(relationship) olabilir. Relation (İlişki) : Tablolar içersinde yer alan alanlar ya da sorgular arasındaki ilişkileri tanımlar. Field (Alan) : Tabloda yer alan verilerden aynı türde olanların oluşturdukları kolonları gösterirler. Index (Dizin) : Veritabanı tablolarında yer alan verilerin sıralamalarını tanımlar ve çift (duplicate) kayda izin verilip verilmeyeceğini belirler. Veritabanına etkin ve hızlı erişimi sağlar. Parameter (Parametre) : Sorguda belirtilen değerleri taşır. 1. Bir WorkSpace Yaratmak Bu işlem için kullanacağımız metot CreateWorksapce dir. Genel kullanımı aşağıdaki gibidir: Set myworkspace = CreateWorkspace(name, user, password, type) Burada myworkspace, modül ya da ilgili formun tanımlamalar (general declarations) bölümünde Dim bildirimi ile ya da projenin modülü içersinde aşağıdaki biçimde tanımlanmış olmalıdır: Global myworkspace As Workspace Metodun parametreleri aşağıda açıklanmıştır: name :Yaratılan WorkSpace nesnesini tek olarak ifade edecek string türünde bir isim. Boş string olarak belirlenebilir. ( ) user :Yaratılan WorkSpace nesnesinin sahibi olan kullanıcıyı belirleyen bir stirng. Geçerli olarak admin olarak belirlenebilir. password :Kullanıcıya ait şifreyi belirleyen bir stirng. En fazla 14 karakter uzunluğunda olabilir. type :Opsiyonel. Yaratılan worksapce in türünü belirleyen bir sabit. Aşağıda örnek bir workspace yaratılmıştır. Bu kod, projenin ana formunun FormLoad olayı içersinde yer almaktadır: Set myworkspace = CreateWorkspace("", "admin", "", dbusejet) 3

Daha önce wrkjet nesnesinin projenin modülünde yukarıdaki örnekte olduğu gibi tanımlanmış olduğu varsayılmıştır. 2. Bir Veritabanı Açmak Yaratılan workspace nesnesi altında bir veritabanı açabiliriz. Ama öncelikle bu veritabanının yaratılmış olması gerekir. Bu işlemi iki şekilde gerçekleştirebiliriz: VB den bağımsız olarak kullanılan veritabanı sisteminin arayüzü ve sihirbazları kullanılarak, Doğrudan kod içersinden SQL (Strucrtured Query Language-Yapısal Sorgu Dili) kullanılarak. Sağladığı kolaylıklar nedeniyle bu yöntemlerden genellikle ilki tercih edilir. Genel olarak VB gibi tüm görsel programlama dillerinde veritabanı uygulamalarını iki ana grupta inceleyebiliriz. Bunlardan ilki, derleyici ya da programlama aracının veritabanına yerel (native) olarak bağlanmasıdır. Bu genellikle, her iki tarafı da (yani derleyici ve veritabanını) aynı üretici firmanın geliştirdiği durumlarda mümkün olmaktadır. Örneğin VB, MS Access veritabanına (mdb) yerel olarak bağlanabilmektedir. Ancak bu, VB nin başka herhangi bir veritabanına bağlanamamasını gerektirmez. Bu da ikinci grup veritabanı uygulamalarını oluşturur. Bu durumda, uygulama ile veritabanının karşılıklı olarak konuşup anlaşabilmelerini sağlayan bazı aracı sürücü (driver) dosyalarına gereksinim vardır. Bu sürücülere ODBC (Open Database Connectivity) sürücüler adı verilir. Aşağıdaki resimler örnek olarak bir VB programı ile MS Access ve Oracle veritabanları arasındaki iletişimi simgelemektedir: İşletim sistemlerinin konfigürasyon ayarlarında ODBC sürücülerinin tanımlanabileceği bölümler mevcuttur. Derleyici ya da veritabanı sistemleri genellikle çok popüler olan yazılımlar için ODBC sürücülerini de birlikte verirler. Bunun yanı sıra bir çok üretici firma, programlama dilleri ile farklı veritabanları arasında iletişimi gerçekleştiren ODBC sürücüleri üretmektedir. Bunların karşılaştırma kriterleri genellikle veri aktarım hızları üzerine kurulmuştur. 4

Biz öncelikle mdb veritabanı bağlantılı örnekler üzerinde çalışacağız. Dolayısıyla aşağıdaki tanımlamalarda uygulamamız ile aynı dizin altında ornek.mdb adlı bir Access veritabanı dosyasının yaratılmış olduğunu varsayacağız. Bu veritabanında ANATABLO adında aşağıdaki formatta bir tablomuz olsun: (base tabletaban tablo) Alan Adı : AD Alan Adı : SOYAD Alan Adı : SICILNO Alan Adı : GRSYIL Türü : Text Türü : Text Türü : Text Türü : Number İlk olarak projemizin modülünde veritabanımızı tanımlayalım: Global mydb As Database Projenin ana formunun FormLoad olayı içersinde bu veritabanını daha önceden tanımlanan WorkSpace üzerinde, Set database = workspace.opendatabase (dbname, options, read-only, connect) biçiminde açabileceğimiz gibi, Set database = OpenDatabase (dbname, options, read-only, connect) biçiminde çalışma alanından bağımsız olarak da açabiliriz. Bunun için aşağıda açıklanan OpenDatabase metodunu kullanacağız: database :Açılmak istenen veritabanını taşıyacak değişken. workspace :Opsiyonel. Veritabanımızı içerecek workspace nesnesini taşıyan değişken. Eğer belirtilmezse geçerli workspace olarak alınır. dbname :mdb dosyasının tam adı (yolu ile birlikte) ya da eğer ODBC bağlantısı yapılıyorsa ODBC kaynağının DSN (Data Source Name) adı. Options :Opsiyonel. Açılan veritabanı için belirlenecek özel seçenekler. read-only :Opsiyonel. Eğer true olarak belirlenirse veritabanı read-only (yalnızca okunabilir) olarak açılır, aksi takdirde hem okunabilir hem yazılabilir açılır. connect içeren string. :Opsiyonel. Veritabanına bağlantı ile ilgili (kullanıcı adı, şifresi gibi) bilgileri Bu durumda FormLoad olayında yer alacak örnek kodumuz aşağıdaki gibi olur: Set mydb = OpenDatabase(App.Path & "\ornek.mdb", False) 5

3. Veri Kümesi (RecordSet) Veritabanının, bilgileri tablo adı verilen yapılarda taşıdığını biliyoruz. İlk amacımız, ele aldığımız veritabanının tablosuna yeni bir bilgi yazmaktır. Bunun için gerekli görsel düzenlemelerin yapıldığını varsayarsak, işlemi soyut bir yapı olan RecordSet üzerinde gerçekleştirmemiz gerekir. Bunun için öncelikle bir RecordSet in nasıl açıldığını öğrenelim. Bu işlemi SQL kullanarak gerçekleştireceğiz. Set recordset = object.openrecordset (source, type, options, lockedits) recordset object :Açılmak istenen RecordSet i taşıyacak nesne değişkeni. :RecordSet in içerildiği nesneyi gösteren değişken. source : Recordset in içerdiği kayıtları (records) belirleyecek kaynak. En kullanışlı yöntem bir SQL ifadesinin kullanılmasıdır. type : Opsiyonel. RecordSet in türünü belirten sabit. (DynaSet : Hem okunabilir, hem yazılabilir tip; SnapShot : Sadece okunabilir tip-daha hızlı) Options : Opsiyonel. Açılan RecordSete ait seçeneklerin belirlendiği sabitler kombinasyonu. Lockedits : Opsiyonel. Açılan RecordSete ait kilitleme seçeneklerinin belirlendiği sabit. Şimdi örnek veritabanımız üzerinde çalışmaya devam edelim. İlk olarak açtığımız veritabanı üzerinde dynaset türünde yeni bir RecordSet açalım: Set MyRS = mydb.openrecordset("select * FROM ANATABLO", dbopendynaset) SQL Öğreniyorum! SELECT : SEÇ * : TÜMÜ (ALL) FROM : -DEN, -DAN SELECT * FROM ANATABLO : ANATABLO isimli tablodan tüm kayıtları seç Peki açtığım RecordSet acaba dolu mu yoksa boş mu? Nasıl anlayabilirim? Bunun iki yolu vardır. Bunlardan birincisi: If MyRS.EOF = False Or MyRS.BOF = False Then... (1) Bu koşul MyRS'de kayıt bulunduğunu garanti etmektedir. Eğer hem MyRS.EOF hem de MyRS.BOF True oluyorsa recordset boştur. Bu koşul kullanılmadığı takdirde Eğer recordset boş ise bilgiler alınmaya çalışıldığında No current record hatasıyla karşılaşılır. BOF : Eğer RecordSet içersindeki o anki kayıt pozisyonu ilk kayıttan önce ise true, aksi takdirde false değerini dönderir. 6

EOF : Eğer RecordSet içersindeki o anki kayıt pozisyonu son kayıttan sonra ise true, aksi takdirde false değerini dönderir. O halde RecordSet imiz için iki durum söz konusudur: Ya hiçbir kayıt girilmemiştir, ya da daha önceden kayıtlar vardır. İlk durumda yeni kayıt girilmesi gerekir. Bunu şu şekilde gerçekleştiriyoruz: MyRS.AddNew MyRS.Fields("AD") = UCase(Text1.Text) MyRS.Fields("SOYAD") = UCase(Text2.Text) MyRS.Fields("SICILNO") = UCase(Text3.Text) MyRS.Fields("GRSYIL") = UCase(Val(Text4.Text)) MyRS.Update Tabii görsel düzenlememiz sırasında tablodaki alanlara uygun text kutularının karşılık geldiğini varsayıyoruz. İkinci duruma gelelim. Yani veritabanında daha önceden kaydedilmiş kayıtlar olsun. Bu durumda öncelikle ilk kaydın formumdaki ilgili alanlara yerleşmiş olmasını isterim. Eğer RecordSet imde kayıt olup olmadığını yukarıda açıklanan birinci yolla anladıysam, (1) koşulundan hemen sonra aşağıdaki kodları yazmam yeterli olacaktır. Çünkü RecordSet açıldığında konum otomatik olarak ilk kayıt üzerindedir: Text1.Text = MyRS.Fields("AD") Text2.Text = MyRS.Fields("SOYAD") Text3.Text = MyRS.Fields("SICILNO") Text4.Text = MyRS.Fields("GRSYIL") Eğer (1) koşulunu kullanmadıysam bu durumda şu metodu kullanabilirim: MyRS.MoveFirst If Not MyRS.NoMatch Then Text1.Text = MyRS.Fields("AD") Text2.Text = MyRS.Fields("SOYAD") Text3.Text = MyRS.Fields("SICILNO") Text4.Text = MyRS.Fields("GRSYIL") Else : MsgBox Kayıt Bulunamadı Bu durumda da RecordSet lerin NoMatch özelliği kullanılarak (Kayıt varsa false, yoksa true değerini alır) ilk kaydın ilgili alanlarda görüntülenmesi sağlanmıştır. 7

Şimdi kayıtlar arasında ileriye doğru gezinmemizi sağlayacak bir butonumuz olduğunu varsayalım ve bu butonun nasıl bir koda sahip olacağını görelim: Private Sub BtnIleri_Click() MyRS.MoveNext If Not MyRS.EOF Then Text1.Text = MyRS.Fields("AD") Text2.Text = MyRS.Fields("SOYAD") Text3.Text = MyRS.Fields("SICILNO") Text4.Text = MyRS.Fields("GRSYIL") Kayıtlar arasında geriye doğru gezinmemizi sağlayacak BtnGeri butonun kodu da benzer olacaktır. Farkı, ikinci satırdaki MoveNext metodu yerine MovePrevious metodunun, koşulda ise EOF yerine BOF özelliğinin kullanılmasıdır. ÖRNEK PROJE Bazı temel metot ve özelliklerin kullanılışını geliştireceğimiz örnek bir uygulama üzerinde görelim: Projemiz, program dosyaları ile aynı konumda olması gereken ornek.mdb adlı veritabanı dosyasını kullanacaktır. Aşağıda bu dosya tarafından içerilecek tabloları görüyorsunuz: Görüldüğü gibi veritabanımız üç adet tablodan oluşmaktadır. Bunlardan ilki olan anatablo, kişilere ait bilgileri, copkutusu silinen bilgiler ile silinme tarih ve saatini tutacaktır. Ayarlar tablosu ise programın kayıt silme onayı, çıkış onayı ve çöp kutusunu boşaltma onayı gibi ayarlarını saklayacaktır. Şimdi projeyi oluşturan formları ve bu formlara ait kodları verelim: 8

AnaForm Private Sub CmdAbout_Click() FrmAbout.Show 1 Private Sub CmdArama_Click() FrmArama.Show 1 Private Sub CmdAyarlar_Click() FrmAyar.Show 1 Private Sub CmdCikis_Click() Set optrs = mydb.openrecordset("ayarlar", dbopensnapshot) optrs.movefirst If optrs.fields("cikonay") Then FrmCikOnay.Show 1 Else End Private Sub CmdCopDok_Click() On Error Resume Next 'Son kaydı da sildikten sonra koşula giriyor ve hata veriyor. Set optrs = mydb.openrecordset("ayarlar", dbopensnapshot) optrs.movefirst If optrs.fields("copdokonay") Then FrmDokOnay.Show 1 If evetdok Then Set coprs = mydb.openrecordset("copkutusu", dbopendynaset) While coprs.eof = False Or coprs.bof = False coprs.movefirst coprs.delete coprs.movenext Wend coprs.close optrs.close Private Sub CmdCopKar_Click() FrmCop.Show 1 Private Sub CmdGiris_Click() FrmGiris.Show 1 Private Sub Form_Load() Set mydb = OpenDatabase(App.Path & "\ornek.mdb", False) evetdok = True 9

FrmArama Dim sql As String Dim myrsacildi As Boolean Private Sub CmdAra_Click() myrsacildi = True If Option3.Value = True Then sql = "SELECT * FROM ANATABLO WHERE AD LIKE '*" & Trim(UCase(Text5.Text)) & "*'" Set myrs = mydb.openrecordset(sql, dbopendynaset) 10

If Option4.Value = True Then sql = "SELECT * FROM ANATABLO WHERE SOYAD LIKE '*" & Trim(UCase(Text6.Text)) & "*'" Set myrs = mydb.openrecordset(sql, dbopendynaset) If Option5.Value = True Then sql = "SELECT * FROM ANATABLO WHERE AD LIKE '*" & Trim(UCase(Text5.Text)) & "*' AND SOYAD LIKE '*" & Trim(UCase(Text6.Text)) & "*'" Set myrs = mydb.openrecordset(sql, dbopendynaset) If Option6.Value = True Then sql = "SELECT * FROM ANATABLO WHERE DTARIH LIKE '*" & Trim(Text7.Text) & "*'" Set myrs = mydb.openrecordset(sql, dbopendynaset) If myrs.eof = False Or myrs.bof = False Then 'RecordSet kayıt içeriyor myrs.movefirst Text1.Text = myrs.fields("ad") Text2.Text = myrs.fields("soyad") Text3.Text = myrs.fields("serino") Text4.Text = myrs.fields("dtarih") If myrs.fields("cinsiyet") = "K" Then Option1.Value = True Else Option2.Value = True Frame1.Enabled = False CmdSil.Enabled = True CmdDuzelt.Enabled = True CmdSag.Enabled = True Else: MsgBox "Kayıt Bulunamadı" Text1.Enabled = False Text2.Enabled = False Text3.Enabled = False Text4.Enabled = False Frame1.Enabled = False Private Sub CmdDuzelt_Click() Text1.Enabled = True Text2.Enabled = True Text3.Enabled = True Text4.Enabled = True Frame1.Enabled = True CmdKaydet.Enabled = True Private Sub CmdKapat_Click() If myrsacildi Then myrs.close Private Sub CmdKaydet_Click() myrs.edit myrs.fields("ad") = Trim(UCase(Text1.Text)) myrs.fields("soyad") = Trim(UCase(Text2.Text)) myrs.fields("serino") = Trim(UCase(Text3.Text)) myrs.fields("dtarih") = Trim(CDate(Text4.Text)) If Option1.Value = True Then myrs.fields("cinsiyet") = "K" Else myrs.fields("cinsiyet") = "E" myrs.update Text1.Enabled = False Text2.Enabled = False Text3.Enabled = False Text4.Enabled = False 11

Frame1.Enabled = False Private Sub CmdSil_Click() Set optrs = mydb.openrecordset("ayarlar", dbopensnapshot) optrs.movefirst If optrs.fields("silonay") Then FrmSilOnay.Show 1 If evetsil Then myrs.delete myrs.close Set coprs = mydb.openrecordset("copkutusu", dbopendynaset) coprs.addnew coprs.fields("ad1") = Trim(UCase(Text1.Text)) coprs.fields("soyad1") = Trim(UCase(Text2.Text)) coprs.fields("serino1") = Trim(UCase(Text3.Text)) coprs.fields("dtarih1") = Trim(CDate(Text4.Text)) If Option1.Value = True Then coprs.fields("cinsiyet1") = "K" Else coprs.fields("cinsiyet1") = "E" coprs.fields("starih") = Date coprs.fields("ssaat") = Time coprs.update Text1.Text = "" Text2.Text = "" Text3.Text = "" Text4.Text = "" coprs.close CmdSag.Enabled = False CmdSol.Enabled = False CmdDuzelt.Enabled = False CmdKaydet.Enabled = False myrsacildi = False optrs.close Private Sub CmdSag_Click() CmdSol.Enabled = True myrs.movenext If Not myrs.eof Then Text1.Text = myrs.fields("ad") Text2.Text = myrs.fields("soyad") Text3.Text = myrs.fields("serino") Text4.Text = myrs.fields("dtarih") If myrs.fields("cinsiyet") = "K" Then Option1.Value = True Else Option2.Value = True Else: CmdSag.Enabled = False Private Sub CmdSol_Click() CmdSag.Enabled = True myrs.moveprevious If Not myrs.bof Then Text1.Text = myrs.fields("ad") Text2.Text = myrs.fields("soyad") Text3.Text = myrs.fields("serino") Text4.Text = myrs.fields("dtarih") If myrs.fields("cinsiyet") = "K" Then Option1.Value = True Else Option2.Value = True Else: CmdSol.Enabled = False 12

Private Sub Form_Load() myrsacildi = False evetsil = True Private Sub Option3_Click() Label7.Visible = True Text5.Visible = True Label9.Visible = False Label10.Visible = False Text6.Visible = False Text7.Visible = False Private Sub Option4_Click() Label9.Visible = True Text6.Visible = True Label7.Visible = False Label10.Visible = False Text5.Visible = False Text7.Visible = False Private Sub Option5_Click() Label9.Visible = True Text6.Visible = True Label7.Visible = True Text5.Visible = True Label10.Visible = False Text7.Visible = False Private Sub Option6_Click() Label10.Visible = True Text7.Visible = True Label7.Visible = False Label9.Visible = False Text5.Visible = False Text6.Visible = False SQL Öğreniyorum! SELECT : SEÇ * : TÜM (ALL) FROM : -DEN, -DAN WHERE : OLMAK ÜZERE LIKE : BENZER (İçeren) "SELECT * FROM ANATABLO WHERE AD LIKE '*" & Trim(UCase(Text5.Text)) & "*'" ANATABLO isimli tablodan AD alanı Trim(UCase(Text5.Text)) metnini içeren kayıtları TÜM alanları ile SEÇ FrmGiris 13

Private Sub CmdKapat_Click() Private Sub CmdKaydet_Click() Set myrs = mydb.openrecordset("anatablo", dbopendynaset) myrs.addnew myrs.fields("ad") = Trim(UCase(Text1.Text)) myrs.fields("soyad") = Trim(UCase(Text2.Text)) myrs.fields("serino") = Trim(UCase(Text3.Text)) myrs.fields("dtarih") = CDate(Trim(Text4.Text)) If Option1.Value = True Then myrs.fields("cinsiyet") = "K" Else myrs.fields("cinsiyet") = "E" myrs.update Text1.Text = "" Text2.Text = "" Text3.Text = "" Text4.Text = "" Text1.SetFocus Private Sub CmdTemizle_Click() Text1.Text = "" Text2.Text = "" Text3.Text = "" Text4.Text = "" Text1.SetFocus FrmCop 14

Dim coprsacildi As Boolean Dim sql As String Private Sub CmdAra_Click() coprsacildi = True sql = "SELECT * FROM COPKUTUSU WHERE AD1 LIKE '*" & Trim(UCase(Text1.Text)) & "*'" Set coprs = mydb.openrecordset(sql, dbopendynaset) if coprs.eof = False Or coprs.bof = False Then 'RecordSet kayıt içeriyor coprs.movefirst Text1.Text = coprs.fields("ad1") Text2.Text = coprs.fields("soyad1") Text3.Text = coprs.fields("serino1") Text4.Text = coprs.fields("dtarih1") If coprs.fields("cinsiyet1") = "K" Then Option1.Value = True Else Option2.Value = True Text5.Text = coprs.fields("starih") Text6.Text = coprs.fields("ssaat") Frame1.Enabled = False CmdSag.Enabled = True CmdSol.Enabled = True CmdGeriAl.Enabled = True Else MsgBox "Kayıt Bulunamadı" CmdSag.Enabled = False CmdSol.Enabled = False CmdGeriAl.Enabled = False Private Sub CmdGeriAl_Click() coprs.delete coprs.close coprsacildi = False Set myrs = mydb.openrecordset("anatablo", dbopendynaset) myrs.addnew myrs.fields("ad") = Trim(UCase(Text1.Text)) myrs.fields("soyad") = Trim(UCase(Text2.Text)) myrs.fields("serino") = Trim(UCase(Text3.Text)) myrs.fields("dtarih") = Trim(CDate(Text4.Text)) If Option1.Value = True Then myrs.fields("cinsiyet") = "K" Else myrs.fields("cinsiyet") = "E" myrs.update Text1.Text = "" Text2.Text = "" Text3.Text = "" Text4.Text = "" myrs.close CmdSag.Enabled = False CmdSol.Enabled = False CmdGeriAl.Enabled = False Private Sub CmdKapat_Click() If coprsacildi Then coprs.close Private Sub CmdSag_Click() CmdSol.Enabled = True coprs.movenext 15

If Not coprs.eof Then Text1.Text = coprs.fields("ad1") Text2.Text = coprs.fields("soyad1") Text3.Text = coprs.fields("serino1") Text4.Text = coprs.fields("dtarih1") If coprs.fields("cinsiyet1") = "K" Then Option1.Value = True Else Option2.Value = True Text5.Text = coprs.fields("starih") Text6.Text = coprs.fields("ssaat") Else: CmdSag.Enabled = False Private Sub CmdSol_Click() CmdSag.Enabled = True coprs.moveprevious If Not coprs.bof Then Text1.Text = coprs.fields("ad1") Text2.Text = coprs.fields("soyad1") Text3.Text = coprs.fields("serino1") Text4.Text = coprs.fields("dtarih1") If coprs.fields("cinsiyet1") = "K" Then Option1.Value = True Else Option2.Value = True Text5.Text = coprs.fields("starih") Text6.Text = coprs.fields("ssaat") Else: CmdSol.Enabled = False Private Sub Form_Load() coprsacildi = False FrmAyar Private Sub CmdIptal_Click() Private Sub CmdTamam_Click() Set optrs = mydb.openrecordset("ayarlar", dbopendynaset) optrs.movefirst optrs.edit If kutu1.value = 1 Then optrs.fields("cikonay") = True Else optrs.fields("cikonay") = False If kutu2.value = 1 Then optrs.fields("silonay") = True Else optrs.fields("silonay") = False If kutu3.value = 1 Then optrs.fields("copdokonay") = True Else optrs.fields("copdokonay") = False optrs.update optrs.close 16

Private Sub Form_Load() Set optrs = mydb.openrecordset("ayarlar", dbopensnapshot) optrs.movefirst If optrs.fields("cikonay") Then kutu1.value = 1 If optrs.fields("silonay") Then kutu2.value = 1 If optrs.fields("copdokonay") Then kutu3.value = 1 optrs.close FrmAbout Private Sub CmdKapat_Click() FrmCikOnay Private Sub CmdHayir_Click() Private Sub CmnEvet_Click() End FrmSilOnay Private Sub CmdHayir_Click() evetsil = False Private Sub CmnEvet_Click() evetsil = True 17

FrmDokOnay Private Sub CmdHayir_Click() evetdok = False Module Global mydb As Database Global myrs, coprs, optrs As Recordset Global evetsil, evetdok As Boolean KİMLİK KAYIT PROGRAMI Bu bölümde öncekine göre biraz daha gelişmiş bir uygulama gerçekleştireceğiz. Nüfus cüzdanı bilgilerinin girileceği bu uygulamada, hiyerarşik bir kullanıcı yapısı da tanımlanacak. Dört düzeyli olacak bu yapıda, seviyeler ve sahip oldukları haklar aşağıdaki gibi olacak: Seviye Hak 1 Okuma, Yazma, Silme, Program Ayarları 2 Okuma, Yazma, Silme 3 Okuma, Yazma 4 Okuma Bu bilgiler KULLANICI adı verilen, aşağıdaki gibi tanımlı bir tabloda tutulacak: *klnkod Metin [20] sifre Metin [10] seviye Sayı [Byte] Uygulama tarafından kullanılacak diğer bilgiler ise, kimlik bilgilerini tutacak ana tablomuz olan KBILGI: serino1 Metin [3] serino2 Metin [6] no Metin [11] *soyad Metin [20] *ad Metin [20] *babaad Metin [20] *anaad Metin [20] dyer Metin [20] dtarih Tarih/Saat mhal Metin [1] kgrup1 Metin [2] kgrup2 Metin [3] 18

il Metin [20] ilce Metin [20] mahkoy Metin [20] ciltno Metin [6] asirano Metin [2] sirano Metin [2] veryer Metin [20] verned Metin [10] kayno Metin [4] sabika Evet/Hayır askerlik Evet/Hayır Ve İl-İlçe bilgilerinin saklanacağı ILLER tablosu: il [Sıralı, Yineleme var] Metin [50] ilce Metin [50] Şimdi açıklama satırları ile birlikte kodları verelim. FrmSifreSor Bu form, programın çalışmaya başladığı anda ilk olarak yüklenen ve kullanıcı adı ile şifresini alıp bunları global tanımlı değişkenlere aktaran formdur. Aynı zamanda kullanıcının girdiği kod ve şifrenin, veritabanındaki KULLANICI isimli tabloda yer alıp almadığını kontrol edip, yer almıyorsa programa giriş izni vermemektedir. Programa giren kullanıcının seviye sabiti, haklarını belirlediğinden, program içinde diğer formlarda kullanılmak üzere yine global bir değişkende saklanmaktadır. Dim ok As Boolean Private Sub CmdIptal_Click() End Private Sub CmdTamam_Click() ok = False Set myrs = mydb.openrecordset("select * FROM KULLANICI", dbopensnapshot) myrs.movefirst Do If Trim(UCase(TxtKln.Text)) = myrs.fields("klnkod") And Trim(UCase(TxtSifre.Text)) = myrs.fields("sifre") Then ok = True klnseviye = myrs.fields("seviye") kullanici = myrs.fields("klnkod") 19

sifre = myrs.fields("sifre") myrs.movenext Loop Until myrs.eof myrs.close If ok Then FrmAna.Show 1 Else: MsgBox "Kullanıcı kodu ya da şifre yanlış. Lütfen tekrar deneyiniz.", vbcritical Private Sub Form_Load() Set mydb = OpenDatabase(App.Path & "\kimlik.mdb", False) Private Sub TxtSifre_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then Call CmdTamam_Click FrmAna Private Sub CmdAra_Click() FrmArama.Show 1 Private Sub CmdAyarlar_Click() FrmAyarlar.Show 1 Private Sub CmdGrs_Click() FrmGrs.Show 1 Private Sub CmdKapat_Click() End 20

Private Sub CmdSifreDeg_Click() FrmSifreDeg.Show 1 Private Sub Form_Load() If klnseviye <> 1 Then CmdAyarlar.Enabled = False Sadece 1 seviyeli kullanıcı ayarlar menüsüne girebilir: If klnseviye = 4 Then CmdGrs.Enabled = False 4 seviyeli kullanıcı kayıt girişi yapamaz. FrmGrs Dim kaydedildi As Boolean Private Sub kaydet() Set myrs = mydb.openrecordset("kbilgi", dbopendynaset) myrs.addnew myrs.fields("serino1") = Trim(UCase(TxtKSeri.Text)) myrs.fields("serino2") = Trim(UCase(TxtKNo.Text)) myrs.fields("no") = Trim(UCase(TxtNo.Text)) myrs.fields("soyad") = Trim(UCase(TxtSyd.Text)) myrs.fields("ad") = Trim(UCase(TxtAd.Text)) myrs.fields("babaad") = Trim(UCase(TxtBAd.Text)) 21

myrs.fields("anaad") = Trim(UCase(TxtAAd.Text)) myrs.fields("dyer") = Trim(UCase(TxtDYer.Text)) If TxtDTar.Text <> "" Then myrs.fields("dtarih") = CDate(Trim(TxtDTar.Text)) If OptEvli.Value Then myrs.fields("mhal") = "E" If OptBekar.Value Then myrs.fields("mhal") = "B" If OptDul.Value Then myrs.fields("mhal") = "D" If OptBosan.Value Then myrs.fields("mhal") = "A" myrs.fields("kgrup1") = CmbKanGr.Text If OptRhNeg.Value Then myrs.fields("kgrup2") = "Rh-" If OptRhPoz.Value Then myrs.fields("kgrup2") = "Rh+" myrs.fields("il") = CmbIl.Text myrs.fields("ilce") = CmbIlce.Text myrs.fields("mahkoy") = Trim(UCase(TxtMah.Text)) myrs.fields("ciltno") = Trim(UCase(TxtCiltNo.Text)) myrs.fields("asirano") = Trim(UCase(TxtAileNo.Text)) myrs.fields("sirano") = Trim(UCase(TxtSiraNo.Text)) myrs.fields("veryer") = Trim(UCase(TxtVerYer.Text)) myrs.fields("verned") = CmbVerNed.Text myrs.fields("kayno") = Trim(UCase(TxtKayNo.Text)) If ChckSab.Value = 1 Then myrs.fields("sabika") = True If ChckAsk.Value = 1 Then myrs.fields("askerlik") = True myrs.update MsgBox "Bilgiler kaydedilmiştir...", vbinformation, "" TxtSyd.Text = "" TxtAd.Text = "" TxtBAd.Text = "" TxtAAd.Text = "" TxtAileNo.Text = "" TxtCiltNo.Text = "" TxtSiraNo.Text = "" TxtDYer.Text = "" TxtDTar.Text = "" TxtKayNo.Text = "" TxtNo.Text = "" TxtKNo.Text = "" TxtKSeri.Text = "" TxtMah.Text = "" TxtVerYer.Text = "" OptEvli.Value = False OptBekar.Value = False OptDul.Value = False OptBosan.Value = False OptRhPoz.Value = False OptRhNeg.Value = False CmbVerNed.Text = "" CmbIl.Text = "" CmbIlce.Text = "" CmbKanGr.Text = "" ChckAsk.Value = False ChckSab.Value = False TxtKSeri.SetFocus kaydedildi = False myrs.close Private Sub CmbIL_Click() İl combobox ına tıklandığında seçilen ile ait ilçeler İlçe combobox ına doluyor. CmbIlce.Clear 22

sql = "SELECT ILCE FROM ILLER WHERE IL='" & CmbIl.Text & "'" Set myrs = mydb.openrecordset(sql, dbopensnapshot) myrs.movefirst While Not myrs.eof CmbIlce.AddItem myrs.fields("ilce") myrs.movenext Wend myrs.close Private Sub CmdKapat_Click() Dim cvp As Integer If Not kaydedildi And TxtSyd.Text <> "" And TxtAd.Text <> "" And TxtBAd.Text <> "" And TxtAAd.Text <> "" Then Daha önceden kayıt yapmamış ve zorunlu alanları dolu iken kapata basmış. cvp = MsgBox("Değişiklikleri kaydetmek istiyor musunuz?", vbyesno + vbexclamation, "DİKKAT") If cvp = 6 Then kaydet Else Else Private Sub CmdKaydet_Click() Dim msj As String kaydedildi = True If TxtSyd.Text = "" Or TxtAd.Text = "" Or TxtBAd.Text = "" Or TxtAAd.Text = "" Then msj = "Zorunlu alanlarda bilgi eksikliği saptanmıştır." msj = msj & Chr(13) & "Lütfen bu bilgileri tamamlayınız." MsgBox msj, vbcritical, "UYARI" kaydedildi = False Else kaydet Private Sub Form_Load() kaydedildi = False sql = "SELECT IL FROM ILLER GROUP BY IL" İller, İl combobox ına her aynı adlı il grubundan bir il seçilmek suretiyle doluyor. Set myrs = mydb.openrecordset(sql, dbopensnapshot) myrs.movefirst While Not myrs.eof CmbIl.AddItem myrs.fields("il") myrs.movenext Wend myrs.close 23

FrmArama Dim rsacildi As Boolean Dim iller As Recordset Private Sub AlanlariTemizle() TxtSyd.Text = "" TxtAd.Text = "" TxtBAd.Text = "" TxtAAd.Text = "" TxtKSeri.Text = "" TxtKNo.Text = "" TxtNo.Text = "" TxtDYer.Text = "" TxtDTar.Text = "" OptEvli.Value = False OptBekar.Value = False OptDul.Value = False OptBosan.Value = False CmbKanGr.Text = "" OptRhNeg.Value = False OptRhPoz.Value = False CmbIl.Text = "" CmbIlce.Text = "" TxtMah.Text = "" 24

TxtCiltNo.Text = "" TxtAileNo.Text = "" TxtSiraNo.Text = "" TxtVerYer.Text = "" CmbVerNed.Text = "" TxtKayNo.Text = "" ChckSab.Value = 0 ChckAsk.Value = 0 Private Sub EkranaAktar() TxtSyd.Text = myrs.fields("soyad") TxtAd.Text = myrs.fields("ad") TxtBAd.Text = myrs.fields("babaad") TxtAAd.Text = myrs.fields("anaad") TxtKSeri.Text = myrs.fields("serino1") TxtKNo.Text = myrs.fields("serino2") TxtNo.Text = myrs.fields("no") TxtDYer.Text = myrs.fields("dyer") If myrs.fields("dtarih") <> "" Then TxtDTar.Text = myrs.fields("dtarih") If myrs.fields("mhal") = "E" Then OptEvli.Value = True If myrs.fields("mhal") = "B" Then OptBekar.Value = True If myrs.fields("mhal") = "D" Then OptDul.Value = True If myrs.fields("mhal") = "A" Then OptBosan.Value = True CmbKanGr.Text = myrs.fields("kgrup1") If myrs.fields("kgrup2") = "Rh-" Then OptRhNeg.Value = True If myrs.fields("kgrup2") = "Rh+" Then OptRhPoz.Value = True CmbIl.Text = myrs.fields("il") CmbIlce.Text = myrs.fields("ilce") TxtMah.Text = myrs.fields("mahkoy") TxtCiltNo.Text = myrs.fields("ciltno") TxtAileNo.Text = myrs.fields("asirano") TxtSiraNo.Text = myrs.fields("sirano") TxtVerYer.Text = myrs.fields("veryer") CmbVerNed.Text = myrs.fields("verned") TxtKayNo.Text = myrs.fields("kayno") If myrs.fields("sabika") = True Then ChckSab.Value = 1 If myrs.fields("askerlik") = True Then ChckAsk.Value = 1 Function SqlGetir(syd, ad As String) As String Ad ve Soyad alanlarının hangilerinin dolu olduğuna göre SQL cümlesi teşkil ediyor. If syd <> "" And ad = "" Then SqlGetir = "SELECT * FROM KBILGI WHERE SOYAD LIKE '*" & syd & "*'" If syd = "" And ad <> "" Then SqlGetir = "SELECT * FROM KBILGI WHERE AD LIKE '*" & ad & "*'" If syd <> "" And ad <> "" Then SqlGetir = "SELECT * FROM KBILGI WHERE SOYAD LIKE '*" & syd & "*' AND AD LIKE '*" & ad & "*'" End Function Private Sub CmbIL_Click() CmbIlce.Clear sql = "SELECT ILCE FROM ILLER WHERE IL='" & CmbIl.Text & "'" Set iller = mydb.openrecordset(sql, dbopensnapshot) iller.movefirst While Not iller.eof CmbIlce.AddItem iller.fields("ilce") iller.movenext Wend iller.close 25

Private Sub CmdAra_Click() If TxtSyd.Text = "" And TxtAd.Text = "" Then MsgBox "Arama yapabilmek için SOYADI ya da ADI alanlarından en az birisini doldurmalısınız.", vbcritical, "UYARI" Else Set myrs = mydb.openrecordset(sqlgetir(trim(ucase(txtsyd.text)), Trim(UCase(TxtAd.Text))), dbopendynaset) rsacildi = True If myrs.eof = False Or myrs.bof = False Then myrs.movefirst EkranaAktar CmdSag.Enabled = True CmdKaydet.Enabled = True CmdSil.Enabled = True Else: MsgBox "Kayıt Bulunamadı" Private Sub CmdKapat_Click() If rsacildi Then myrs.close Private Sub CmdKaydet_Click() On Error GoTo Hata Hata: If CmdSol.Enabled And Not CmdSag.Enabled Then myrs.moveprevious If CmdSag.Enabled And Not CmdSol.Enabled Then myrs.movenext If klnseviye = 4 Then MsgBox "Bu işlemi gerçekleştirmek için yetkiniz yoktur.", vbexclamation Exit Sub If TxtSyd.Text = "" And TxtAd.Text = "" Then MsgBox "Kayıt yapabilmek için SOYADI ve ADI alanlarını doldurmalısınız.", vbcritical, "UYARI" Exit Sub myrs.edit myrs.fields("serino1") = Trim(UCase(TxtKSeri.Text)) myrs.fields("serino2") = Trim(UCase(TxtKNo.Text)) myrs.fields("no") = Trim(UCase(TxtNo.Text)) myrs.fields("soyad") = Trim(UCase(TxtSyd.Text)) myrs.fields("ad") = Trim(UCase(TxtAd.Text)) myrs.fields("babaad") = Trim(UCase(TxtBAd.Text)) myrs.fields("anaad") = Trim(UCase(TxtAAd.Text)) myrs.fields("dyer") = Trim(UCase(TxtDYer.Text)) If TxtDTar.Text <> "" Then myrs.fields("dtarih") = CDate(Trim(TxtDTar.Text)) If OptEvli.Value Then myrs.fields("mhal") = "E" If OptBekar.Value Then myrs.fields("mhal") = "B" If OptDul.Value Then myrs.fields("mhal") = "D" If OptBosan.Value Then myrs.fields("mhal") = "A" myrs.fields("kgrup1") = CmbKanGr.Text If OptRhNeg.Value Then myrs.fields("kgrup2") = "Rh-" If OptRhPoz.Value Then myrs.fields("kgrup2") = "Rh+" myrs.fields("il") = CmbIl.Text myrs.fields("ilce") = CmbIlce.Text myrs.fields("mahkoy") = Trim(UCase(TxtMah.Text)) myrs.fields("ciltno") = Trim(UCase(TxtCiltNo.Text)) 26

myrs.fields("asirano") = Trim(UCase(TxtAileNo.Text)) myrs.fields("sirano") = Trim(UCase(TxtSiraNo.Text)) myrs.fields("veryer") = Trim(UCase(TxtVerYer.Text)) myrs.fields("verned") = CmbVerNed.Text myrs.fields("kayno") = Trim(UCase(TxtKayNo.Text)) If ChckSab.Value = 1 Then myrs.fields("sabika") = True If ChckAsk.Value = 1 Then myrs.fields("askerlik") = True myrs.update MsgBox "Bilgiler kaydedilmiştir...", vbinformation, "" Private Sub CmdSag_Click() CmdSol.Enabled = True myrs.movenext If myrs.eof Then CmdSag.Enabled = False Else: EkranaAktar Private Sub CmdSil_Click() On Error GoTo Hata Hata: If CmdSol.Enabled And Not CmdSag.Enabled Then myrs.moveprevious Sağ tuşa son kayda ulaşıldıktan sonra bir kez daha basılmış. Dolayısıyla kayıt imleci bir geriye alınıyor. If CmdSag.Enabled And Not CmdSol.Enabled Then myrs.movenext Sol tuşa ilk kayda ulaşıldıktan sonra bir kez daha basılmış. Dolayısıyla kayıt imleci bir ileriye alınıyor. If klnseviye = 3 Or klnseviye = 4 Then MsgBox "Bu işlemi gerçekleştirmek için yetkiniz yoktur.", vbexclamation Exit Sub cevap = MsgBox("Bu kaydı silmek istediğinize emin misiniz?", vbquestion + vbyesno) If cevap = 6 Then myrs.delete AlanlariTemizle Private Sub CmdSol_Click() CmdSag.Enabled = True myrs.moveprevious If myrs.bof Then CmdSol.Enabled = False Else: EkranaAktar Private Sub CmdTemizle_Click() AlanlariTemizle Private Sub Form_Load() rsacildi = False sql = "SELECT IL FROM ILLER GROUP BY IL" Set iller = mydb.openrecordset(sql, dbopensnapshot) iller.movefirst While Not iller.eof CmbIl.AddItem iller.fields("il") iller.movenext 27

Wend iller.close FrmAyarlar Private Sub CmdIlce_Click() FrmIlce.Show 1 Private Sub CmdKapat_Click() Private Sub CmdYeniKln_Click() FrmYeniKln.Show 1 FrmYeniKln Dim labeltext As String Private Sub CmdIptal_Click() Private Sub CmdTamam_Click() If TxtKln.Text = "" Or TxtSifre.Text = "" Or TxtSifreT.Text = "" Or CmbSeviye.Text = "" Then MsgBox "Lütfen alanların tümünü doldurun.", vbcritical Exit Sub If TxtSifre.Text <> TxtSifreT.Text Then MsgBox "Şifreyi yanlış girdiniz. Lütfen tekrar deneyin.", vbcritical TxtSifre.Text = "" TxtSifreT.Text = "" TxtSifre.SetFocus Exit Sub Set myrs = mydb.openrecordset("kullanici", dbopendynaset) myrs.addnew 28

myrs.fields("klnkod") = Trim(UCase(TxtKln.Text)) myrs.fields("sifre") = Trim(UCase(TxtSifre.Text)) myrs.fields("seviye") = CmbSeviye.Text myrs.update myrs.close Private Sub Form_Load() labeltext = "1-Okuma/Yazma/Silme/Ayarlar" labeltext = labeltext & Chr(13) & "2-Okuma/Yazma/Silme" labeltext = labeltext & Chr(13) & "3-Okuma/Yazma" labeltext = labeltext & Chr(13) & "4-Okuma" Label5.Caption = labeltext FrmIlce Private Sub CmdIlceEkle_Click() If CmbIl.Text = "" Then MsgBox "Önce bir il adı seçiniz", vbcritical, "UYARI" Exit Sub ilceadi = InputBox("Eklenecek İlçeyi Giriniz", "İl-İlçe Düzenle") If ilceadi <> "" Then sql = "SELECT * FROM ILLER WHERE IL = '" & CmbIl.Text & "' AND ILCE=NULL" Eğer ilçe alanı boş olarak yeni girilmiş bir il varsa öncelikle bu dolduruluyor. Set myrs = mydb.openrecordset(sql, dbopendynaset) If Not myrs.eof Or Not myrs.bof Then myrs.movefirst myrs.edit myrs.fields("ilce") = Trim(UCase(ilceadi)) myrs.update Else İlçe alanı boş olan yeni girilmiş bir il yok. O halde iliyle ve ilçesiyle yeni bir kayıt ekleniyor. myrs.close Set myrs = mydb.openrecordset("iller", dbopendynaset) myrs.addnew myrs.fields("il") = CmbIl.Text myrs.fields("ilce") = Trim(UCase(ilceadi)) myrs.update myrs.close CmbIlce.AddItem Trim(UCase(ilceadi)) Private Sub CmdIlEkle_Click() 29

iladi = InputBox("Eklenecek İli Giriniz", "İl-İlçe Düzenle") If iladi <> "" Then Set myrs = mydb.openrecordset("iller", dbopendynaset) myrs.addnew myrs.fields("il") = Trim(UCase(iladi)) myrs.update myrs.close CmbIl.AddItem Trim(UCase(iladi)) Private Sub CmdKapat_Click() Private Sub Form_Load() Set myrs = mydb.openrecordset("select IL FROM ILLER GROUP BY IL", dbopensnapshot) Birden çok sayıda aynı adla yer alan il grubundan sadece birisi seçiliyor. Böylece combobox ta il adlarının tekrarlanması önlenmiş oluyor. myrs.movefirst While Not myrs.eof CmbIl.AddItem myrs.fields("il") myrs.movenext Wend myrs.close Private Sub CmbIL_Click() CmdIlceEkle.Enabled = True CmbIlce.Clear Set myrs = mydb.openrecordset("select ILCE FROM ILLER WHERE IL='" & CmbIl.Text & "'", dbopensnapshot) myrs.movefirst While Not myrs.eof If myrs.fields("ilce") <> "" Then CmbIlce.AddItem myrs.fields("ilce") myrs.movenext Wend myrs.close FrmSifreDeg Private Sub CmdIptal_Click() 30

Private Sub CmdTamam_Click() If TxtEski.Text = "" Or TxtYeni.Text = "" Or TxtYeniT.Text = "" Then MsgBox "Lütfen alanların tümünü doldurun.", vbcritical Exit Sub If Trim(UCase(TxtEski.Text)) <> sifre Then MsgBox "Eski şifreniz yanlış. Lütfen tekrar deneyin.", vbcritical TxtEski.Text = "" TxtEski.SetFocus Exit Sub If TxtYeni.Text <> TxtYeniT.Text Then MsgBox "Yeni şifrenizi yanlış girdiniz. Lütfen tekrar deneyin.", vbcritical TxtYeni.Text = "" TxtYeniT.Text = "" TxtYeni.SetFocus Exit Sub Set myrs = mydb.openrecordset("select * FROM KULLANICI WHERE KLNKOD='" & kullanici & "'", dbopendynaset) myrs.edit myrs.fields("sifre") = Trim(UCase(TxtYeni.Text)) myrs.update myrs.close sifre = Trim(UCase(TxtYeni.Text)) 31

Personal Oracle Lite 7 (POLite7) Uygulamaları Bu bölümde, MS Visual Basic programından ODBC bağlantısı kurularak Personel Oracle Lite7 ile hazırlanmış bir veritabanı ile nasıl veri alışverişi gerçekleştirebileceğimiz anlatılacaktır. Bunun için, öncelikle sistemimize gereken Oracle araçlarını kurmamız gereklidir. Başlangıç için bu araçlardan Oracle Navigator ve sistemimizde zaten mevcut olan ODBC Administrator yeterli olacaktır. POLite7 sistemimize kurulduğunda, bu gibi araçlarla birlikte bağlantı için gereken POLite adlı ODBC sürücüsü de otomatik olarak kurulacaktır. Birinci aşama, Oracle Navigator kullanılarak bir veritabanı oluşturulmasıdır. 1. Oracle Navigator Yazılımını Kullanarak Bir Veritabanı Oluşturmak Sağ-tuş menüsünden New seçeneği ile isim verilerek yeni bir veritabanı oluşturulur. Description, istenirse verilebilir. Oluşturulan veritabanı için bir kullanıcı benzer yöntemle (Sağ-tuş, New) tanımlanabilir. Aynı metotla oluşturulan tabloya bir isim verilir ve Owner kısmında daha önce oluşturulan kullanıcı seçilir. 32

Column Name kısmında alan adları, Type kısmında alan türleri, Size kısmında alan boyutları, Can be Null? kısmında alanın boş kalmasına izin verilip verilmeyeceği (işaretli ise izin verilir), Unique kısmında tek olup olmayacağı (işaretli ise tektir) ve Primary Key kısmında ise birincil alan olup olmadığı belirlenebilir. Her tablo en az bir birincil alan içermelidir. İkinci a şama, oluşturulan veritabanını programımızda çağırabilmek için ilgili ODBC sürücüsünü kullanan, kullanıcı tanımlı bir Veri Kaynak Adı (Data Source Name-DSN) oluşturmaktır. V eri Türleri NUMBER Genel kullanım için sayı türü veridir. Ondalık ya da tamsayılar için kullanılabilir. En fazla 38 ondalık basamak içerir. Sayısal sınırları 1.0E-129 ile 9.99E125 arasındadır. CHAR En fazla 32767 byte uzunluğunda string türü veriler için kullanılabilir. VARCHAR2 Değişen uzunlukta string türü veriler için kullanılan popüler bir veri türüdür. LONG Varchar2 ile aynı işlevlidir. Ancak WHERE, GROUP BY ve CONNECT BY SQL deyimleri ile çalışmaz. RAW Binary verileri ve byte dizilerini saklamak için kullanılır. LONG RAW Raw ile aynı işlevli, ancak Long türünde olduğu gibi seçme işlemi gerçekleştiren SQL deyimleri ile çalışmaz. ROWID Veritabanındaki verilerin adres bilgileriniş saklamak için kullanılır. Rowid bu bilgiyi maksimum 256 byte uzunluğunda binary bir veri olarak saklar. Bunu bizim anlayabileceğimiz string türü bir veriye ROWIDTOCHAR fonksiyonunu kullanarak dönüştürebiliriz. Dönüşen verinin biçimi, BBBBBBBB.RRRR.FFFF olacaktır. Burada BBBBBBBB veritabanı dosyasındaki bloğu, RRRR bloktaki satırı ve FFFF veritabanı dosyasını gösterir. 33

DATE M.Ö.4712, 1 Ocak ile M.S.4712, 31 Aralık sınırları içinde kalan bir tarih verisini saklamak için kullanılır. 2. ODBC Veri Kaynağı Yöneticisini Kullanarak Bir DSN Oluşturmak ODBC Veri Kaynağı Yöneticisi bize, sistemde yüklü bulunan mevcut ODBC sürücülerini listeleyecektir. Kendi uygulamamız için bir DSN tanımlamak için öncelikle Ekle butonuna basmalıyız. 34

Sürücü olarak Oracle Lite ODBC Driver seçilir. Data Source Name olarak istenilen bir isim verilebilir. Data Directory, geçerli dizin olarak yandaki şekilde belirlenmiştir. Database ise, daha önceden Oracle Navigator kullanarak oluşturduğumuz veritabanının adıdır. Tamam butonuna basıldığında ODBC sürücümüz servise hazırdır, afiyet olsun. 3. ODBC Sürücüsünü Kullanarak Bir Veritabanı Uygulaması Geliştirmek Bu uygulamada amaç, bir Oracle veritabanında veri girişi, veri arama, veri güncellemesi ve veri silmearama gibi temel işlemlerin gerçekleştirilmesidir. Veri arama tek (unique) olarak tanımlanmış TC Kimlik Numarası alanına göre kesin eşleşme prensibine göre yapılmaktadır. Uygulamada, ODBC veritabanına bağlantı cümlesine ve işlemlerde SQL deyimlerinin nasıl çalıştırıldığına dikkat ediniz. Açıklamalı kodlar aşağıda verilmiştir. KOD Private Sub Form_Load() DB_FILENAME = "ODBC;UID=tg;DSN=dnm_ dsn;database=dnm_database" Set MyDB = OpenDatabase("", False, False, DB_FILENAME) Dim t1, t2, t3, SQL As String Dim MyRS As Recordset Sub Temizle() Text1.Text = "" Text2.Text = "" Text3.Text = "" Text4.Text = "" Text1.SetFocus AÇIKLAMALAR Burada DB_FILENAME veritabanı bağlantı cümlesidir ve veritabanı ile DSN tanımlamasındaki bilgiler kullanılarak oluşturulur. Değişken tanımlamaları ve alanların tümünü temizleyen alt program. 35

Private Sub Command1_Click() EKLE butonu t1 = Trim(Text1.Text) t2 = Trim(Text2.Text) t3 = Trim(Text3.Text) t4 = Trim(Text4.Text) If t1 <> "" And t2 <> "" Then SQL = "INSERT INTO ANATABLO (TCKIMLIKNO,OGRNO,AD,SOYAD) VALUES ('" & t1 & "'," & CInt(t2) & ",'" & UCase(t3) & "','" & UCase(t4) & "')" MyDB.Execute SQL Call Temizle Else MsgBox "Zorunlu alanları giriniz!" Burada önemli nokta, veri girişinin SQL cümlesinin doğrudan veritabanı üzerinden.execute metodu kullanılarak çalıştırılması ile gerçekleştirilmesidir. Bu metodu, veri çekme deyimleri için (SELECT gibi) kullanamayız. Private Sub Command2_Click() ARA butonu SQL = "SELECT * FROM ANATABLO WHERE TCKIMLIKNO = '" & Trim(Text1.Text) & "'" Set MyRS = MyDB.OpenRecordset(SQL, dbopendynaset) If MyRS.EOF = False Or MyRS.BOF = False Then Text2.Text = MyRS("OGRNO") Text3.Text = MyRS("AD") Text4.Text = MyRS("SOYAD") Else MsgBox "Aranan kayıt bulunamamıştır..." Call Temizle Private Sub Command3_Click() DÜZELT butonu t1 = Trim(Text1.Text) t2 = Trim(Text2.Text) t3 = Trim(Text3.Text) t4 = Trim(Text4.Text) If t1 <> "" And t2 <> "" Then SQL = "UPDATE ANATABLO SET AD = '" & UCase(t3) & "',SOYAD = '" & UCase(t4) & "' WHERE TCKIMLIKNO = '" & t1 & "'" MyDB.Execute SQL, dbsqlpassthrough Call Temizle Else MsgBox "Zorunlu alanları giriniz!" Private Sub Command4_Click() End Private Sub Command5_Click() Call Temizle Burada SQL deyimi OpenRecordset ile kullanılıyor. Doğrudan çalıştırılması mümkün değil. Yöntem aynen Native veritabanı bağlantısında olduğu gibi çalışıyor. SQL deyimi doğrudan çalıştırılıyor. Ancak özel bir parametre olan dbsqlpassthrough ile. Bu parametre SQL deyimini doğrudan ODBC veritabanına geçirir. Deyim, MS Jet Engine kontrollerinden muaf olur (bkz:bir sonraki sayfa). Veri üzerinde write (yazma) işlemi gerçekleştirecek SQL deyimlerinin bu şekilde çalıştırılması gereklidir. KAPAT butonu. TEMİZLE butonu 36

Private Sub Command6_Click() SİL butonu SQL = "DELETE FROM ANATABLO WHERE TCKIMLIKNO = '" & Trim(Text1.Text) & "'" MyDB.Execute SQL, dbsqlpassthrough Call Temizle Global MyDB As Database Burada da düzeltme işleminde olduğu gibi SQL deyimi dbsqlpassthrough ile doğrudan çalıştırılıyor. Modül tanımlaması. 4. MS VB Programı & ODBC ORACLE Veritabanı Erişim Hiyerarşisi 37