Randomize

Iniciado por Frikimaster, 4 Abril 2008, 17:23 PM

0 Miembros y 1 Visitante están viendo este tema.

Frikimaster

Saludos gentes :3, a ver si me podeis echar un cable:


  • BBDD en ACCESS que contiene X preguntas (unas 150 creo)
  • Un VB 6.0

  • Codigo Propio

  • Quiero hacer un RAndomize

La cosa es que estoy haciendo un Trivial, la BBDD contiene varias preguntas con 3 opciones cada una, quiero recojer los valores pero en plan random para que cada vez que cambies de pregunta elija una diferente entre la base de datos.


Me podriais echar una mano? Mi codigo es este, criticadlo, analizadlo y quemadlo si quereis xD




Private Function GetNovaPregunta(Optional Actual As Integer = -1) As Integer
   
    Dim SQL As String
    Dim BaseDeDades As DAO.Database ' DAO = Data Acces Objects -- ADO = ActiveX Data Objects
    Dim rstPreguntes As DAO.Recordset ' conjunt de registres, representacio de la taula
    Dim i As Integer
   
     ' Obrim BD
    Set BaseDeDades = Workspaces(0).OpenDatabase(BD)
   
    SQL = "SELECT MAX(id_P) as MAX, MIN(id_p) as MIN FROM PREGUNTAS;"
    Set rstPreguntes = BaseDeDades.OpenRecordset(SQL)
    If Not rstPreguntes.EOF Then
        IndexMax = rstPreguntes.Fields("MAX")
        IndexMin = rstPreguntes.Fields("MIN")
    End If
    rstPreguntes.Close: Set rstPreguntes = Nothing
    BaseDeDades.Close: Set BaseDeDades = Nothing
Ale:
    ' Num aleatori
    Randomize
   
    i = Rnd * 100
    If i > IndexMax Then
        GoTo Ale
    ElseIf i < IndexMin Then
        GoTo Ale
    ElseIf Actual > 0 And i = Actual Then
        GoTo Ale
    Else
        GetNovaPregunta = i
    End If
   
   
End Function

Frikimaster
La musica de la logica nunca fallara al sonar la melodia de la verdad.

cassiani

#1
Cita de: Frikimaster en  4 Abril 2008, 17:23 PM
La cosa es que estoy haciendo un Trivial, la BBDD contiene varias preguntas con 3 opciones cada una, quiero recojer los valores pero en plan random para que cada vez que cambies de pregunta elija una diferente entre la base de datos.

Código (vb) [Seleccionar]
Ale:
    Randomize
    i = Int(Rnd * indexmax) + 1
    If i = actual Then GoTo Ale


¡S4lu2!

Frikimaster

Entonces la cosa quedaria asi verdad?

Ale:
    Randomize
    i = Int(Rnd * IndexMax) + 1
    If i = Actual Then GoTo Ale
   
    ElseIf i < IndexMin Then
        GoTo Ale
    ElseIf Actual > 0 And i = Actual Then
        GoTo Ale
    Else
        GetNovaPregunta = i
    End If
       
End Function

Frikimaster
La musica de la logica nunca fallara al sonar la melodia de la verdad.

proteo1

Cita de: Frikimaster en  8 Abril 2008, 15:49 PM
Entonces la cosa quedaria asi verdad?

Ale:
    Randomize
    i = Int(Rnd * IndexMax) + 1
    If i = Actual Then GoTo Ale
   
    ElseIf i < IndexMin Then
        GoTo Ale
    ElseIf Actual > 0 And i = Actual Then
        GoTo Ale
    Else
        GetNovaPregunta = i
    End If
       
End Function

Frikimaster

A mi forma seria asi: quizas muy sencilla :D

CitarDim Tempo as Integer
For Tempo = 0 to IndexMax
List1.Additem =Cstr(Tempo)
Next Tempo

List2.Clear
Do While List1.Listcount>0
Tempo=Int(Rnd * List1.Listcount) + 1
List2.Additem Cstr(Tempo)
List1.RemoveItem Tempo
Loop

espero me haya salido bien a la primera la desventaja que le veo son las listbox porque como lo han presentado no ocupan ello mas que puras variables