HAZİRAN29

ASP ile MySQL'den gelen verileri sayfalara bölme

ASP Programlama kategorisinde | [ 601 ] kez okunmuş | [1] Yorum » | Yorum Yaz »

Bu konu ekleneli 3 ay'dan uzun bir süre geçmiş. Konu geçerliliğini kaybetmiş ve/veya içerdiği linkler yayında olmayabilir.

Şimdiye kadar içerisinde bulunduğum forumlardan hemen hepsinde, standart olarak sorulan sorular arasında verileri sayfalama konusu bulunuyor. Herhangi bir sorgu sonucunda, kayıt setine yüklenmiş verilerin belirli sayılarla sayfalara bölünmesi işlemi aslında çok da zor bir işlem deil.

Aşağıda MySQL kullanılan bir projede kayıtları istediğimiz kadar kayıttan oluşan parçalara bölmek için gereken kodlara basit bir örnek bulacaksınız.

ilk olarak MySQL veritabanına bağlanmamız gerekiyor.

 <%
Mysql_server = "ServerAdi" 'MySQL Serverinizin adı, IP'si
Mysql_user = "KullaniciAdi" 'MySQL serverdaki Kullanıcı Adınız
Mysql_pass = "Sifre" 'MySQL Serverdeki Şifreniz.
Mysql_db = "VeritabaniAdi" 'Verilerle oynamak için gereken Veritabanı

' Bir bağlantı string'i oluşturuyoruz.
strConn = "DRIVER={MySQL ODBC 3.51 Driver}; SERVER="&mysql_server&"; UID="&mysql_user&"; pwd="&mysql_pass&";db="&mysql_db&";"

' Bağlantımız için Bağlantı Nesnesini oluşturuyoruz
Set objConn= Server.CreateObject("ADODB.Connection")

' Oluşturduğumuz nesneyi kullanıma açıyoruz.
objConn.Open strConn
%>


Veritabanı bağlantımızı yaptık... Sıra geldi parametre kontrolüne




<%
SayfalamaKayitSayi = 20 ' her sayfada kaç kayıt olacak
' p isimli bir parametre ile sayfa bilgisini sayfadan sayfaya taşıyoruz.
' p parametresini iSayfa isimlil bir değişkene yüklüyoruz.

iSayfa = Request.QueryString("p")
if Not Isnumeric(iSayfa) OR iSayfa = "" Then 'Eğer parametremiz Numeric bir veri ile yüklü değil ise
iSayfa = 1 ' Değişkene 1. sayfadayız diyoruz
iBaslangic = 0 ' Kayıtların, kaçıncı kayıttan itibaren gösterilmeye başlayacağını belirtiyoruz
else ' Eğer p parametresinden numeric bir veri gelmiş ise
iBaslangic = (iSayfa-1)*SayfalamaKayitSayi ' Kayıtların hangi kayıttan itibaren alınacağını belirttik
end if

' SQL sorgumuzu hazırlıyoruz.
' Aşağıdaki sorguda "tlbTabloAdi" adlı tablodan "iBaslangic" da kaç rakamı varsa ordan itibaren 20 kayıt istiyoruz.
strSQL = "SELECT * FROM tblTabloAdi Limit "& iBaslangic &", "& SayfalamaKayitSayi

' strSQL adlı sorguyu objRs isimli Kayıt Seti nesnesine yüklüyoruz
Set objRs = objConn.execute(strSQL)
%>

Kullanılacak kayıtlarımızı da elimize aldık. Şimdi kayıtlarımızı sayfamızda gösterelim ve sayfalama kodlarımızı ekleyelim..


<%
if objRs.EOF Then ' Eğer sorgu sonucunda herhangi bir kayıt bulunamamışsa
Response.Write"Listelenecek kayıt bulunamadı"

else
' Kayıt setindeki sn kayıda kadar aşağıdaki döngüyü çalıştır.
Do While Not objRs.EOF

Response.Write objRs("fldFieldAdi") &"<br>" ' fldFieldAdi adlı fieldde bulunan veriyi sayfaya yazdık

objRs.MoveNext ' Kayıt setindeki bir sonraki kayıta geçiyoruz
Loop ' Kayıtsetteki kayıtlar bitene kadar yukarıdaki işlemleri tekrarlıyoruz

' Sayfalama kodları başlar

 

'Toplam kayıt sayısını buluyoruz
iToplamSayi = objConn.Execute("SELECT COUNT(*) FROM tblTabloAdi")

' Toplam kayıt sayısını 20'şerli parçalara bölüp kaç sayfamız olduğunu buluyoruz
for i = 1 To cint(replace(iToplamSayi,",","."))/SayfalamaKayitSayi+1

' Eğer bulunduğumuz sayfa numarası yazıcaksa link olmasın
if i = int(iSayfa) Then

response.Write "<strong>"& i &"</strong>&nbsp;"

else

' Sayfalara linklerini veriyoruz
Response.Write "<a href=""?p="& i &""">"& i &"</a>&nbsp;"

end if

next
' Sayfalama kodları biter

end if
%>



Sayfalama kodlarınıda bitirdik. Şimdi nesnelerimizi kapatalım


<%

objRs.Close
Set objRs = Nothing

objConn.Close
Set objConn = Nothing

%>


Evet bu kadar :)

  • Kodların bir arada bulunduğu txt dosyasını incelemek için tıklayın


Şunu belirtmeme izin verin. Yukarıdaki kodlar sadece olayın mantığını anlamanız amaçlı yazılmıştır. Kendi bilgisayarımda kullandığım ve sorunsuz çalışan kodlardır (Veritabanı, tablo adı, field adları kendi veritabanınıza göre değişmelidir)

Olabildiğince bu tür konularda tamamen bitmiş kodlardan çok en basit halde oluşturulmuş kodları paylaşmayı tercih ediyorum. Bunun nedeni sizinde kodlara birşeyler katmanızı sağlamak. Ne kadar çok kod yazarsanız o kadar iyi olur.

Malesef kodların çalışır halini incelemek için buraya tıklayın diyemiyorum Hosting paketim'de oluşturmuş olduğum bir MySQL veritabanım yok :)


Farklı konularda görüşmek üzere...

Yorumlar

tekin | 8/3/2009 4:11:19 AM
<!--Yine gerekli dosyalarýmýzý sayfamýza taþýyoruz. -->
<!--#include file="ust.asp" -->
<div align="center">
<!--Veri tabanýmýza baðlanýyoruz ve ID lerine göre sondan baþa doðru sayfamýza çekiyoruz. -->
<%
sayfala=2
sayfa=cint(request.QueryString("sayfa"))
if sayfa="" then sayfa =0 end if
sql="select * from Haber order by id desc"
Rs.Open sql, kon, 1, 3
If RS.BOF And RS.EOF Then%>
<span class="style8" style="font-size: 12px">
<!--Burasý kontrol kýsmýmýz eðer veri tabanýmýz boþ ise kayýt yoksa sayfa hata vermemesi açýsýndan bizim belirlemiþ olduðumuz uyarý metni çýkacak. -->
Kayýtlarýmýzda herhangi bir haber bulunmamaktadýr...</span>
<%else
sira=0
git = Int((sayfa * sayfala)+ 0)
rs.Move(git)
for i=1 to sayfala
if not RS.eof then%>
</div>
<table width="370" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#ed6578">
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="21" background="images/menuback.jpg" class="style5"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="5%" class="style5"><div align="center"><img src="images/haber_k.gif" alt="" width="16" height="16" /></div></td>
<!--Baþlýðýmýzý çekiyoruz ve 40 karakterden fazla ise kesip otomatik olarak ... iþareti koyduruyoruz. -->
<td width="72%" class="style5"> <a rel="nofollow" href="haberdetay.asp?id=<%=rs("id")%>" class="style5"><%=left(rs("baslik"),40)%> <% If len(rs("baslik"))>40 Then response.Write("...") end if%>
</a></td>
<td width="23%" class="style2"><div align="right"><%= rs("tarih") %> </div></td>
</tr>
</table></td>
</tr>
<tr>
<td>
<%if sira=0 then%>
<table width="98%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr><!--Eðer haberlere resim eklememiþ iseniz default resmimiz çýkacak. -->
<td><div align="justify"><img src="<%if rs("resim")<>"" then%><%= rs("resim") %><%else%>images/haber.gif<% End If %>" hspace="3" vspace="5" align="left" /><span class="style5"><%=left(rs("metin"),400)%> ...</span></div>
<div align="justify" class="style5"></div></td>
<tr align="right"><td><a rel="nofollow" href="haberdetay.asp?id=<%=rs("id")%>" class="style5">Devamý ...</a></td></tr>
</tr>
</table>
<%end if
if sira=1 then%>
<table width="98%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><div align="justify"><img src="<%if rs("resim")<>"" then%><%= rs("resim") %><%else%>images/haber.gif<% End If %>" hspace="3" vspace="5" align="right" /><span class="style5"><%=left(rs("metin"),400)%> ...</span></div>
<div align="justify" class="style5"></div></td>
<tr align="right"><td><a rel="nofollow" href="haberdetay.asp?id=<%=rs("id")%>" class="style5">Devamý ...</a></td></tr>
</tr>
</table>
<%end if%> </td>
</tr>
</table></td>
</tr>
</table>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="10"></td>
</tr>
</table>
<div align="center">
<%
sira=sira+1
if sira=2 then sira=0
RS.MoveNext
end if
next

End If
Rs.close%>
</div>
<!-- Makaleler kýsmýna geçelim -->
<div align="center">
<!--Ayný þekilde veri tabanýmýzdan bu kez de makalelerden verilerimizi sayfamýza çekeceðiz. -->
<%
sayfala=2
sayfa=cint(request.QueryString("sayfa"))
if sayfa="" then sayfa =0 end if
sql="select * from Makale order by id desc"
Rs.Open sql, kon, 1, 3
If RS.BOF And RS.EOF Then%>
<span class="style8" style="font-size: 12px">Kayýtlarýmýzda herhangi bir haber bulunmamaktadýr...</span>
<%else
git = Int((sayfa * sayfala)+ 0)
rs.Move(git)
for i=1 to sayfala
if not RS.eof then%>
</div>
<table width="370" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#ed6578">
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="21" background="images/menuback.jpg" class="style5"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="5%" class="style5"><div align="center"><img src="images/makale_k.gif" alt="" width="16" height="16" /></div></td>
<td width="72%" class="style5"> <a rel="nofollow" href="makaledetay.asp?id=<%=rs("id")%>" class="style5"><%=left(rs("baslik"),40)%>
<% If len(rs("baslik"))>40 Then response.Write("...") end if%>
</a></td>
<td width="23%" class="style2"><div align="right"><%= rs("tarih") %> </div></td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<table width="98%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="60%"><div align="justify" class="style5"><%=left(rs("metin"),400)%> ...</div></td>
</tr>
<tr align="right"><td><a rel="nofollow" href="makaledetay.asp?id=<%=rs("id")%>" class="style5">Devamý ...</a></td></tr>
</table>
</td>
</tr>
</table></td>
</tr>
</table>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="10"></td>
</tr>
</table>
<div align="center">
<%
RS.MoveNext
end if
next

End If
Rs.close
%>
</div>
<!--Sitemizin sað alanýný sayfamýza ekliyoruz. -->
<!--#include file="alt.asp" -->
hocam ben bunu nasıl sayfalata bilirim

Konu hakkında düşüncelerinizi paylaşın

İsim / Nick

E-posta (Görüntülenmeyecektir)

web sitesi

Güvenlik Kodu Yandaki rakamları aşağıdaki kutuya yazınız