Título: Randomize Publicado por: Frikimaster en 4 Abril 2008, 17:23 pm Saludos gentes :3, a ver si me podeis echar un cable:
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 Título: Re: Randomize Publicado por: cassiani en 4 Abril 2008, 18:09 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
ˇS4lu2! Título: Re: Randomize Publicado por: 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 Título: Re: Randomize Publicado por: proteo1 en 8 Abril 2008, 20:32 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 Citar Dim 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 |