İnternet Teknoloji Tasarım icinde SQL 1.Bölüm İçin Örnek Program konusu , .Form1 görünümü aşağıdaki gibi olmalıdır. İşte gördüğünüz üzere 4 text box,4 label, 8 buton,1 frame mevcut.Form görünüşünü hazırladığınız zaman frame,düzelt ve sil butonlarının visible özelliğini false, text kutularının enabled özelliğinide ...
![]() |
|
#1
| ||||
| ||||
| SQL 1.Bölüm İçin Örnek Program .Form1 görünümü aşağıdaki gibi olmalıdır. İşte gördüğünüz üzere 4 text box,4 label, 8 buton,1 frame mevcut.Form görünüşünü hazırladığınız zaman frame,düzelt ve sil butonlarının visible özelliğini false, text kutularının enabled özelliğinide false yapın.Bu arada Frame üstünde bulunalar frame haret edincede etmektedir.Yani Objeler frame üstüne oluşturulmuştur.Not : Project menüsünden referances'i seçip karşınıza gelecek olan pencerede "Microsoft ActiveX data Objects 2.5 Library" veya sizde olan sürümünü seçmeyi unutmayın.Höğ bu nedir derseniz ADO,DAO,Laho yazısını oluyun... Veritabanı'na gelince access'i açın ve id,okulno,adisoyadi,sinif fieldlerini sıra ile otomatiksayı,sayı,metin,metin şeklinde tanımlayın.ve tablo ismi olarak ogrenci verin.Ve veritabanını c:\uygulama dizini içine atın. Evet şimdi kodları açıklayarak ilerleyelim. Kod: Option Explicit ' genaral Declarations Dim baglanti Dim rs Dim sql Dim id Kod: Private Sub Form_Load() ' form load yaw ehueheu
Set baglanti = New ADODB.Connection
baglanti.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & "c:\uygulama\data.mdb"
End Sub Form Load 'da ado veritabanına bağlanıyoruz.Dikkat edin Sql komutlarını kullanacağımız Ado kullanmayacağız demek değildir.Yani Ado veya Dao kullanarak veritabanına bağlanmadan Sql komutları bir işe yaramaz. Kod: Private Sub Command1_Click() 'yeni Kayıt Text1.Text = "" Text1.Enabled = True Text1.BackColor = &HC0FFFF Text2.Text = "" Text2.Enabled = True Text2.BackColor = &HC0FFFF Text3.Text = "" Text3.Enabled = True Text3.BackColor = &HC0FFFF Text1.SetFocus End Sub Kod: Private Sub Command2_Click() 'kaydet
If IsNumeric(Text1.Text) = True Or Text1.Text <> "" Then
sql = "select okulno from ogrenci where okulno=" & Text1.Text
Set rs = baglanti.Execute(sql)
If Not rs.EOF Then
MsgBox ("Böyle bir Kayıt Var")
Set rs = Nothing
GoTo 10
else
Set rs = Nothing
End If
sql = "insert into ogrenci(okulno,adisoyadi,sinif) values(" & Text1.Text & ",'" & Text2.Text & "','" & Text3.Text & "')"
baglanti.Execute (sql)
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Else
MsgBox "Okul numarası Strign değer alamaz veya okul numarası boş olamaz"
10 End If
End Sub Kaydet butonu biraz karışık gibi görünüyor ama kesinlikle değil.Veritabanında okulno field'ini sayı olarak tanımladığımızda kullanıcı gelip okulno yerine string değer girdiğinde program doğal olarak "ne ediyon kardeşim" diyerekten hata verecektir.Burda program haklıdır.Ama bir programcı olarak programı sizin eğitmeniz daha iyi olur.Prgramı eğitmek için Isnumeric() fonksiyonu kullandık.Bu fonksiyon bir değişkenin sayı olarak işleme tabi tutulup tutulmayacağını sınar.Eğer değer integer yani sayı ise true değilse false değerini verir. "If IsNumeric(Text1.Text) = True Or Text1.Text <> "" Then" burdada aynı şekilde eğer text1'in değeri integer ise ve text1 boş değilse devam ediyor.Eğer koşul sağlanmıyorsa "Okul numarası Strign değer alamaz veya okul numarası boş olamaz" mesajını veriyor. Evet gördüğünüz gibi sql = "select okulno from ogrenci where okulno=" & Text1.Text ifadesi ile okulno field'i içinde bulunan ve okulno değeri text1'e eşit olan kayıtları değerleri alıyoruz.Ve bunu Set rs = baglanti.Execute(sql) diyerek işliyoruz.Dikkat edin set rs dedik ancak kayıt seti tanımlamadık.Şu an elimizde sadece SQL komutundan seçilecek öğerenci bilgilerinin bulunduğu bir dizi değişken var.Burda program kontrolü elimizde olduğundan iki değer olabilir.1-1 Tane Kayıt var, 2- Kayıt yok.Bu sınamayı If Not rs.EOF Then ile ayapıyoruz.Eğer kayıt varsa "Böyle bir kayıt var" mesajını kullanıcıya veriyoruz ve Set rs = Nothing ile dizi değişkenini tabir yerinde ise kapatıyoruz ve 10 ile işaretdeğimiz satıra yolluyoruz.Eğer kayıt yok ise yine Set rs = Nothing ile dizi değişkenini tabir yerinde ise kapatıyoruz.Ama bu sefer hiçbir satıra yollamıyoruz.Aynen devam ediyor. İşte en can alıcı nokta verileri veritabanına çakmak için sql = "insert into ogrenci(okulno,adisoyadi,sinif) values(" & Text1.Text & ",'" & Text2.Text & "','" & Text3.Text & "')" ifadesini kullanıyoruz.Ancak bu satrın işlenmesi demek veriler çakıldı demek değildir.Nasıl çakacağıma geçmeden önce hemen bu sql2 ifadesini açıklayalım.Bidiğiniz gibi inster into komutu ile kayıt ekliyorduk.Sanırıminsert into ogrenci(okulno,adisoyadi,sinif) bölümüne kadar herkes anladı.daha sonra values(" & text1.text & ",'" dedik.Evet text1 değeri yani okulno veritabanında sayı(integer) olduğundan '(tırnak) kullanmadık.Ancak adisoyadi ve sinif değeri metin(string) olduğundan '(tırnak kullandık).İşte şimdi hayde hep beraber veriyi çakalım.baglanti.Execute (sql) işte sql komutundan sonra bu ifade işlendiği an veri çakılır.Şimdi "yukarda set rs =baglanti.execute(sql) dedin burda neden sadece baglanti.execute(sql) dedin" dediğinizi duyar gibiyim.Hemen açıklayalım.Şimdi orda bize değer lazımdı.Yane kayıt varmı yok mu diye.Burda değere gerek yok.Sonuçta değeri bilsekte veriyi çakacaz bilmesekte.Bu işlemlerin sonunda text kutuları boşaltılıyor.Ve kayıt işlemi bitiyor. Kayıt Düzeltme,silme işlemine geçmeden kayıt aramayı anlatayım.Çünkü burda kayıt düzeltmeyi ve silmeyi alakadar eden birkaç husus var. Ara butonuna tıklanınca frame1'i 2040,720 koordinatına getiriyor.Daha sora frame1'in visible özelliğini tru yapıyor ve görünür hale getiryor.Şimdi can alını nokta aşağıda... Kod: Private Sub Command7_Click() ' bul
On Error Resume Next
sql = "select * from ogrenci where okulno=" & Text4.Text
Set rs = baglanti.Execute(sql)
Text1.Text = rs("okulno")
Text2.Text = rs("adisoyadi")
Text3.Text = rs("sinif")
id = rs("id")
If Err Then
MsgBox "aradığınız kayıt bulunamadı"
GoTo 10
End If
Command3.Visible = True
Command4.Visible = True
Text1.Enabled = True
Text1.BackColor = &HC0FFFF
Text2.Enabled = True
Text2.BackColor = &HC0FFFF
Text3.Enabled = True
Text3.BackColor = &HC0FFFF
Text1.SetFocus
Frame1.Move 5000, 5000
Frame1.Visible = False
10 Set rs = Nothing
End Sub Ara butonuna bastınız.Frame gelince orda bulunan text kutusuna okulnumarasını giriyorsunuz.Bul butonuna basıyorsunuz ve...... İlk önce on error resume next diyoruz çünkü kayıt bulunamayınca program hata verecektir.Bunun nedeni örneğin kayıt bulunamayınca rs("okulno") 'un değerinini boş olması yani öyle bir kayıt olmaması ve bizim bu değeri başka bir değişkene aktarmak isteğimizdir.Eğer hata yoksa zaten bir okulno'da en fazla bir öğrenci olacağından sql komutu doğrultusunda tek seçenek gelecektir.Ve bu değerleri sırası ile text1,text2,text3'e ve id değişkenine aktarıyoruz.Sanırm neden id değişkenine rs("id") değerini aktarıyoruz diyeceksiniz.İşte kayıt düzeltme ve silme işleminde bu id değeri ile işi koparacağız.Daha sora eğer hata varsa ki bu kayıt bulunamamasına denk geliyor "aradığınız kayıt bulunamadı" cinsinden kullanıcıya bir mesaj veriyoruz ve 10 ile işaretlediğimiz satıra gönderiyoruz. Ancak eğer hata yoksa ki buda kayıt bulundu demek oluyor dediğim gibi ilgili yerlere bilgiler aktarılıyor ve command3,command4'ün visible özelliği true oluyor.Bildiğiniz gibi command3 ve commad4 kayıt düzeltme ve silme butonuna denk geliyor...Daha sonra text1,text2,text3'ün enabled özellikleri true arka renkeride sarı hale getiriliyor.İmleç text1'e yollanıyor. Kod: Private Sub Command8_Click() 'iptal Frame1.Move 5000, 5000 Frame1.Visible = False End Sub Kod: Private Sub Command3_Click() ' Düzelt
sql = "select okulno from ogrenci where okulno=" & Text1.Text & " and id <>" & id
Set rs = baglanti.Execute(sql)
If Not rs.EOF Then
MsgBox ("Böyle bir Kayıt Var")
Set rs = Nothing
GoTo 10
Else
Set rs = Nothing
End If
sql = "update ogrenci set okulno=" & Text1.Text & ",adisoyadi='" & Text2.Text & "', sinif='" & Text3.Text & "' where id=" & id
baglanti.Execute (sql)
10
End Sub İşte size düzeltme.Düzeltme işleminin kaydetme 'den iki tane farklı yanı var.1 insici okulno sorgulamada 2 ncisi ise instert into yerine update kullanılmış olması.Sanırm bu farkarı açıklamam yeterli olacaktır.Okulno sorgulamak için sql = "select okulno from ogrenci where okulno=" & Text1.Text & " and id <>" & id dedik.Şimdi bu sql cümlesini açalım.Hani kayıt ararken bkayıt bulunduğu zaman id değişkenine ilgili kayıtın veritabanında otomatiksayı olan değerini atamıştık.Sizde bana ne iş diye sormuştunuz.Burdki sql cümlesinde where sorgusunu kullanarak okulno değeri text1'e eşit olan ancak id değeri id değişkenine eşit olmayan kayıtlar seçiliyor.Peki neden id'yi işe kattın derseniz nedeni şudur.Eğer id'i işe katmasaydık sql = "select okulno from ogrenci where okulno=" & Text1.Text & "'" diyecektik.Bu durumda düzeltmekte olduğunuz kayıtın eğer okulno sunu değiştirmezseniz"Böyle bir Kayıt Var" mesajını alacaktınız.Çünkü düzeltmekte olduğunuz kayıtta zaten veritabanında ve siz onuda işleme tabi tutuyorsunuz.Ancak okul değerinin girildiği text1'in enabled özeliği false olursa değiştirilemez ve sizde bu sql sorgusunu yazmak zorunda kalmazsınız. sql = "update ogrenci set okulno=" & Text1.Text & ",adisoyadi='" & Text2.Text & "', sinif='" & Text3.Text & "' where id=" & id dediğimizde id 'si aramada aldığımız değere eşit olan kayıtın bilgilerini değiştir demek oluyor.Budda where sorgusu ile oluyorBunun dışında zaten kalıp olan update ifadesi...... Kod: Private Sub Command4_Click() 'Sil sql = "delete from ogrenci where id=" & id baglanti.Execute (sql) Text1.Text = "" Text2.Text = "" Text3.Text = "" Text1.Enabled = False Text2.Enabled = False Text3.Enabled = False Text1.BackColor = &H80000005 Text2.BackColor = &H80000005 Text3.BackColor = &H80000005 End Sub Silme işleminde delete komutunu kullandık.Kayıt aradıktan sora atanan id değişkeni sayesinde id değeri tek olduğundan veritabanındaki idye'eşit olan kayıt siliniyor...Gerisini açıklamay bile gerek yok.... Kod: Private Sub Command6_Click() baglanti.Close Set baglanti = Nothing End End Sub Erhan SELİMOĞLU 'na Teşekkürler ![]() #include <middleeast.h> #define ISRAELIS foul_beasts |