TEMMUZ27

ASP ve Jquery AJAX apisi kullanarak Access'den gelen verileri sayfalara bölmek

ASP Programlama kategorisinde | [ 1059 ] kez okunmuş | [5] 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.

Merhaba,

Uzun süredir yeni içerik ekleyemiyordum, nedeni de yazmış olmak için birşeyler eklemek istememem ve biraz da zaman konusundaki problemler.

Dün buradaki yazıya yazılan yorum, yazmaya değecek ve birçok kişinin ilgisini çekecek birkaç konuyu birden içermesi dolayısıyla yeni yazımın konusunu belirledi.

Aynı konuda

  • Access veritabanı bağlantısı
  • Access'den gelen verilerin sayfalara bölünerek ziyaretçiye sunulması
  • JQuery'nin Ajax apisinin bu işlemlerde kullanımı

gibi konuları birlikte kullanmak benimde hoşuma gitti ve kollarımı sıvadım başladım kodlamaya.

Konu sonunda nasıl bir sonuca ulaşacağınızı şimdiden görmek isterseniz

  • Uygulamanın kodlanmış ve çalışır halini inceleyin
  • Uygulamayı bilgisayarınıza indirin.

Gelelim kullanılan materyallere :)

  • jquery.js
  • inner.gif (ajax uygulamarından aşina olduğunuz loading animasyonu)
  • default.asp (İlk sayfa açıldığında görüntülenecek ve sayfalama kodlarının olduğu sayfa)
  • veriler.asp (Verilerin ajax kullanılarak bir div içerisinde görüntüleneceği sayfa - Liste sayfası)
  • etiket.mdb (Verilerin bulunduğu access veritabanı)

Default.asp'nin kodları aşağıda



<html>
<head>
<script type="text/javascript" src="js/jquery-1.2.6.pack.js"></script>
<script language="javascript">
 $(document).ready(function() {
  // sayfa ilk açıldığında ilk kayıtlardan oluşan lşisteyi yükletiyoruz
  Ajx(1);
      });
  
 // jquery fonksiyonumuzu oluşturuyoruz
 // tek parametre kullanıyoruz oda sayfa numarası
 function Ajx(sayfa)
  {
   // .slideToggle ile ilk önce verilerin olduğu div'i kapatıyoruz (işin şov kısmı pek bi işlevi yok
         $('#kayitlar').slideToggle("fast"); 
  
   // ajax uygulamalarında görmeye alışık olduğumuz loading....
   $('#kayitlar').html('<center><img src="js/spinner.gif" alt="veri aliniyor..."><br>Veri Alınıyor...</center>');
   $.ajax({
     type: 'GET',
     url: 'veriler.asp',  // ajax ile hangi sayfası çağıracaksan burada o sayfanın adı olacak
           cache: false,  
     data: 'p='+sayfa, // fonksiyondaki tek parametremizi burada kullanıyoruz.
    
     success: function(sonuc) { 
       // gelen sonuçları yazıyoruz
     $('#kayitlar').html(sonuc);
    
    // div2i tekrar açıyoruz
    $('#kayitlar').slideToggle("fast");    
    
     }
  });
 }

</script>
<style type="text/css">
<!--
.ListeItem {
 font-family: "trebuchet MS";
 font-size: 12px;
 font-weight: normal;
 color: #333333;
 background-color: #E4F4FC;
 border-bottom-width: 1px;
 border-bottom-style: solid;
 border-bottom-color: #666666;
}
a{
 color: #333333;
 text-decoration:underline;
}
a:hover{
 color: #333333;
 text-decoration:none;
}

.ListeAltItem {
 font-family: "trebuchet MS";
 font-size: 12px;
 font-weight: normal;
 color: #333333;
 background-color: #F7F7F7;
 border-bottom-width: 1px;
 border-bottom-style: solid;
 border-bottom-color: #666666;
}
.Baslik {
 font-family: "trebuchet MS";
 font-size: 12px;
 font-weight: bold;
 color: #000000;
 background-color: #A7C5E4;
 border-bottom-width: 2px;
 border-bottom-style: solid;
 border-bottom-color: #003366;
}
.Sayfalar {
 font-family: "trebuchet MS";
 font-size: 12px;
 font-weight: normal;
 color: #003366;
}

