Avatar billede dingemann Novice
06. maj 2005 - 18:28 Der er 18 kommentarer og
1 løsning

[ASP.NET, VB] og random udtræk fra database

har følgende fil quoteHandler.vb :

Imports System.Data.SqlClient

Public Class quoteHandler
    Dim p As String
    Dim i As Integer
    Dim antalPoster As Integer
    Function Quote(ByVal fnctCmd As Integer) As String
        Randomize()
        i = 5
        Dim conn As SqlConnection = New SqlConnection
        conn.ConnectionString = "Server=Anaia;Database=weblogQuotes;Uid=sa;Pwd="
        conn.Open()
        Dim cmd As New SqlCommand("select * from quoteTable", conn)
        Dim myReader As SqlDataReader = cmd.ExecuteReader()
        Try
            While myReader.Read() = True
                p = p & myReader.Item("Quote")
                antalPoster = myReader.Item("QuoteID")
                Quote = p & " --------------" & antalPoster
            End While
        Finally
            myReader.Close()
        End Try
        conn.Close()
    End Function
End Class






som henter tekst fra en database. Al teksten bliver returneret til funktionen selv men jeg vil egentlig gerne ha det delt sådan op så alle quotesne kommer i et array så jeg kan vælge en random... jeg har prøvet mig frem men jeg er åbentbart ikke så god som jeg troede jeg var (har ikke arbejdet så meget i Arrays)
Nogen der gider stoppe noget array ind og et random udtræk der så returneres til functionen selv...




// peter
Avatar billede arne_v Ekspert
06. maj 2005 - 18:35 #1
Det er en meget dyr måde at lave random quotes på.

Hav et felt qnum i tabellen med en fortløbende nummerering, find det totale
antal, træk et tilfældigt tal x op til det tal, lav en SELECT ... WHERE qnum=x.
Avatar billede dingemann Novice
06. maj 2005 - 18:39 #2
jeg har været den første del af det du snakker om igennem - med WHERE men jeg mangler en dims der fortæller antal poster i databasen for at lave random. Jeg har egentlig aldrig beskæftiget mig så meget med SQL - er først begyndt nu hvor jeg er hoppet over i ASP.NET fra VB.NET

Men hvis du har en mindre kode vil jeg da smile og være glad :)
Avatar billede arne_v Ekspert
06. maj 2005 - 18:42 #3
SELECT COUNT(*) AS antal FROM tabelnavn

eller

SELECT MIN(qnum) AS minqnum,MAX(qnum) AS maxqnum FROM tabelnavn

må give dig hvad du skal bruge til det
Avatar billede dingemann Novice
06. maj 2005 - 18:45 #4
hvad betyder den sidste sætning (SELECT MIN(qnum) AS minqnum,MAX(qnum) AS maxqnum FROM tabelnavn)?
Avatar billede arne_v Ekspert
06. maj 2005 - 18:55 #5
den finder den mindste og største værdi af qnum feltet
Avatar billede dingemann Novice
06. maj 2005 - 19:23 #6
og qnum er en variable du lige har opfundet?
Avatar billede arne_v Ekspert
06. maj 2005 - 19:30 #7
ja - det er det fortløbne nummer jeg snakker om
Avatar billede dingemann Novice
06. maj 2005 - 19:36 #8
så helt præcist kommer de forskellige variabler til at indeholde:

qnum = ?
maxqnum = max
minqnum = min
Avatar billede dingemann Novice
06. maj 2005 - 19:42 #9
(som du nok har regnet ud er jeg temmelig slap i SQL og fatter ikke lige så meget af det :P)
Avatar billede arne_v Ekspert
06. maj 2005 - 19:51 #10
qnum  quote
1    tale er sølv men tavshed er guld
2    hellere en fugl i hånden end 10 på tager

SELECT COUNT(*) AS antal FROM tabelnavn

returnerer:

antal
2

SELECT MIN(qnum) AS minqnum,MAX(qnum) AS maxqnum FROM tabelnavn

returnerer:

minqnum maxqnum
1        2
Avatar billede dingemann Novice
06. maj 2005 - 19:53 #11
javel :D den er feset ind og taksa for det... smider du et svar?
Avatar billede arne_v Ekspert
06. maj 2005 - 20:00 #12
kommer her
Avatar billede dingemann Novice
06. maj 2005 - 20:01 #13
tralalaaa...



Du har ikke en chance
Grib den

>> strunge
Avatar billede arne_v Ekspert
06. maj 2005 - 20:15 #14
????
Avatar billede dingemann Novice
06. maj 2005 - 20:16 #15
bare et strunge-citat
skulle skrive et eller andet :)
Avatar billede dingemann Novice
06. maj 2005 - 23:57 #16
okay det er ikke for at virke besværlig men nu mangler jeg muligheden for at bruge * i SQL-sætningen
Er det muligt at merge i en Dim:

        Dim cmd As New SqlCommand("SELECT MIN(QuoteID) AS minQID, MAX(QuoteID) AS maxQID FROM quoteTable", conn)

og

        Dim cmd As New SqlCommand("SELECT * FROM quoteTable", conn)


så jeg slipper for at åbne to forbindelser?
Avatar billede arne_v Ekspert
07. maj 2005 - 00:19 #17
jeg ville udføre 2 commands på 1 connection
Avatar billede dingemann Novice
07. maj 2005 - 00:20 #18
altså lave to seperate dim-kommandoer? (det er jo ikke vitterligt sundt hvis man kan lave det hele i en)
Avatar billede arne_v Ekspert
07. maj 2005 - 17:52 #19
den ene query behøves jo kun at blive udført en gang

den anden skal så udføres hver gang du skal bruge en tilfældig quote

og den anden er ikke

SELECT * FROM quoteTable

men

SELECT * FROM quoteTable WHERE qnum = X
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester