“verİtabani uygulamalari”andirinbp.ksu.edu.tr/depo/belgeler/vb2_1511021242296983.pdf ·...

37
“VERİTABANI UYGULAMALARI” © 2001

Upload: others

Post on 29-Feb-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

“VERİTABANI UYGULAMALARI”

© 2001

Page 2: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

VERİTABANI UYGULAMALARI DAO Modeli

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

Page 3: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

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

Page 4: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

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 ayarbölümler mevcuttur. Derleyici ya da veyazılımlar için ODBC sürücülerini de birlikprogramlama dilleri ile farklı veritabanları üretmektedir. Bunların karşılaştırma kritkurulmuştur.

larında ODBC sürücülerinin tanımlanabileceği ritabanı sistemleri genellikle çok popüler olan te verirler. Bunun yanı sıra bir çok üretici firma,

arasında iletişimi gerçekleştiren ODBC sürücüleri erleri genellikle veri aktarım hızları üzerine

4

Page 5: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

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 table-taban 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 :Opsiyonel. Veritabanına bağlantı ile ilgili (kullanıcı adı, şifresi gibi) bilgileri içeren string.

Bu durumda FormLoad olayında yer alacak örnek kodumuz aşağıdaki gibi olur:

Set mydb = OpenDatabase(App.Path & "\ornek.mdb", False)

5

Page 6: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

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 :Açılmak istenen RecordSet i taşıyacak nesne değişkeni.

object :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

Page 7: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

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ı”

End If

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

Page 8: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

Ş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")

End If

End Sub

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

Page 9: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

AnaForm Private Sub CmdAbout_Click() FrmAbout.Show 1 End Sub Private Sub CmdArama_Click() FrmArama.Show 1 End Sub Private Sub CmdAyarlar_Click() FrmAyar.Show 1 End Sub Private Sub CmdCikis_Click() Set optrs = mydb.OpenRecordset("AYARLAR", dbOpenSnapshot) optrs.MoveFirst If optrs.Fields("cikonay") Then FrmCikOnay.Show 1 Else End End Sub 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 End If optrs.Close End Sub Private Sub CmdCopKar_Click() FrmCop.Show 1 End Sub Private Sub CmdGiris_Click() FrmGiris.Show 1 End Sub Private Sub Form_Load() Set mydb = OpenDatabase(App.Path & "\ornek.mdb", False) evetdok = True End Sub

9

Page 10: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

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) End If

10

Page 11: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

If Option4.Value = True Then sql = "SELECT * FROM ANATABLO WHERE SOYAD LIKE '*" & Trim(UCase(Text6.Text)) & "*'" Set myrs = mydb.OpenRecordset(sql, dbOpenDynaset) End If 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) End If If Option6.Value = True Then sql = "SELECT * FROM ANATABLO WHERE DTARIH LIKE '*" & Trim(Text7.Text) & "*'" Set myrs = mydb.OpenRecordset(sql, dbOpenDynaset) End If 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ı" End If Text1.Enabled = False Text2.Enabled = False Text3.Enabled = False Text4.Enabled = False Frame1.Enabled = False End Sub Private Sub CmdDuzelt_Click() Text1.Enabled = True Text2.Enabled = True Text3.Enabled = True Text4.Enabled = True Frame1.Enabled = True CmdKaydet.Enabled = True End Sub Private Sub CmdKapat_Click() If myrsAcildi Then myrs.Close Unload Me End Sub 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

Page 12: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

Frame1.Enabled = False End Sub 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 End If optrs.Close End Sub 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 End If End Sub 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 End If End Sub

12

Page 13: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

Private Sub Form_Load() myrsAcildi = False evetsil = True End Sub Private Sub Option3_Click() Label7.Visible = True Text5.Visible = True Label9.Visible = False Label10.Visible = False Text6.Visible = False Text7.Visible = False End Sub Private Sub Option4_Click() Label9.Visible = True Text6.Visible = True Label7.Visible = False Label10.Visible = False Text5.Visible = False Text7.Visible = False End Sub Private Sub Option5_Click() Label9.Visible = True Text6.Visible = True Label7.Visible = True Text5.Visible = True Label10.Visible = False Text7.Visible = False End Sub Private Sub Option6_Click() Label10.Visible = True Text7.Visible = True Label7.Visible = False Label9.Visible = False Text5.Visible = False Text6.Visible = False End Sub

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

Page 14: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

Private Sub CmdKapat_Click() Unload Me End Sub 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 End Sub Private Sub CmdTemizle_Click() Text1.Text = "" Text2.Text = "" Text3.Text = "" Text4.Text = "" Text1.SetFocus End Sub FrmCop

14

Page 15: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

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 End If End Sub 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 End Sub Private Sub CmdKapat_Click() If coprsAcildi Then coprs.Close Unload Me End Sub Private Sub CmdSag_Click() CmdSol.Enabled = True coprs.MoveNext

15

Page 16: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

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 End If End Sub 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 End If End Sub Private Sub Form_Load() coprsAcildi = False End Sub FrmAyar

Private Sub CmdIptal_Click() Unload Me End Sub 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 Unload Me End Sub

16

Page 17: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

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 End Sub FrmAbout

Private Sub CmdKapat_Click() Unload Me End Sub

FrmCikOnay

Private Sub CmdHayir_Click() Unload Me End Sub Private Sub CmnEvet_Click() End End Sub

FrmSilOnay

Private Sub CmdHayir_Click() evetsil = False Unload Me End Sub Private Sub CmnEvet_Click() evetsil = True Unload Me

End Sub

17

Page 18: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

FrmDokOnay

Private Sub CmdHayir_Click()

evetdok = False

Unload Me

End Sub 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

Page 19: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

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 End Sub 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

Page 20: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

sifre = myrs.Fields("sifre") End If myrs.MoveNext Loop Until myrs.EOF myrs.Close If ok Then Unload Me FrmAna.Show 1 Else: MsgBox "Kullanıcı kodu ya da şifre yanlış. Lütfen tekrar deneyiniz.", vbCritical End If End Sub Private Sub Form_Load() Set mydb = OpenDatabase(App.Path & "\kimlik.mdb", False) End Sub Private Sub TxtSifre_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then Call CmdTamam_Click End Sub FrmAna

Private Sub CmdAra_Click() FrmArama.Show 1 End Sub Private Sub CmdAyarlar_Click() FrmAyarlar.Show 1 End Sub Private Sub CmdGrs_Click() FrmGrs.Show 1 End Sub Private Sub CmdKapat_Click() End End Sub

20

Page 21: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

Private Sub CmdSifreDeg_Click() FrmSifreDeg.Show 1 End Sub 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. End Sub 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

Page 22: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

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)) End If 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 End Sub Private Sub CmbIL_Click() ‘İl combobox ına tıklandığında seçilen ile ait ilçeler İlçe combobox ına doluyor. CmbIlce.Clear

22

Page 23: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

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 End Sub 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 Unload Me Else Unload Me End If Else Unload Me End If End Sub 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 End If End Sub 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 End Sub

23

Page 24: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

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

Page 25: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

TxtCiltNo.Text = "" TxtAileNo.Text = "" TxtSiraNo.Text = "" TxtVerYer.Text = "" CmbVerNed.Text = "" TxtKayNo.Text = "" ChckSab.Value = 0 ChckAsk.Value = 0 End Sub 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 End Sub 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 End Sub

25

Page 26: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

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ı" End If End If End Sub Private Sub CmdKapat_Click() If rsAcildi Then myrs.Close Unload Me End Sub 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 End If 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 End If 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)) End If 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

Page 27: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

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, "" End Sub Private Sub CmdSag_Click() CmdSol.Enabled = True myrs.MoveNext If myrs.EOF Then CmdSag.Enabled = False Else: EkranaAktar End If End Sub 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 End If cevap = MsgBox("Bu kaydı silmek istediğinize emin misiniz?", vbQuestion + vbYesNo) If cevap = 6 Then myrs.Delete AlanlariTemizle End If End Sub Private Sub CmdSol_Click() CmdSag.Enabled = True myrs.MovePrevious If myrs.BOF Then CmdSol.Enabled = False Else: EkranaAktar End If End Sub Private Sub CmdTemizle_Click() AlanlariTemizle End Sub 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

Page 28: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

Wend iller.Close End Sub FrmAyarlar

Private Sub CmdIlce_Click() FrmIlce.Show 1 End Sub Private Sub CmdKapat_Click() Unload Me End Sub Private Sub CmdYeniKln_Click() FrmYeniKln.Show 1 End Sub

FrmYeniKln

Dim labeltext As String Private Sub CmdIptal_Click() Unload Me End Sub 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 End If If TxtSifre.Text <> TxtSifreT.Text Then MsgBox "Şifreyi yanlış girdiniz. Lütfen tekrar deneyin.", vbCritical TxtSifre.Text = "" TxtSifreT.Text = "" TxtSifre.SetFocus Exit Sub End If Set myrs = mydb.OpenRecordset("KULLANICI", dbOpenDynaset) myrs.AddNew

28

Page 29: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

