+ Yanıtla
Sayfa Düzeni: 3 / 3
İlkİlk 1 2 3
Toplam 29 sonuçtan 21 ile 29 arası olanlar

Konu Başlığı: Veri listeleme mantığı

  1. #21

    Re: Veri listeleme mantığı

    Alıntı tesera tarafından gönderilen mesaj: Mesajı Göster
    @soul cevapların için teşekkürler. @absconder cevabın için çok teşekkür ederim. İstediğim tam olarak bu idi. Siz recordset kullanmışsınız ben getrows' a çevirdim. Ayrıca daha iyi bir performans için kategorilerimi veritabanından değil bir dosyadan okumaya karar verdim. ( XML, txt, vb.. )

    tesera getrowsun daha performanslı olduğunu bende duydum.Daha önce hiç kullanmadım farkı nedir? Birde kodları paylaşma şansın varmı acaba? Konuyu açalı çok olmuş gerçi ama...

  2. #22
    absconder vermiş olduğun örnek düzgün bir şekilde çalışıyor;ancak fazla veri kaydı olduğunda sayfa çok ağırlaşıyor.bunu nasıl çözebiliriz?


    Alıntı absconder tarafından gönderilen mesaj: Mesajı Göster
    sanırım istediğiniz bu şekil bir çözüm;

    Kod:
    	<%    
    	Set conn=server.CreateObject("ADODB.Connection") : conn.open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("test.mdb")
    	Set cmd = CreateObject("ADODB.Command") : Set cmd.ActiveConnection = conn
    
    	Public Function reqListe(byVal id)
    		dim returnString
    		returnString = ""
    		cmd.CommandText = "Select SayfaID,BabaID,Baslik From tblSayfa Where BabaID = "& id &" Order By Sira ASC, SayfaID ASC;"
    		Set RecordSet = cmd.Execute()
    		if Not RecordSet.EOF Then
    			returnString = "<ul>"& vbCrlf
    			While Not RecordSet.EOF
    				returnString = returnString & vbTab &"<li><a href=""" &  "?SayfaNo=" & RecordSet(0) & """>" & RecordSet(2) & "</a></li>" & vbCrlf 
    				returnString = returnString & reqListe(RecordSet(0))
    				RecordSet.MoveNext
    			Wend
    			returnString = returnString & "</ul>"& vbCrlf
    		End If
    		RecordSet.Close()
    		set RecordSet = Nothing
    		reqListe= returnString
    	End Function
    
    	Response.write reqListe(0) : conn.close : Set conn=Nothing
    	%>
    
    çıktısı;
    Kod:
    <ul>
        <li><a href="?SayfaNo=1">Vişne</a></li>
        <ul>
            <li><a href="?SayfaNo=2">Greyfurt</a></li>
            <ul>
                <li><a href="?SayfaNo=12">Karpuz</a></li>
                <li><a href="?SayfaNo=7">Muz</a></li>
                <li><a href="?SayfaNo=8">Ananas</a></li>
                <li><a href="?SayfaNo=6">Yoğurt</a></li>
            </ul>
            <li><a href="?SayfaNo=13">Kavun</a></li>
            <li><a href="?SayfaNo=3">Elma</a></li>
            <ul>
                <li><a href="?SayfaNo=9">Kiraz</a></li>
                <li><a href="?SayfaNo=10">Kayısı</a></li>
            </ul>
            <li><a href="?SayfaNo=4">Armut</a></li>
            <ul>
                <li><a href="?SayfaNo=11">Mandalina</a></li>
            </ul>
            <li><a href="?SayfaNo=5">Şeftali</a></li>
        </ul>
    </ul>
    
    eğer li'lerin alt ul'lerden sonra kapanmasnı istiyorsanız;
    Kod:
    				returnString = returnString & vbTab &"<li><a href=""" &  "?SayfaNo=" & RecordSet(0) & """>" & RecordSet(2) & "</a></li>" & vbCrlf 
    				returnString = returnString & reqListe(RecordSet(0))
    
    satırlarını
    Kod:
    				returnString = returnString & vbTab &"<li><a href=""" &  "?SayfaNo=" & RecordSet(0) & """>" & RecordSet(2) & "</a>" & vbCrlf 
    				returnString = returnString & reqListe(RecordSet(0)) &  vbCrlf  & "</li>" & vbCrlf
    
    haline getirebilirsiniz. o halde çıktısı;

    Kod:
    <ul>
        <li><a href="?SayfaNo=1">Vişne</a>
            <ul>
                <li><a href="?SayfaNo=2">Greyfurt</a>
                    <ul>
                        <li><a href="?SayfaNo=12">Karpuz</a> </li>
                        <li><a href="?SayfaNo=7">Muz</a> </li>
                        <li><a href="?SayfaNo=8">Ananas</a> </li>
                        <li><a href="?SayfaNo=6">Yoğurt</a> </li>
                    </ul>
                </li>
                <li><a href="?SayfaNo=13">Kavun</a> </li>
                <li><a href="?SayfaNo=3">Elma</a>
                    <ul>
                        <li><a href="?SayfaNo=9">Kiraz</a> </li>
                        <li><a href="?SayfaNo=10">Kayısı</a> </li>
                    </ul>
                </li>
                <li><a href="?SayfaNo=4">Armut</a>
                    <ul>
                        <li><a href="?SayfaNo=11">Mandalina</a> </li>
                    </ul>
                </li>
                <li><a href="?SayfaNo=5">Şeftali</a> </li>
            </ul>
        </li>
    </ul>
    

  3. #23

    Hızlandır Ma !?

    Hız kavramına kullandığın veri tabanı, platform, dil gibi birçok konu etki etmekte.

    Bu tür döngüsel fonksiyonlarda kayıt seti veri tabanın MsSQL ise SP (Structure Procedure)'a parametre göndererek çekmen veri sorgulama tarafında çok büyük bir performans kazancı sağlayacaktır.

    Bunun dışında örneğin; bir ağaç yapısı çıkartan döngüsel fonksiyon kullanıyorsan sadece ust id kriteri gibi tekil filtrelemelerde kayıt setini istemci tarafında tutarak da hızlı bir şekilde sonuç alabilirsin.

    SP kullanmanı tavsiye ederim.

    Eğer kullandığın dil, veri tabanı ve kriter sayısı gibi bilgiler verirsen bu konuda detaylı bir izah yapılabilir.

  4. #24
    kullandığım dil ASP vt ms access kriter sayısı tam olarak belli değil yani kimini yerde 4 iken kimi yerde 5 olabilir.


    Performans artışı için ajax kullanımı geldi aklıma sadece gerekli dizini veritabanından çekip diğerlerini menü üzerine gelince çekmek gibi ancak bir navigasyon menü içerisinde kullanıyorum bu yapıyı ve istediğim mantığı hazırlayamadım.Bu recursive hep sorun oldu benim için

  5. #25

    VBScript@ASP ve Access ile döngüsel fonksiyon

    ##tablomunAdi
    #kimlikNo (int, autoinc, pk), #ustKimlikNo (int), #ad (metin)

    Yukarıdaki ifade ettiğim gibi bir veri yapısına sahip olduğunu öngörerek;

    Kod:
    dim sBaglantiCumlesi
    sBaglantiCumlesi = "provider=Microsoft.jet.oledb.4.0; data source=" & server.mapPath("veriTabanim.mdb")
    
    dim rsKayitSeti
    set rsKayitSeti = server.createObject("adodb.recordset")
    rsKayitSeti.cursorLocation	= 3 'kayıtların istemcide tutulacak, ve kayıtlar arasında ileri - geri gezilebilecek
    
    dim sSQL
    sSQL = "SELECT * FROM tablomunAdi"
    rsKayitSeti.open sSQL, sBaglantiCumlesi, 1, 3
    
    Buraya kadar veri tabanımıza bağlanarak ilgili tablodaki tüm kayıtları ve kursör istemcide olacak şekilde tanımladık.

    Şimdi döngüsel fonksiyonu tanımlıyorum.
    Kod:
    public function sDonguselCozum(rsVT, iUstKimlikNo, sSablon)
     sDonguselCozum = "" 'fonksiyonumuz geriye sSablon ile aktarılan string değer döndürecek.
    
     dim vGecici
    
     dim sEskiFiltre, iEskiKayitYeri
     sEskiFiltre = rsVT.filter
     sEskiKayitYeri = rsVT.absolutePosition
    
     rsVT.filter = "ustKimlikNo=" & iUstKimlikNo
    
     sDonguselCozum = "<ul>"
     while not rsVT.eof
      'bulunan kayıda ait alanları şablonun içinde tanımlanan değerler ile değiştiriyoruz.
      'örnek şablon; sSablon = "<li><a href=""?secilenKimlikNo=[$kimlikNo]"">[$ad]</a></li>"
      vGecici = sSablon
      vGecici = replace(vGecici, "[$kimlikNo]", rsVT("kimlikNo") & "")
      vGecici = replace(vGecici, "[$ustKimlikNo]", rsVT("ustKimlikNo") & "")
      vGecici = replace(vGecici, "[$ad]", rsVT("ad") & "")
    
      'tanımlanan değeri fonksiyon taşıyıcısına ekiliyoruz
      sDonguselCozum = sDonguselCozum & vGecici
    
      'eklediğimiz dal için alt dalları araştırıyoruz. Burada döngüsel fonksiyon kullanılıyor.
      sDonguselCozum = sDonguselCozum &  sDonguselCozum(rsVT, rsVT("kimlikNo"), sSablon)
    
      rsVT.moveNext
     wEnd
     sDonguselCozum = "</ul>"
    
     'veri tabanı filtresi ve yerini eski değerlerine geri alıyoruz.
     rsVT.filter = sEskiFiltre
     if iKayitSetiYeri > -1 then
      rsVT.absolutePosition = sEskiKayitYeri 
     end if
    
    end function
    
    Şimdi veri tabanımızda kökten başlayarak tüm dalları tarayan komutu vermeye geldik.

    Kod:
     response.write sDonguselCozum(rsKayitSeti, 0, "<li><a href=""?secilenKimlikNo=[$kimlikNo]"">[$ad]</a></li>")
    
    Şimdi de veri tabanını kapatıyoruz
    Kod:
     rsKayitSeti.close
     set rsKayitSeti = nothing
    

  6. #26
    enig yardımcı olduğun için teşekkür ederim.daha önce cursorlocation yöntemini görmemiştim.Sanırım verileri önbelleğe aldığı için hızlı işlem yapmayı sağlıyor.

    Recursive kullanımına anternatif olarak başka bir forumda gördüğüm örneği paylaşmak istiyorum.Bu örnek fazla kayıtlardaki yavaşlamayı engelledi.

    Set main = ODBC.Execute("Select id,name from category where isnull(cat) = true order by name")
    If not main.eof then
    response.write "<ul>"
    While not main.eof
    response.write "<li>"&main("name")&"</li>"
    response.write ""&alt(main("id"))&""
    main.movenext
    wend
    response.write "</ul>"
    End If
    main.close

    Function alt(id)
    Set down = ODBC.Execute("Select id,cat,name from category where cat = "&id&"")
    If not down.eof then
    response.write "<ul>"
    While not down.eof
    response.write "<li>"&down("name")&"</li>"
    response.write ""&alt(down("id"))&""
    down.movenext
    wend
    response.write "</ul>"
    End If
    down.close
    End Function

  7. #27
    enig vermiş olduğun örneği uygulamaya çalıştım ancak sonuç alamadım. replace(vGecici, "[$kimlikNo]", rsVT("kimlikNo") & "") kodlarının anlamı nedir acaba?



    Alıntı enig tarafından gönderilen mesaj: Mesajı Göster
    ##tablomunAdi
    #kimlikNo (int, autoinc, pk), #ustKimlikNo (int), #ad (metin)

    Yukarıdaki ifade ettiğim gibi bir veri yapısına sahip olduğunu öngörerek;

    Kod:
    dim sBaglantiCumlesi
    sBaglantiCumlesi = "provider=Microsoft.jet.oledb.4.0; data source=" & server.mapPath("veriTabanim.mdb")
    
    dim rsKayitSeti
    set rsKayitSeti = server.createObject("adodb.recordset")
    rsKayitSeti.cursorLocation	= 3 'kayıtların istemcide tutulacak, ve kayıtlar arasında ileri - geri gezilebilecek
    
    dim sSQL
    sSQL = "SELECT * FROM tablomunAdi"
    rsKayitSeti.open sSQL, sBaglantiCumlesi, 1, 3
    
    Buraya kadar veri tabanımıza bağlanarak ilgili tablodaki tüm kayıtları ve kursör istemcide olacak şekilde tanımladık.

    Şimdi döngüsel fonksiyonu tanımlıyorum.
    Kod:
    public function sDonguselCozum(rsVT, iUstKimlikNo, sSablon)
     sDonguselCozum = "" 'fonksiyonumuz geriye sSablon ile aktarılan string değer döndürecek.
    
     dim vGecici
    
     dim sEskiFiltre, iEskiKayitYeri
     sEskiFiltre = rsVT.filter
     sEskiKayitYeri = rsVT.absolutePosition
    
     rsVT.filter = "ustKimlikNo=" & iUstKimlikNo
    
     sDonguselCozum = "<ul>"
     while not rsVT.eof
      'bulunan kayıda ait alanları şablonun içinde tanımlanan değerler ile değiştiriyoruz.
      'örnek şablon; sSablon = "<li><a href=""?secilenKimlikNo=[$kimlikNo]"">[$ad]</a></li>"
      vGecici = sSablon
      vGecici = replace(vGecici, "[$kimlikNo]", rsVT("kimlikNo") & "")
      vGecici = replace(vGecici, "[$ustKimlikNo]", rsVT("ustKimlikNo") & "")
      vGecici = replace(vGecici, "[$ad]", rsVT("ad") & "")
    
      'tanımlanan değeri fonksiyon taşıyıcısına ekiliyoruz
      sDonguselCozum = sDonguselCozum & vGecici
    
      'eklediğimiz dal için alt dalları araştırıyoruz. Burada döngüsel fonksiyon kullanılıyor.
      sDonguselCozum = sDonguselCozum &  sDonguselCozum(rsVT, rsVT("kimlikNo"), sSablon)
    
      rsVT.moveNext
     wEnd
     sDonguselCozum = "</ul>"
    
     'veri tabanı filtresi ve yerini eski değerlerine geri alıyoruz.
     rsVT.filter = sEskiFiltre
     if iKayitSetiYeri > -1 then
      rsVT.absolutePosition = sEskiKayitYeri 
     end if
    
    end function
    
    Şimdi veri tabanımızda kökten başlayarak tüm dalları tarayan komutu vermeye geldik.

    Kod:
     response.write sDonguselCozum(rsKayitSeti, 0, "<li><a href=""?secilenKimlikNo=[$kimlikNo]"">[$ad]</a></li>")
    
    Şimdi de veri tabanını kapatıyoruz
    Kod:
     rsKayitSeti.close
     set rsKayitSeti = nothing
    

  8. #28

    Şablon...

    Kodu test etmedim, yazım hataları olabilir. Bunun yanında da access veri tabanı hazırlayıp bağlantısı yapman gerekli... Konunun seviyesi nedeniyle bu kısımları açıklamadan geçtim...

    Uygun bir zamanda dosya olarak eklemeye çalışırım.

    Bahsettiğin satırda küçük bir şablon örneği vererek farkındalık içinde olan arkadaşlar için.

    public function sDonguselCozum(rsVT, iUstKimlikNo, sSablon)

    ile alınan "sSablon" değeri "[$ ... ]" kalıbı içindeki değerleri veri tabanı içindeki değer ile dolduruyor.

  9. #29
    Alıntı enig tarafından gönderilen mesaj: Mesajı Göster
    Kodu test etmedim, yazım hataları olabilir. Bunun yanında da access veri tabanı hazırlayıp bağlantısı yapman gerekli... Konunun seviyesi nedeniyle bu kısımları açıklamadan geçtim...

    Uygun bir zamanda dosya olarak eklemeye çalışırım.

    Bahsettiğin satırda küçük bir şablon örneği vererek farkındalık içinde olan arkadaşlar için.

    public function sDonguselCozum(rsVT, iUstKimlikNo, sSablon)

    ile alınan "sSablon" değeri "[$ ... ]" kalıbı içindeki değerleri veri tabanı içindeki değer ile dolduruyor.


    db bağlantısı mevcut sorun onunla alakalı değil.Ancak cursorlocation yöntemini bilmediğimden mantık yürütemiyorum.İlgili örneği paylaşabilirsen herkes için yararlı olacağını düşünüyorum.

+ Yanıtla
Sayfa Düzeni: 3 / 3
İlkİlk 1 2 3

Bu konu başlığı için etiketler

Mesaj Seçenekleri

  • Yeni başlık açamazsınız
  • Cevap yazabilirsiniz
  • Dosya ekleyemezsiniz
  • Mesajlarınızı değiştiremezsiniz