• Martes 12 de Noviembre de 2024, 21:04

Autor Tema:  Instryccion While....  (Leído 2068 veces)

Vortice

  • Miembro MUY activo
  • ***
  • Mensajes: 135
    • Ver Perfil
Instryccion While....
« en: Viernes 7 de Septiembre de 2007, 17:56 »
0
Camaradas del Foro, saludos desde aca de Chile.....

Tengo una sentencia While que recorre toda una tabla hasta encontrar dos campos y despues asigna true a un valor, PERO, despues de entrar al IF q esta dentro del While sigue recorriendo la tabla y lo que yo quiero es que una vez que entre al IF y entrege el valor a esa variable se salga del While, es eso posible con alguna instruccion, trate asignandole false a la variabla condicion del While pero no me deja, Favor ayudarme, de antemano gracias, adjunto codigo. la parte en Negrita es donde ocurre lo anterior explicado.....

Public Sub ingreso()
        If chkDesarrollo.Checked Then
            strServidor = "SERVIDOR"
        Else
            strServidor = "SOPORTE"
        End If
        conectar_bd()
        Command = New SqlCommand("select * from Usuarios", Connection)
        Command.ExecuteNonQuery()
        leer = Command.ExecuteReader
        While leer.Read = True
            If usu.Text = leer.Item("nombre_usuario") AndAlso password.Text = leer.Item("password") Then
                segu = True
            End If
        End While
       
        leer.Close()
        If segu = False Then
            MsgBox("el usuario no existe")
            usu.Text = ""
            password.Text = ""
            usu.Focus()
        Else
            Dim FormSolicitud As New Solicitud
            FormSolicitud.Show()
        End If
        Connection.Close()
    End Sub
Solo el Bueno muere joven...

spiderman160281

  • Miembro activo
  • **
  • Mensajes: 96
    • Ver Perfil
Re: Instryccion While....
« Respuesta #1 en: Viernes 7 de Septiembre de 2007, 19:38 »
0
sería bueno que intentaras con un break  :D  o si no en su defecto con un goto para que salga del while...

Vortice

  • Miembro MUY activo
  • ***
  • Mensajes: 135
    • Ver Perfil
Re: Instryccion While....
« Respuesta #2 en: Viernes 7 de Septiembre de 2007, 19:49 »
0
spider gracias pero como lo uso ¿?  :blink:
Solo el Bueno muere joven...

spiderman160281

  • Miembro activo
  • **
  • Mensajes: 96
    • Ver Perfil
Re: Instryccion While....
« Respuesta #3 en: Viernes 7 de Septiembre de 2007, 20:02 »
0
bueno prueba con el goto, funciona de la siguiente manera, bueno es según mis conocimientos jeje lo que se hace es crear una etiqueta dentro de tu código por eje tu etiqueta se puede llamar spider entonces de donde quieres que se salga o sea del if vas a poner goto spider así nada mas y hasta afuera del while vas a poner spider: asi nada más...

tu código quedaría así:
p.d esto permitira que a la hora que entre al if se salga del while que es lo que yo entendi que quiere mi estimado... B)  pruebalo y me comentas

Public Sub ingreso()
If chkDesarrollo.Checked Then
strServidor = "SERVIDOR"
Else
strServidor = "SOPORTE"
End If
conectar_bd()
Command = New SqlCommand("select * from Usuarios", Connection)
Command.ExecuteNonQuery()
leer = Command.ExecuteReader
While leer.Read = True
If usu.Text = leer.Item("nombre_usuario") AndAlso password.Text = leer.Item("password") Then
segu = True
GOTO SPIDER
End If
End While

SPIDER:
leer.Close()
If segu = False Then
MsgBox("el usuario no existe")
usu.Text = ""
password.Text = ""
usu.Focus()
Else
Dim FormSolicitud As New Solicitud
FormSolicitud.Show()
End If
Connection.Close()
End Sub

Vortice

  • Miembro MUY activo
  • ***
  • Mensajes: 135
    • Ver Perfil
Re: Instryccion While....
« Respuesta #4 en: Viernes 7 de Septiembre de 2007, 21:22 »
0
Spìder:

Gracias compadre resulto a la perfeccion, entro al if y salto desde ahi a la etiqueta, gracias Camarada.....
Solo el Bueno muere joven...

spiderman160281

  • Miembro activo
  • **
  • Mensajes: 96
    • Ver Perfil
Re: Instryccion While....
« Respuesta #5 en: Viernes 7 de Septiembre de 2007, 21:26 »
0
que bueno camarada me da gusto, cualquier cosa por aquí andamos  :D

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Instryccion While....
« Respuesta #6 en: Sábado 8 de Septiembre de 2007, 07:58 »
0
Aunque hayas solucionado el problema no es nada 'elegante'...

el goto rompe la secuencia de escape del flujo de un bucle, es decir si proviene de otros flujops romperá dicha secuencia y no podrá retornar por donde vino...

Cuando se desea salir del mismo aún no cumpliéndose la condición, usar un 'exit while' (justo en el sitio desde donde quieres salir)  ..esto no rompe secuencias de retorno de la pila y por tanto no entra en conflicto con otras partes del programa.... el goto es muy bueno pero para saltos dentro de un mismo bucle, ya que de ese modo no rompe secuencias de la pila de retorno, solo desplaza el puntero del programa.

saludos..
«Ma non troppo»
----> ModoVacaciones = False<----

spiderman160281

  • Miembro activo
  • **
  • Mensajes: 96
    • Ver Perfil
Re: Instryccion While....
« Respuesta #7 en: Sábado 8 de Septiembre de 2007, 18:50 »
0
Acabo de leer algo sobre el exit while y tiene razón camarada gracias por la observación navire y disculpa vortice pero bueno no conocía ese exit while.. :(

Scherzo

  • Miembro activo
  • **
  • Mensajes: 64
    • Ver Perfil
    • http://www.mma-spain.com
Re: Instryccion While....
« Respuesta #8 en: Lunes 10 de Septiembre de 2007, 15:44 »
0
Hola, otra forma de plantear esto que quieres hacer podría ser así:

Código: Text
  1.  
  2. strSQL = strSQL.Append(&#34;SELECT &#34;)
  3. strSQL = strSQL.Append(&#34;(CASE WHEN COUNT(*) &#62; 0 THEN '&#34; & bool.TrueString & &#34;' ELSE '&#34; & bool.FalseString & &#34;' END) AS EXISTE &#34;)
  4. strSQL = strSQL.Append(&#34;FROM USUARIOS &#34;)
  5. strSQL = strSQL.Append(&#34;WHERE&#34;)
  6. strSQL = strSQL.Append(&#34;     nombre_usuario = '&#34; & usu.Text & &#34;'&#34;)
  7. strSQL = strSQL.Append(&#34; AND password = '&#34; & password.Text & &#34;'&#34;)
  8.  
  9.  
  10. Boolean.TryParse(Command.ExecuteScalar().ToString(), ByRef blnExiste)
  11.  
  12. if (blnExiste) Then
  13.     'El usuario existe
  14. Else
  15.     'El usuario no existe
  16. End If
  17.  
  18.  

Con esto, te ahorras tener que hacer un bucle While que recorra todos los usuarios en busca de aquel que coincida con los datos del Login, ya que la propia consulta SQL te devolverá directamente un "True" si el usuario existe o un "False" si no existe.´

Este planteamiento es más rápido que un bucle While, sobre todo si tienes muchos usuarios, y en mi opinión más legible y directo que el otro (el peso de la búsqueda se lo dejas al motor SQL, que es mucho más rápido que si lo haces desde código VB).

Saludos

PD1: el código lo he escrito sin compilarlo y tienes que adaptarlo ligeramente a tu código, por lo que a lo mejor he metido algún error de sintaxis o falla alguna cosa, en cualquier caso, espero que se entienda la idea de lo que quiero expresar.

PD2: para que no se te pase por alto, date cuenta que uso ExecuteScalar() en lugar de ExecuteNonQuery().