Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Hämta random post ifrån access-databas. (får fram de översta posterna mer sällan

Postades av 2005-04-19 18:25:11 - Johan Svensson, i forum asp.net generellt, Tråden har 8 Kommentarer och lästs av 1434 personer

Försöker skriva en kod som hämtar en slumpvis vald post i en access-databas. När jag nu har testat min kod ett tag verkar det som om de två översta posterna visas extremt mycket färre gånger än de övriga. Vad är det för fel? Hur kan man lösa detta?

Har skrivit min kod efter att ha kollat in http://lists.evolt.org/archive/Week-of-Mon-20040315/156878.html och http://www.aspfaq.com/show.asp?id=2132, båda sidorna handlar om randomize-funktioner för vanlig ASP.

Min kod:

<%@ Page Language="VB" Debug="true" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">
    Sub Page_Load()

    Dim i as integer
    i = CInt(CInt(1000 * Rnd)+1)*-1

        Dim objConn As OleDbConnection
        Dim objCmd As OleDbCommand
        Dim objRdr As OleDbDataReader
        objConn = New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=E:\webbsidor\textad\db\textad.mdb")
        objCmd = New OleDbCommand("SELECT TOP 1 AdID, Headline, Rnd(" & (i) &"*AdID) " & _
 "FROM Ad " & _
    "ORDER BY 3", objConn)
        objConn.Open()
        objRdr = objCmd.ExecuteReader()
        While objRdr.Read()
            Response.Write(objRdr.Item("Headline") & "<br/>")
        End While
        objRdr.Close()
        objConn.Close()
    End Sub
</script>


Svara

Sv: Hämta random post ifrån access-databas. (får fram de översta posterna mer sä

Postades av 2005-04-19 20:10:57 - Johan Djupmarker

Du kör rnd flera gånger, borde inte påverka, men testa om detta blir bättre:

<%@ Page Language="VB" Debug="true" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">
    Sub Page_Load()

        Dim objConn As OleDbConnection
        Dim objCmd As OleDbCommand
        Dim objRdr As OleDbDataReader
        objConn = New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=E:\webbsidor\textad\db\textad.mdb")
        objCmd = New OleDbCommand("SELECT TOP 1 AdID, Headline FROM Ad ORDER BY RND()", objConn)
        objConn.Open()
        objRdr = objCmd.ExecuteReader()
        While objRdr.Read()
            Response.Write(objRdr.Item("Headline") & "<br/>")
        End While
        objRdr.Close()
        objConn.Close()
    End Sub
</script>


/Johan


Svara

Sv:Hämta random post ifrån access-databas. (får fram de översta posterna mer sä

Postades av 2005-04-19 20:34:47 - Johan Svensson

Det där fungerade tyvär inte alls. Ingen slumpvisning alls, alla posterna visades på sidan likadant hela tiden.


Svara

Sv: Hämta random post ifrån access-databas. (får fram de översta posterna mer sä

Postades av 2005-04-19 20:37:15 - Göran Andersson

Du kanske skulle läsa den här:
http://guffa.com.loopiadns.com/Programming_article.asp?id=37


Svara

Sv:Hämta random post ifrån access-databas. (får fram de översta posterna mer sä

Postades av 2005-04-19 21:19:41 - Johan Svensson

Tack. Tror just det fungerar nu. Eller vad sägs guffa? Men nu har jag kommit till ett nytt problem Jag skulle vilja att värdet i fältet AdsDisplayed i databasen skall öka med +1 varje gång just den posten vistats. Har försökt men får det inte att fungera. Får inga felmeddelanden men värdet i AdsDisplayed ökar inte.

<%@ Page Language="VB" Debug="true" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">

    Sub Page_Load(s As Object, e As EventArgs)



             Dim objConn As OleDbConnection
             Dim objCmd As OleDbCommand
             Dim objRdr As OleDbDataReader


    Dim i As Integer
    i = (CInt(1000 * Rnd)+1) * -1

             objConn = New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=E:\webbsidor\textad\db\textad.mdb")
             objCmd = New OleDbCommand("select top 1 AdID, AdsDisplayed, Headline " & _
             "from Ad order by Rnd(-AdID-" & Replace(Rnd(),",",".") & ")", objConn)




             objConn.Open()
             objRdr = objCmd.ExecuteReader()


Dim ChosenAd As String
Dim Displayed As Integer
             While objRdr.Read()

                 Response.Write(objRdr.Item("Headline") & "<br/>")
                 ChosenAd = objRdr.Item("AdID")
                 Displayed = objRdr.Item("AdsDisplayed")

             End While


             objRdr.Close()
             objConn.Close()


    Dim UpdateDisplayed As Integer = (Displayed + 1)

    objConn = New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=E:\webbsidor\textad\db\textad.mdb")
    objCmd = New OleDbCommand("UPDATE Ad SET AdsDisplayed = " & UpdateDisplayed & " WHERE AdID = " & Displayed & ";", objConn)

             objConn.Open()
             objCmd.ExecuteNonQuery()
             objConn.Close()


         End Sub

</script>


Svara

Sv: Hämta random post ifrån access-databas. (får fram de översta posterna mer sä

Postades av 2005-04-19 21:24:27 - Johan Svensson

hittade felet på problemet jag skrev om
Hade skrivit:

objCmd = New OleDbCommand("UPDATE Ad SET AdsDisplayed = " & UpdateDisplayed & " WHERE AdID = " & Displayed & ";", objConn)

men det skulle ju vara:
objCmd = New OleDbCommand("UPDATE Ad SET AdsDisplayed = " & UpdateDisplayed & " WHERE AdID = " & ChosenAd & ";", objConn)


Men jag har fortfarande en fråga:
Göran, på din sida så har du skrivit att man skall använda följande kod:
<code>
Randomize
strSQL = "select top 5 Id, Info from Tabellen order by Rnd(-Id-" & Replace(Rnd(),",",".") & ")"
</code>
men jag använde ju bara:
<code>
strSQL = "select top 5 Id, Info from Tabellen order by Rnd(-Id-" & Replace(Rnd(),",",".") & ")"
</code>
och har alltså inte med:
<code>
Randomize
</code>
Detta eftersom jag inte vet hur man skriver detta i ASP.NET. Vet du hur man gör det?


Svara

Sv:Hämta random post ifrån access-databas. (får fram de översta posterna mer sä

Postades av 2005-04-19 22:03:12 - Göran Andersson

Går det inte att använda Randomize i VB.NET?

Annars kan du med fördel använda klassen Random från .NET Framework:

Dim rand as Random = New Random()

objCmd = New OleDbCommand("select top 1 AdID, AdsDisplayed, Headline " & _
             "from Ad order by Rnd(-AdID-" & rand.NextDouble().ToString().Replace(",",".") & ")", objConn)


Jag ser att du öppnar en ny databaskoppling bara för att göra update. Använd samma databaskoppling .


Svara

Sv: Hämta random post ifrån access-databas. (får fram de översta posterna mer sä

Postades av 2005-04-19 22:15:01 - Johan Djupmarker

Sorry, såhär skulle jag ju skrivit... Men det verkar du redan ha listat ut...


<%@ Page Language="VB" Debug="true" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">
    Sub Page_Load()

        Dim objConn As OleDbConnection
        Dim objCmd As OleDbCommand
        Dim objRdr As OleDbDataReader
        objConn = New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=E:\webbsidor\textad\db\textad.mdb")
        objCmd = New OleDbCommand("SELECT TOP 1 AdID, Headline FROM Ad ORDER BY RND(AdID)", objConn)
        objConn.Open()
        objRdr = objCmd.ExecuteReader()
        While objRdr.Read()
            Response.Write(objRdr.Item("Headline") & "<br/>")
        End While
        objRdr.Close()
        objConn.Close()
    End Sub
</script>




För att uppdatera borde detta fungera, du har tagit fel variabel i WHERE-satsen:


<%@ Page Language="VB" Debug="true" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">
    Sub Page_Load()

        Dim objConn As OleDbConnection
        Dim objCmd As OleDbCommand
        Dim objRdr As OleDbDataReader
        objConn = New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=E:\webbsidor\textad\db\textad.mdb")
        objCmd = New OleDbCommand("SELECT TOP 1 AdID, Headline FROM Ad ORDER BY RND(AdID)", objConn)
        objConn.Open()
        objRdr = objCmd.ExecuteReader()
        While objRdr.Read()
            Response.Write(objRdr.Item("Headline") & "<br/>")
            objCmd = New OleDbCommand("UPDATE Ad SET AdsDisplayed = AdsDisplayed + 1 WHERE AdID = " & objRdr.Item("AdID"), objConn)
             objCmd.ExecuteNonQuery()
        End While
        objRdr.Close()
        objConn.Close()
    End Sub
</script>



Svara

Sv: Hämta random post ifrån access-databas. (får fram de översta posterna mer sä

Postades av 2005-04-20 17:27:44 - Johan Svensson

Har valt Görans kod, tack.

Verkar dock inte som det är riktigt slump vilken som visas. Testade nämligen att köra sidan 100 gånger för att därefter skriva ner värderna i AdsDisplayed för att där på göra om samma prosedur några gånger. Det visade sig då att det var större sanolikhet att en viss post dök upp än en annan.

Så här blev resultatet i AdsDisplayed de 4 gånger jag testade:

AdID 1: 18, 19, 16, 11
AdID 2: 10, 3, 5, 4
AdID 4: 6, 15, 14, 15
AdID 5: 25, 31, 28, 35
AdID 6: 12, 13, 8, 13
AdID 7: 25, 14, 21, 17
AdID 8: 4, 5, 8, 5

(Att AdID 3 inte finns är för att jag råkat ta bort den posten)

...som ni ser så är det något som är knas.


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 602
27 953
271 705
6 012
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies