8 Aralık 2006 Cuma

ASP ve Access Veritabanı ile Veri İşlemleri

ASP ve Access Veritabanı ile Veri İşlemleri: Webkolog ile Adım Adım Rehber

Merhaba Webkolog takipçileri!

Bugün sizlerle ASP (Active Server Pages) kullanarak Microsoft Access veritabanları (.mdb uzantılı dosyalar) üzerinde nasıl veri işlemleri yapabileceğinizi detaylıca ele alacağım. Access veritabanları, özellikle küçük ve orta ölçekli web projelerinde hızlı ve kolay bir çözüm sunar. Bu makalede, veri listelemeden veri eklemeye, güncellemeye ve silmeye kadar temel işlemleri örnek kodlarla adım adım inceleyeceğiz. Haydi başlayalım!


1. Veritabanı Bağlantısı Oluşturma

Access veritabanına bağlanmak için ADODB (ActiveX Data Objects) nesnelerini kullanırız. İşte temel bağlantı kodu:


<%
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("veritabani.mdb"))
%>

Yukarıdaki kodda dikkat etmeniz gereken iki önemli nokta var:

  • veritabani.mdb: Bu, veritabanı dosyanızın adıdır. Kendi dosya adınızla değiştirmeniz gerekiyor.
  • Server.MapPath("veritabani.mdb"): Bu fonksiyon, web sunucusunda veritabanı dosyanızın fiziksel yolunu almanızı sağlar. Güvenlik nedeniyle veritabanı dosyanızı genellikle web kök dizininin dışında bir yere koymanız tavsiye edilir.

2. Veri Listeleme İşlemleri

Veritabanındaki verileri listelemek için ADODB.Recordset nesnesini kullanırız. İşte farklı listeleme senaryoları:

2.1. Tüm Verileri Listeleme

Bir tablodaki tüm verileri listelemek oldukça basittir. Bir döngü kullanarak kayıtlarda gezinebiliriz:


<%
Set rs = Server.Createobject("ADODB.Recordset")
sql = "SELECT * FROM tablo ORDER BY id DESC;"
rs.open sql, conn, 1, 3 ' Son parametreler, kaydın ileri ve geri hareket etmesini sağlar.
If rs.EOF or rs.BOF Then
Response.Write "Veritabanında hiç veri bulunamadı."
Else
Do Until rs.EOF
	Response.Write rs("sutun_adi") & "<br />" ' "sutun_adi" yerine kendi sütun adınızı yazın
	rs.MoveNext
Loop
End If
rs.Close
Set rs = Nothing
%>

Yukarıdaki örnekte sutun_adi yerine kendi tablonuzdaki bir sütun adını yazmalısınız.

2.2. Belirli Sayıda Veri Listeleme (Örnek: İlk 10 Kayıt)

Eğer sadece belirli sayıda kaydı listelemek isterseniz, bir döngü ve sayıcı kullanabilirsiniz:


<%
Set rs = Server.Createobject("ADODB.Recordset")
sql = "SELECT * FROM tablo ORDER BY id DESC;"
rs.open sql, conn, 1, 3
If Not rs.EOF And Not rs.BOF Then
For i=1 To 10 ' İlk 10 kaydı listeler
	If rs.EOF Then Exit For
	Response.Write rs("sutun_adi") & "<br />"
	rs.MoveNext
Next
Else
Response.Write "Listelenecek veri yok."
End If
rs.Close
Set rs = Nothing
%>
2.3. Verileri Sayfalayarak Listeleme (Pagination)

Büyük veri kümelerinde tüm veriyi tek seferde göstermek yerine, sayfalara ayırmak kullanıcı deneyimi açısından çok daha iyidir. ASP'de bu işlemi ADODB'nin sunduğu özelliklerle kolayca yapabiliriz:


<%
Set rs = Server.Createobject("ADODB.Recordset")
sql = "SELECT * FROM tablo ORDER BY id DESC;"
rs.open sql, conn, 1, 3 ' rs.Open'daki 1 ve 3 parametreleri, cursor'ın ileri ve geri hareket etmesini sağlar.
If rs.EOF or rs.BOF then
Response.Write "Henüz hiç veri eklenmemiş."
Else
sayfa = Request.QueryString("sayfa")
If sayfa="" Then sayfa=1
If Not IsNumeric(sayfa) Then sayfa=1

rs.PageSize = 15 ' Bir sayfada kaç kayıt gösterileceğini belirleriz
rs.AbsolutePage = sayfa

sayfa_sayisi = rs.PageCount

For i=1 To rs.PageSize
	If rs.EOF Then Exit For
	Response.Write rs("veri") & "<br />" ' "veri" yerine kendi sütun adınızı kullanın
	rs.MoveNext
Next

Response.Write "<p>Sayfa: "
For g = 1 To sayfa_sayisi
	If g = CInt(sayfa) Then
		Response.Write " <b>" & g & "</b> " ' Aktif sayfayı kalın göster
	Else
		Response.Write "<a href=?sayfa=" & g & "> " & g & " </a>"
	End If
Next
Response.Write "</p>"
End If
rs.Close
Set rs = Nothing
%>

Bu kod bloğu, URL'den sayfa parametresini alır ve buna göre verileri listeler. Sayfa numaralarını gösteren bağlantıları da otomatik olarak oluşturur.


3. Veri Ekleme İşlemleri

Veritabanına yeni bir kayıt eklemek için INSERT INTO SQL komutunu kullanırız. Kullanıcıdan alınan verileri güvenli bir şekilde eklemek için SQL enjeksiyonuna karşı dikkatli olmalısınız. Aşağıdaki örnekte Request.Form ile alınan veriler doğrudan kullanılmıştır, ancak üretim ortamlarında parametreli sorgular kullanmanız şiddetle tavsiye edilir.


<%
' Örnek: Formdan gelen verileri alalım
dim ad, soyad
ad = Request.Form("txtAd")
soyad = Request.Form("txtSoyad")

' SQL sorgusunu hazırlayalım
sql = "INSERT INTO kullanicilar (Ad, Soyad) VALUES ('" & Replace(ad, "'", "''") & "', '" & Replace(soyad, "'", "''") & "');"
' Replace fonksiyonu tek tırnakları iki tırnağa çevirerek basit bir güvenlik sağlar.
' Ancak parametreli sorgular çok daha güvenlidir.

' Sorguyu çalıştıralım
conn.Execute(sql)

Response.Write "<p>Veri başarıyla eklendi!</p>"
%>

Önemli Not: Yukarıdaki kodda Replace(ad, "'", "''") kullanımı, tek tırnak karakterlerini iki tırnağa çevirerek temel bir güvenlik önlemi sağlar ve SQL enjeksiyonunun önüne geçmeye çalışır. Ancak modern uygulamalarda ADODB.Command nesnesi ile parametreli sorgular kullanmak çok daha güvenli ve doğru bir yaklaşımdır. Access'te parametreli sorgu kullanımı biraz daha farklıdır ve sorgu içindeki parametreleri '?' ile belirtip Command nesnesinin Parameters koleksiyonuna eklemeniz gerekir.


4. Veri Güncelleme İşlemleri

Mevcut bir kaydı güncellemek için UPDATE SQL komutunu kullanırız. Genellikle güncelleme işlemi için kaydın benzersiz bir kimliğine (ID) ihtiyaç duyarız.


<%
dim guncellenecekId, yeniAd, yeniSoyad
guncellenecekId = Request.QueryString("id") ' URL'den veya formdan gelen ID
yeniAd = Request.Form("txtYeniAd")
yeniSoyad = Request.Form("txtYeniSoyad")

' Güvenlik için ID'nin sayısal olduğundan emin olalım
If IsNumeric(guncellenecekId) Then
sql = "UPDATE kullanicilar SET Ad = '" & Replace(yeniAd, "'", "''") & "', Soyad = '" & Replace(yeniSoyad, "'", "''") & "' WHERE ID = " & guncellenecekId & ";"
conn.Execute(sql)
Response.Write "<p>Veri başarıyla güncellendi!</p>"
Else
Response.Write "<p>Geçersiz ID bilgisi.</p>"
End If
%>

Tıpkı veri eklemede olduğu gibi, burada da Replace kullanımı temel bir önlemdir. Daha güvenli ve sağlam bir yapı için parametreli sorgulara yönelmek gerekir.


5. Veri Silme İşlemleri

Veritabanından bir kaydı silmek için DELETE FROM SQL komutunu kullanırız. Silinecek kaydın ID'sini belirlemek önemlidir.


<%
dim silinecekId
silinecekId = Request.QueryString("id") ' URL'den veya formdan gelen ID

' Güvenlik için ID'nin sayısal olduğundan emin olalım
If IsNumeric(silinecekId) Then
sql = "DELETE FROM tablo WHERE id=" & silinecekId & ";"
conn.Execute(sql)
Response.Write "<p>Veri başarıyla silindi!</p>"
Else
Response.Write "<p>Geçersiz ID bilgisi.</p>"
End If
%>

6. Veritabanındaki Sütun Toplamını Hesaplama

Bir sütundaki sayısal verilerin toplamını almak için SUM() SQL fonksiyonunu kullanırız. Bu, raporlama veya istatistiksel veriler için oldukça kullanışlıdır.


<%
Set say = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT Sum(sutun_adi) FROM tablo;" ' "sutun_adi" yerine toplamını almak istediğiniz sütunun adını yazın
say.Open SQL, conn, 1, 3
If Not say.EOF Then
Response.Write "<p>Toplam Değer: <b>" & say(0) & "</b></p>"
Else
Response.Write "<p>Toplam değer hesaplanamadı veya veri yok.</p>"
End If
say.Close
Set say = Nothing
%>

say(0) ifadesi, sorgu sonucunda dönen ilk (ve tek) sütundaki değeri alır.


7. Bağlantıyı Kapatma ve Nesneleri Temizleme

Veritabanı işlemleri bittikten sonra bağlantıyı kapatmak ve kullandığınız ADODB nesnelerini serbest bırakmak çok önemlidir. Bu, sunucu kaynaklarının verimli kullanılmasına yardımcı olur ve potansiyel sorunların önüne geçer.


<%
If Not rs Is Nothing Then
rs.Close
Set rs = Nothing
End If
If Not conn Is Nothing Then
conn.Close
Set conn = Nothing
End If
%>

Bu kod bloğunu her veritabanı işleminden sonra (veya sayfanın sonunda) eklemeniz iyi bir uygulamadır.

Umarım bu makale, ASP ve Access veritabanı ile yapacağınız veri işlemleri konusunda size kapsamlı bir rehber olmuştur. Eski olmasına rağmen ASP hala birçok projede karşımıza çıkabiliyor ve bu temel bilgileri bilmek size büyük avantaj sağlayacaktır. Unutmayın, güvenlik her zaman önceliklidir; bu yüzden üretim ortamlarında parametreli sorgular ve daha gelişmiş güvenlik önlemleri kullanmaktan çekinmeyin.

Webkolog'u takipte kalın!

Hepinize bol kodlu ve başarılı projeler dilerim!

0 yorum:

Yorum Gönder