-->
</style>
</head>
  <body>

      <%

 ' Her sayfada kaç kayıt görüntülenecek
 MaxSayi = 10
 
 ' Veri tabanı bağlantısını oluştruyoruz.
   set objConn = Server.CreateObject("ADODB.Connection")
 objConn.Open = "Driver={Microsoft Access Driver (*.mdb)};Dbq="& Server.MapPath("db\etiket.mdb")

 Set objRs = Server.CreateObject("ADODb.RecordSet")
 strSQL = "SELECT * FRom tblEtiketler ORDER by fldEtiket ASC"
 objRs.Open strSQL, objConn, 1, 3

 ' Eğer kayıt varsa
 if Not objrs.EOF then

 ' Toplam kayıt sayısını aldık
 ToplamKayit = objRs.RecordCount

 ' Eğer toplam kayıt sayısı sayfa başı göserilecek sayıya kalansız bölünebiliyorsa
 If ToplamKayit mod maxSayi = 0 Then
  ' Toplam kaç sayfamız olacak
  SayfaSayisi = ToplamKayit / maxSayi
 else ' Bölünemiyorsa
  SayfaSayisi = ToplamKayit / maxSayi+1
 End If

%>
  
  <div id="kayitlar">Veriler Yükleniyor...</div>

<div align="center" class="Sayfalar">Toplam
                <span style="font-weight: bold">
                <% =Int(SayfaSayisi) %>
                </span>                sayfada <span style="font-weight: bold">
                <% =ToplamKayit %>
                </span>                adet kayıt bulundu<br />
<% For p = 1 To SayfaSayisi %>
                    [ <a href="javascript:Ajx(<% =p %>);"><%= p %></a> ]
<% Next %>


  </div>
<%
  else %>
 <div id="kayitlar">Hiç Veri Bulunamadı</div>
<%
  end if
 objRs.Close
 Set objRs = nothing

 %>
</body>
</html>




verilerin listelendiği veriler.asp'nin kodları


<%
 ' Ajax içerisindeki bilgilerin türkçe karakter problemini ekarte ediyoruz :)
 Response.Charset = "iso-8859-9"


 ' Veri tabanı bağlantısını oluşturuyoruz.
   set objConn = Server.CreateObject("ADODB.Connection")
 objConn.Open = "Driver={Microsoft Access Driver (*.mdb)};Dbq="& Server.MapPath("db\etiket.mdb")


 ' Sayfa başına kaç kayıt gösterilecek onu belirtiyoruz
 MaxSayi = 10
 
 'Kaçıncı sayfayı görüntüleyeceğimizle ilgili parametreyi alıyoruz
 iSayfa = Request.Querystring("p")


 ' Kayıt setimizi oluşturuyoruz
 Set objRs = Server.CreateObject("ADODb.RecordSet")
 strSQL = "SELECT * FRom tblEtiketler ORDER by fldEtiket ASC"
 objRs.Open strSQL, objConn, 1, 3
%>
<table width="400" border="0" align="center" cellpadding="1" cellspacing="1">
  <tr class="Baslik">
    <td width="26">#</td>
    <td width="234">Etiket</td>
    <td width="130">Hit</td>
  </tr>
<%
  
  ' Eğer kayıt varsa
  if Not objRs.EOF Then 

   ToplamKayit = objRs.RecordCount
   
   If ToplamKayit mod maxSayi = 0 Then
    ToplamSayfa = ToplamKayit / maxSayi
   else
    ToplamSayfa = ToplamKayit / maxSayi+1
   End If
   
   ' Eğer sayfa sayısı gelmemişse yada hatalı geldiyse
   If iSayfa ="" or Not IsNumeric(iSayfa) or CINT(iSayfa)>ToplamSayfa Then
    iSayfa=1
   End If

   ' Bulunduğumuz sayfadaki ilk kayıda geliyoruz
   objRs.Move((iSayfa-1)*MaxSayi)
   i=1
   
   Do while not objRs.EOF and i < MaxSayi +1    
    
    ' Kayıt listesini düzgün gösterelim
    if i mod 2 then
     cls = "ListeItem"
    else
     cls = "ListeAltItem"
    end if
    
 %> 
  <tr class="<%=cls %>">
    <td><% =i+((iSayfa-1)*MaxSayi) %></td>
    <td><a href="http://www.ismailkaplan.com/etiket/<% =objRs("fldEtiket") %>"><% =objRs("fldEtiket") %></a></td>
    <td><% =objRs("fldEtiketsayac") %></td>
  </tr>
<%    
 
    objrs.Movenext
    i = i+1
    Loop
   
  ' Eğer kayıt yoksa
  else
    %>  
 
  <tr>
    <td colspan="3"><div align="center">Kayıt bulunamadı</div></td>
  </tr>
  <%   
     
    end if %>
</table>
<%

 'Kayıt seti nesnesini kapatıyoruz
 objRs.Close
 Set objRs =nothing
 
%> 




Umarım işinizi görür.

Kodlarda yeteri kadar yorum kullandığım için neyin ne işe yaradığı konusunda ayrıntılar yazmayacağım. Zaten çalışan hali ve gerekli tüm dosyaları indirebileceksiniz.

Yorumlar

Oğuzhan | 2/5/2010 9:04:26 PM
Merhaba İsmail Bey,
Güzel paylaşım yapmışsınız, teşekkürler. Yanlız benim sitede 50 sayfa sürecek yazı var. Sayfa linkleri 1 den 50ye kadar gitse kötü olur. 5 li 5li göstermesi mümkünmü acaba?
illaki | 11/2/2009 1:47:34 PM
iyi tamamda şu silme işlemine bunu uygulayamadım. alt alta listelenen verilerden birisini silicem ve sildiğim veri satırı yok olucak. nasıl halledebilirim?
UmutDenizi | 10/29/2009 10:36:07 PM
Merhaba İsmail Hocam,
Çok güzel bir paylaşım.Teşekkür Ederim.Yalnız şöyle bişey sormak istiyorum.
Sayfalanmış asp verilerini örn 60 sn`de bir nasıl refresh edebiiliriz?
Yani aynı sayfayı yine sayfa yenilenmeden div aralığını yenilemek istediğimizde ne yapmamız gerekiyor.
Bilgi verirseniz minnettar olurum.Selam ve Dua İle..
Merhaba, sayfada bulunan herhangi bir div'in içeriğini belirli periyodda refresh yapmak mümkün. Bir ara lazım olmuştu araştırmıştım. Jquery'nin timer plug-in'i sanırım işinizi görecektir. Malesef uzun süredir yoğunluktan dolayı yeni paylaşımlar yapamıyorum. bir süre daha bu şekilde gidecek gibi görünüyor. Tekrar siteyi aktifleştirip yeni konular açmaya çalışıcam en kısa zamanda. Bu konuda da birşeyler yazmak hoş olabilir. İlginiz için teşekkürler.
10/30/2009 1:58:23 AM tarihinde yazılmıştır.
Emre | 8/1/2009 10:48:42 AM
İsmail bey merhaba; bir zamanlar asp ile youtube`den video çeken ve sayfalayan bir kod yazmıştınız, youtube algoritmaları değiştirdikten sonra çalışamaz oldu, sizde daha sonra kodu tekrar güncellemediniz; sormak istediğim acaba tekrar güncelleyecekmisiniz?
Merhaba, O konuda çok mail gönderildi ve hâla gönderiliyor. Planlarım arasında tekrar o şekilde bir kod yazmak yok aslında ama gelen talepler bu şekilde bir güncelleme yazmanın zarardan çok yarar getireceğini gösteriryor. Şu sıralar işle ilgili bir seyahatteyim, seyahatimden döndüğümde konuyla ilgilebilirim. Fakat ne kadar bir süre alır bilemiyorum :) İlginiz için teşekkürler.
8/1/2009 4:07:23 PM tarihinde yazılmıştır.
Artvin | 7/29/2009 10:39:34 PM
İsmail kardeş teşekkürler ellerine sağlık.Çalıştırdım süper oldu.Yalnız bir problemim veriler sayfasına ikinci bir değer göndermem gerekiyor.Sorgunun where kısmında kullanılacak bir değer.Bunun içinde bir yardımcı olabilirseniz sevinirim.
Tekrar teşekkrüler.
Merhaba. Ajax'a yeni parametreler gönderip onlarla işlem yapabilmenizi sağlayacak kodları hazırlayıp bu konuyu güncelleyebilir yada yeni bir konuda kullanabilirim. Fakat bir iş seyahatindeyim ve 3-4 gün daha sürecek gibi görünüyor. Seyahat dönüşü konuyla ilgileneceğim. İlginiz için teşekkürler.
8/1/2009 4:09:25 PM tarihinde yazılmıştır.

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