myrs.Fields("klnkod") = Trim(UCase(TxtKln.Text)) myrs.Fields("sifre") = Trim(UCase(TxtSifre.Text)) myrs.Fields("seviye") = CmbSeviye.Text myrs.Update myrs.Close Unload Me End Sub 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 End Sub FrmIlce

Private Sub CmdIlceEkle_Click() If CmbIl.Text = "" Then MsgBox "Önce bir il adı seçiniz", vbCritical, "UYARI" Exit Sub End If 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 End If myrs.Close End If CmbIlce.AddItem Trim(UCase(ilceadi)) End Sub Private Sub CmdIlEkle_Click()

29

Page 30: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

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 End If CmbIl.AddItem Trim(UCase(iladi)) End Sub Private Sub CmdKapat_Click() Unload Me End Sub 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 End Sub 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") End If myrs.MoveNext Wend myrs.Close End Sub FrmSifreDeg

Private Sub CmdIptal_Click() Unload Me End Sub

30

Page 31: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

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 End If If Trim(UCase(TxtEski.Text)) <> sifre Then MsgBox "Eski şifreniz yanlış. Lütfen tekrar deneyin.", vbCritical TxtEski.Text = "" TxtEski.SetFocus Exit Sub End If If TxtYeni.Text <> TxtYeniT.Text Then MsgBox "Yeni şifrenizi yanlış girdiniz. Lütfen tekrar deneyin.", vbCritical TxtYeni.Text = "" TxtYeniT.Text = "" TxtYeni.SetFocus Exit Sub End If 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)) Unload Me End Sub

31

Page 32: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

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

Page 33: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

olumn Name kısmında alan adları, Type kısmında alan türleri, Size kısmında alan boyutları,

şama, oluşturulan veritabanını programımızda çağırabilmek için ilgili ODBC

eri Türleri

şama, oluşturulan veritabanını programımızda çağırabilmek için ilgili ODBC

eri Türleri

CCan 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.

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İkinci asürücüsünü kullanan, kullanıcı tanımlı bir Veri Kaynak Adı (Data Source Name-DSN) oluşturmaktır.

sürücüsünü kullanan, kullanıcı tanımlı bir Veri Kaynak Adı (Data Source Name-DSN) oluşturmaktır. VV

UMBER ım için sayı türü veridir. Ondalık ya da tamsayılar için kullanılabilir. En fazla 38

HAR 32767 byte uzunluğunda string türü veriler için kullanılabilir.

ARCHAR2 kta string türü veriler için kullanılan popüler bir veri türüdür.

ONG ile aynı işlevlidir. Ancak WHERE, GROUP BY ve CONNECT BY SQL deyimleri

AW verileri ve byte dizilerini saklamak için kullanılır.

ONG RAW işlevli, ancak Long türünde olduğu gibi seçme işlemi gerçekleştiren SQL

OWID ndaki verilerin adres bilgileriniş saklamak için kullanılır. Rowid bu bilgiyi

dosyasındaki bloğu, RRRR bloktaki satırı ve FFFF veritabanı dosyasını gösterir.

NGenel kullanondalık basamak içerir. Sayısal sınırları 1.0E-129 ile 9.99E125 arasındadır. CEn fazla VDeğişen uzunlu LVarchar2ile çalışmaz. RBinary LRaw ile aynı deyimleri ile çalışmaz. RVeritabanı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ı

33

Page 34: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

DATE M.Ö.4712, 1 Ocak ile M.S.4712, 31 Aralık sınırları içinde kalan bir tarih veris

34

ini saklamak anılır.

. 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

steleyecektir. Kendi uygulamamız için bir DSN tanımlamak için öncelikle Ekle butonuna

için kull 2

libasmalıyız.

Page 35: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

S

KOD AÇIKLAM

ürücü olarak Oracle Lite ODBC Driver seçilir.

Data Source Name olarak tenilen bir isim verilebilir.

n

vigator

. ODBC Sürücüsünü Kullanarak Bir Veritabanı Uygulaması Geliştirmek

Bu uygulamada amaç, bir Oracle eritabanında veri girişi, veri arama, veri

ibi temel a

ve

ilmiştir.

ALAR

isData Directory, geçerli diziolarak yandaki şekilde belirlenmiştir. Database ise, daha önceden Oracle Nakullanarak oluşturduğumuz veritabanının adıdır. Tamam butonuna basıldığında ODBCsürücümüz servise hazırdır, afiyet olsun.

3

vgüncellemesi ve veri silmearama gişlemlerin gerçekleştirilmesidir. Veri aramtek (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ümlesineişlemlerde SQL deyimlerinin nasıl çalıştırıldığına dikkat ediniz. Açıklamalı kodlar aşağıda ver

35

Private DB_F

Sub Form_Load() ILENAME =

dsn;database=dnm_database" ase("", False, False, DB_FILENAME)

lesidir ve

"ODBC;UID=tg;DSN=dnm_Datab Set MyDB = Open

End Sub

Burada DB_FILENAMEveritabanı bağlantı cümveritabanı ile DSN tanımlamasındaki bilgiler kullanılarak oluşturulur.

Dim t1, t2, t3, SQL As String Dim MyRSSub Temi

As Recordset

yen alt zle()

Text1.Text = "" Text2.Text = "" Text3.Text = "" Text4.Text = "" Text1.SetFocus End Sub

Değişken tanımlamaları vealanların tümünü temizleprogram.

Page 36: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

Private Sub Command1_Click() onu

xt2.Text)

Then O ANATABLO

YAD) VALUES ('" & t1 & "'," & (t4) & "')"

nlu alanları giriniz!"

Burada önemli nokta, veri girişinin SQL cümlesinin

den

u, leri için

‘EKLE but t1 = Trim(Text1.Text) t2 = Trim(Te t3 = Trim(Text3.Text) t4 = Trim(Text4.Text) If t1 <> "" And t2 <> "" SQL = "INSERT INT(TCKIMLIKNO,OGRNO,AD,SOCInt(t2) & ",'" & UCase(t3) & "','" & UCase MyDB.Execute SQL Call Temizle Else MsgBox "Zoru End IfEnd Sub

doğrudan veritabanı üzerin.Execute metodu kullanılarak çalıştırılması ile gerçekleştirilmesidir. Bu metodveri çekme deyim(SELECT gibi) kullanamayız.

Private Sub Command2_Click() RA butonu

TABLO WHERE TCKIMLIKNO xt1.Text) & "'"

yRS.BOF = False Then

amıştır..." l Temizle

Burada SQL deyimi OpenRecordset ile kullanılıyor.

sı mümkün ‘A SQL = "SELECT * FROM ANA= '" & Trim(Te Set MyRS = MyDB.OpenRecordset(SQL, dbOpenDynaset) If MyRS.EOF = False Or M Text2.Text = MyRS("OGRNO") Text3.Text = MyRS("AD") Text4.Text = MyRS("SOYAD") Else MsgBox "Aranan kayıt bulunam Cal End If End Sub

Doğrudan çalıştırılmadeğil. Yöntem aynen Native veritabanı bağlantısında olduğu gibi çalışıyor.

Private Sub Command3_Click() butonu

.Text)

Then ATABLO SET AD = '" & UCase(t3) &

WHERE TCKIMLIKNO = '" & t1 &

le

nlu alanları giriniz!"

SQL deyimi doğrudan çalıştırılıyor. Ancak özel bir

eyimini a

gine ir

e .

‘DÜZELT t1 = Trim(Text1.Text) t2 = Trim(Text2 t3 = Trim(Text3.Text) t4 = Trim(Text4.Text) If t1 <> "" And t2 <> "" SQL = "UPDATE AN"',SOYAD = '" & UCase(t4) & "' "'" MyDB.Execute SQL, dbSQLPassThrough Call Temiz Else MsgBox "Zoru End IfEnd Sub

parametre olan dbSQLPassThrough ile. Bu parametre SQL ddoğrudan ODBC veritabanıngeçirir. Deyim, MS Jet Enkontrollerinden muaf olur (bkz:bsonraki sayfa). Veri üzerinde write (yazma) işlemi gerçekleştirecek SQL deyimlerinin bu şekildçalıştırılması gereklidir

Private Sub Command4_Click() KAPAT butonu. End End Sub Private Sub Command5_Click()

izle TEMİZLE butonu

Call TemEnd Sub

36

Page 37: “VERİTABANI UYGULAMALARI”andirinbp.ksu.edu.tr/depo/belgeler/VB2_1511021242296983.pdf · 2015-11-02 · Veritabanı üzerinde çalışan bir Visual Basic programı geliştirebilmek

Tolga GÜYER © 2001-2004

37

rivate Sub Command6_Click() İL butonu

ABLO WHERE TCKIMLIKNO = t1.Text) & "'"

urada da düzeltme işleminde lduğu gibi SQL deyimi

P‘S SQL = "DELETE FROM ANAT'" & Trim(Tex MyDB.Execute SQL, dbSQLPassThrough Call Temizle End Sub

BodbSQLPassThrough ile doğrudan çalıştırılıyor.

Global MyDB As Database Modül tanımlaması. 4. MS VB Programı & ODBC ORACLE Veritabanı Erişim Hiyerarşisi