Foros del Web » Programación para mayores de 30 ;) » .NET »

[SOLUCIONADO] evitar que salga un registro que no quiero

Estas en el tema de evitar que salga un registro que no quiero en el foro de .NET en Foros del Web. Buenas de nuevo compañeros. La idea que tengo es la de buscar en una tabla y evitar que salgan una pregunta que anteriormente esta marcada ...
  #1 (permalink)  
Antiguo 21/10/2013, 03:32
 
Fecha de Ingreso: marzo-2008
Mensajes: 81
Antigüedad: 16 años, 1 mes
Puntos: 0
evitar que salga un registro que no quiero

Buenas de nuevo compañeros.

La idea que tengo es la de buscar en una tabla y evitar que salgan una pregunta que anteriormente esta marcada como preguntada.

para ello primero saco un numero al azar dentro del rango del numero de preguntas que tengo en la base de datos y luego miro si en su campo de si esta preguntada,lo está.
el codigo que utilizo es este,pero no me da lo que quiero.

Código vb:
Ver original
  1. b = CStr(cmd.ExecuteScalar()) - 1
  2.        
  3.         Do
  4.             a = 1 + (Rnd() * b)
  5.         Loop While a >= b
  6.  
  7.  
  8.         For Each datos As DataRow In imagentabla.Rows
  9.  
  10.             If (datos("id").ToString) = a And datos("preguntada").ToString = False Then
  11.                 Button9.Text = datos("tema").ToString
  12.             End If
  13.  
  14.         Next

con este codigo si el numero al azar es una pregunta que ya a sido preguntada,no me sale nada.

nose si me e explicado bien,pero sino decirmelo e intentare explicarme mejor.

gracias por vuestra ayuda.
  #2 (permalink)  
Antiguo 21/10/2013, 03:55
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: evitar que salga un registro que no quiero

Es un problema de la lógica del código. Primero te has de plantear en pseudocódigo como solucionarlo y luego pasarlo a c#.

Para que te hagas una idea, este sería el pseudocódigo de tu código:
Código PSEUDOCODE:
Ver original
  1. b = nº preguntas
  2.  
  3. a = nº aleatorio entre 1 y menor que b    
  4.  
  5. POR CADA REGISTRO
  6.             SI [(registro id) = a ]  Y  [(registro preguntada) = falso] ENTONCES
  7.                              mostrar (registro tema)
  8.             FIN_SI
  9. FIN_POR

El problema es que solo generas un "id" y luego te limitas a comprobar si esta preguntada o no. Lo que tendrías que tener es un bucle que mientras no te haya encontrado un id con el registro con preguntada=falso, te genere un nuevo id y vuelva a comprovar.

Es decir, lo mismo que tienes, repetirlo hasta que muestras un tema (un WHILE externo).
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 21/10/2013, 05:17
 
Fecha de Ingreso: marzo-2008
Mensajes: 81
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: evitar que salga un registro que no quiero

gracias Malenko

lo e intentado de esta forma:
Código vb:
Ver original
  1. Do
  2.             Do
  3.                 a = 1 + (Rnd() * b)
  4.             Loop While a >= b
  5.             For Each datos As DataRow In imagentabla.Rows
  6.  
  7.                 If (datos("id").ToString) = a And datos("preguntada").ToString = False Then
  8.                     Button9.Text = datos("tema").ToString
  9.                 End If
  10.  
  11.             Next
  12.  
  13.         Loop While (datos("id").ToString) = a And datos("preguntada").ToString = False


pero me saca un error diciendome que:utilice la clave "new" para crear una instancia de objeto.

se lo que me quieres decir y es la idea que quiero pero no se como adecuar el do ni el while para que no me sake ese error a la hora de ir comparando.

gracias d nuevo
  #4 (permalink)  
Antiguo 21/10/2013, 05:55
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: evitar que salga un registro que no quiero

Dentro del ultimo "Loop While" estas usando la variable "datos" que solo existe dentro del "For each", por eso te dice que falta crearla.

Una solución podría ser guardar el resultado de si esta preguntada, en una variable booleana. La comprobación la haces como hasta ahora en el for each, y en el loop while más externo solo has de consultar la variable booleana.
__________________
Aviso: No se resuelven dudas por MP!
  #5 (permalink)  
Antiguo 21/10/2013, 08:07
 
Fecha de Ingreso: marzo-2008
Mensajes: 81
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: evitar que salga un registro que no quiero

gracias malenko por la idea

lo e solucionado de esta forma,por si a alguien le sirve
Código vb:
Ver original
  1. While p = 0
  2.             Do
  3.                 a = 1 + (Rnd() * b)
  4.             Loop While a >= b
  5.             For Each datos As DataRow In imagentabla.Rows
  6.  
  7.                 If (datos("id").ToString) = a And datos("preguntada").ToString = False Then
  8.                     Button9.Text = datos("tema").ToString
  9.                     p = 1
  10.                 End If
  11.  
  12.             Next
  13.  
  14.         End While

Etiquetas: quiero, registro
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:14.