ASP ile MySQL verilerini sayfalama
Sniper tarafından 10 Mart 2009 tarihinde yazıldı.ASP veya diğer programlama dilleriyle çalışmaya yeni başlayanların sıklıkla karşılaştıkları bir sorundur veri sayfalama. Veritabanına bağlantı kurulur ilk önce. Bu web programlamaya başlangıç için en önemli adım sayılır çoğumuzun gözünde. Daha sonra bağlanılan veritabanından verileri çekip sayfaya bastırılır. Bundan sonra, artık kendimizi web programcısı olarak görmeye başlarız. Zaman ilerledikçe veritabanına eklediğimiz veriler çoğalır, çoğalır… Artık yeni bir sıkıntı peyda olmak üzeredir. VERİ SAYFALAMA! Bu sıkıntıyı gidermek için yazımda sizlere MySQL veritabanındaki verileri, istediğimiz sayıda kayıtlara bölerek sitelerimizde nasıl kullanacağımızı bildiğim kadarıyla anlatacağım. Yazımda yer alan kodların düzgün çalışabilmesi için sniper.zip dosyasını indirip MySQL´e veritabanı olarak eklemeniz gerekmektedir.
İşe değişkenlerimizi tanımlayarak başlayalım:
Dim Bag, Siteler, SQLTop, TopKayit Dim KayitSayisi, SayfaSayisi, Sayfa, i |
Bag = Veritabanımıza bağlantımızı sağlayacak değişken.
Siteler = Kayıtseti değişkeni.
TopKayit = Talep edeceğimiz kriterlere uyan kayıtların toplam sayısını tutan değişken.
KayitSayisi = Bir sayfada gösterilecek kayıt sayısını belirleyeceğimiz değişken.
SayfaSayisi = Talep ettiğimiz verilere ve kayıt sayısına göre toplam kaç sayfa veri oluşacağını tutan değişken.
Sayfa = O anda içinde bulunduğumuz sayfanın numarasını öğreneceğimiz değişken.
i = HTML tablomuzda kayıtların sıra sayılarını yazdıracağımız değişken.
Değişkenlerimizi tanımladıktan sonra sıra geldi bağlantımızı oluşturmaya:
Set Bag = Server.CreateObject("ADODB.Connection") Bag.Open = "DRIVER={MySQL ODBC 3.51 Driver};database=sniper;server=localhost;uid=sniper;password=tuncay;" |
Bağlantı string´imizin parametrelerinin alacağı değerler kısaca şöyledir:
database = Bağlantı kuracağımız MySQL veritabanımızın adı.
server = Bağlantı kuracağımız MySQL veritabanımızın bulunduğu server.
uid = Veritabanına ulaşmak için gerekli kullanıcı adı.
password = Kullanıcı adına ait şifre.
Bağlantımızı kurduktan sonra, bir sayfada kaç adet kaydın gösterileceğini KayitSayisi isimli değişkenimizde belirtiyoruz ve hangi sayfada olduğumuzu Sayfa değişkenine atıyoruz:
KayitSayisi = 2 'Eğer QueryString´de sayfa değişkeni tanımlanmışsa If Request.QueryString("s") <> "" Then 'Bulunduğumuz sayfayı bu değişkenin değeri olarak atayalım Sayfa = CInt(Request.QueryString("s")) Else 'Değilse başlangıç sayfa numaramızı 1 olarak atayalım Sayfa = 1 End If |
Önemli değişkenlerimizi de tanımladığımıza göre artık kayıt setimizi oluşturabiliriz. Kayıt setimizi oluşturmadan önce MySQL´de var olan bir kalıptan da kısaca bahsetmek istiyorum: LIMIT. Bu kalıp bize, sorgumuzda dönen kayıtlarından istediğimiz aralıktaki verileri süzerek dönmesini sağlar. Şöyle ki, LIMIT 5,10 şeklinde bir kullanım bize, istediğimiz sorguda dönen verilerin beşincisinden başlayarak 10 tanesinin iletilmesini sağlar. İkinci parametre kullanılmazsa (LIMIT 10 gibi) verilerin sadece ilk 10 tanesi geri döner. Bu da Access sorgularımızda kullandığımız TOP 10 a eşittir. Biz bu kalıbı kullanarak verilerimizi rahatlıkla sayfalayabileceğiz. Şimdi bu kalıbı da kullanarak kayıt setimizi açalım:
Set Siteler = Bag.Execute("SELECT * FROM tblSiteler ORDER BY fldID DESC LIMIT " & (KayitSayisi*Sayfa)-(KayitSayisi) & "," & KayitSayisi) |
Yukarıdaki SQL sorgumuz, KayitSayisi değişkeninin değerini “2″, Sayfa değişkeninin değerini de “3″ olarak kabul ettiğimizde aşağıdaki şekilde çıktı verdiğini kabul edebiliriz:
“SELECT * FROM tblSiteler ORDER BY fldID DESC LIMIT 4, 2″
Bu da bize 4. kayıttan itibaren 2 kaydın döndürülmesini istediğimiz anlamına gelmektedir. Kayıt setimizden gerekli kayıtları aldıktan sonra sayfalama linklerini yazdırabilmemiz için gerekli olan, sorgumuza eşit toplam kaç kayıt olduğunu öğrenmeliyiz:
Set SQLTop = Bag.Execute("SELECT COUNT(fldID) FROM tblSiteler") TopKayit = SQLTop(0) |
Verilerimizi sayfamıza yazdırmamız için gerekli tüm hazırlıkları tamamladık. Artık yazdırmaya başlayalım:
< % If Not Siteler.EOF Then 'HTML tablomuzu oluşturuyoruz. %> <table border="1" bordercolor="#C0C0C0" style="border-collapse:collapse; font:normal normal normal 11px verdana;" width="500"> <tr> <td width="5" bgcolor="#FFFBDF"><b>S</b></td> <td width="245" bgcolor="#FFFBDF"><b>Site Adı</b></td> <td width="250" bgcolor="#FFFBDF"><b>URL</b></td> </tr> < % 'Tablodaki sıra numarasını belirlemek için değişkenimizi tanımlıyoruz i=1 'Talep ettiğimiz kayıtların sonuna kadar... Do While Not Siteler.EOF '... tüm kayıtları sayfamıza bastırıyoruz %> <tr> <td align="center">< %=i%></td> <td><b>< %=Siteler("fldSiteAdi")%></b></td> <td><a href="<%=Siteler("fldURL")%>" style="color:#0000FF" target="_blank">< %=Siteler("fldURL")%></a></td> </tr> < % 'Sıra numarasını 1 arttırıyoruz i=i+1 'Kayıtsetimize sonraki kayda geçmesini söylüyoruz Siteler.MoveNext 'Yukarıdaki işlemin, verilerin sonuncusuna gelene kadar devam etmesi için döngümüzü çeviriyoruz Loop %> </table> |
Verilerimizi yazdırdıktan sonra sıra geldi sayfa numaralarını yazdırmaya:
<tr> <td colspan="3" align="right"> < % 'Toplam kayıt sayısı gösterilecek kayıt sayısından büyükse... If CInt(TopKayit) > CInt(KayitSayisi) Then 'Link verilecek kaç sayfamız olduğunu hesaplıyoruz SayfaSayisi = CInt(TopKayit) / CInt(KayitSayisi) If InStr(1,SayfaSayisi,",",1) > 0 Then SayfaSayisi = CInt(Left(SayfaSayisi,InStr(1,SayfaSayisi,",",1))) + 1 'Ve yine elimizdeki sayfa sayısı 1´den büyükse If SayfaSayisi > 1 Then 'Her sayfa numarası için sayfamıza linkimizi yazdırıyoruz For i=1 To SayfaSayisi Response.Write "<a href=""?s=" & i & """ style=""color:#0000FF"">" & i & "</a> " Next End If 'Sayfa numarası yazdırma işlemi bitti... End If %> </td> </tr> |
Ve final! Artık tablomuzdaki veriler, sayfalara ayrılmış ve linkleri oluşturulmuş bir şekilde HTML sayfamıza basıldı. Son olarak kodların tamamını yazdıktan sonra yazımı bitiriyorum. Kaliteli sitelerde kullanmanız dileğiyle…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | < % 'Her iyi programcı değişken tanımlarmış, ben ilk defa yapıyorum :) Dim Bag, Siteler, SQLTop, TopKayit Dim KayitSayisi, SayfaSayisi, Sayfa, i 'Bağlantımızı oluşturup açıyoruz Set Bag = Server.CreateObject("ADODB.Connection") Bag.Open = "DRIVER={MySQL ODBC 3.51 Driver};database=sniper;server=localhost;uid=sniper;password=tuncay;" 'Bir sayfada gösterilecek kayıt sayısı KayitSayisi = 2 'Eğer QueryString´de sayfa değişkeni tanımlanmışsa If Request.QueryString("s") <> "" Then 'Bulunduğumuz sayfayı bu değişkenin değeri olarak atayalım Sayfa = CInt(Request.QueryString("s")) Else 'Değilse başlangıç sayfa numaramızı 1 olarak atayalım Sayfa = 1 End If 'Kayıt sayımız ve sayfa numaramıza göre veritabanından verilerimizi talep ediyoruz Set Siteler = Bag.Execute("SELECT * FROM tblSiteler ORDER BY fldID DESC LIMIT " & (KayitSayisi*Sayfa)-(KayitSayisi) & "," & KayitSayisi) 'Veritabanında kriterlerimize uygun kayıtların toplam sayısını alıyoruz 'Bu sayfa numaralarını doğru yazdırabilmemiz için şart Set SQLTop = Bag.Execute("SELECT COUNT(fldID) FROM tblSiteler") TopKayit = SQLTop(0) 'Eğer veritabanımızdan kayıt dönüyorsa If Not Siteler.EOF Then 'HTML tablomuzu oluşturuyoruz. %> <table border="1" bordercolor="#C0C0C0" style="border-collapse:collapse; font:normal normal normal 11px verdana;" width="500"> <tr> <td width="5" bgcolor="#FFFBDF"><b>S</b></td> <td width="245" bgcolor="#FFFBDF"><b>Site Adı</b></td> <td width="250" bgcolor="#FFFBDF"><b>URL</b></td> </tr> < % 'Tablodaki sıra numarasını belirlemek için değişkenimizi tanımlıyoruz i=1 'Talep ettiğimiz kayıtların sonuna kadar... Do While Not Siteler.EOF '... tüm kayıtları sayfamıza bastırıyoruz %> <tr> <td align="center">< %=i%></td> <td><b>< %=Siteler("fldSiteAdi")%></b></td> <td><a href="<%=Siteler("fldURL")%>" style="color:#0000FF" target="_blank">< %=Siteler("fldURL")%></a></td> </tr> < % 'Sıra numarasını 1 arttırıyoruz i=i+1 'Kayıtsetimize sonraki kayda geçmesini söylüyoruz Siteler.MoveNext 'Yukarıdaki işlemin, verilerin sonuncusuna gelene kadar devam etmesi için döngümüzü çeviriyoruz Loop 'Şimdi sayfa sayımız 1'den fazlaysa sayfa sayılarımızı yazdırıyoruz %> <tr> <td colspan="3" align="right"> < % 'Toplam kayıt sayısı gösterilecek kayıt sayısından büyükse... If CInt(TopKayit) > CInt(KayitSayisi) Then 'Link verilecek kaç sayfamız olduğunu hesaplıyoruz SayfaSayisi = CInt(TopKayit) / CInt(KayitSayisi) If InStr(1,SayfaSayisi,",",1) > 0 Then SayfaSayisi = CInt(Left(SayfaSayisi,InStr(1,SayfaSayisi,",",1))) + 1 'Ve yine elimizdeki sayfa sayısı 1´den büyükse If SayfaSayisi > 1 Then 'Her sayfa numarası için sayfamıza linkimizi yazdırıyoruz For i=1 To SayfaSayisi Response.Write "<a href=""?s=" & i & """ style=""color:#0000FF"">" & i & "</a> " Next End If 'Sayfa numarası yazdırma işlemi bitti... End If %> </td> </tr> </table> < % 'Artık kodumuzu deneyebiliriz End If %> |

elinize sağlık. epeydir uğraştığım bir problemdi. hocam bir sorum olacak, row_num mysql ve asp ile nasıl kullanılır?
bilgilendirici bir yazı olmuş,elinize sağlık
hocam teşekkürler access den mysql e geçtim çok işe yaradı