Visual Basic - Por qué se sale ???

Life is soft - evento anual de software empresarial
   
Vista:

Por qué se sale ???

Publicado por Norberto norbe82@gmail.com (1 intervención) el 17/07/2014 02:23:40
Hola a todos ,soy nuevo en el foro. Me llamo Norberto y me gustaria saber si me podrian ayudar con mi problema.
Es que no se por qué , se sale del Sub cuando llega a esta linea y sale el formulario totalmente funcional, o sea que no es que me salte ningún error o se cuelgue el VB, Hace un if y despues se sale del código.


Private Sub ComprobarUsuarioPass(Nombre As String, Pass As String)
Dim LectorLineas As String
Dim Linea() As String
ComprobarUsuario = False
If Dir$(App.Path & "\BaseDatos\Empleados.txt", vbArchive) <> "" Then
Open App.Path & "\BaseDatos\Empleados.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, LectorLineas
Linea = Split(LectorLineas, "-")
If Linea(0) = Nombre & Linea(1) = Pass Then 'Aqui es donde se sale del código
UltUsuNombre = Linea(0)
UltUsuPass = Linea(1)
UltUsuPuesto = Linea(2)
UltUsuRutaImagen = Linea(3)
ComprobarUsuario = True

End If

Loop 'El loop unca se repite
End If
Close #1 'Esto nunca se ejecuta
Label2.Caption= Linea(0) 'Esto tampoco



End Sub



Marcando todas las lineas para para seguir el funcionamiento de la rutina linea a linea , una vez llega al IF se sale y el programa continua.

UltUsuPass, UltUsuPuesto , UltUsuRutaImagen ,ComprobarUsuario son variables públicas.
La ruta del archivo están correctamente escritos y vb6 detecta que el archivo existe.


Las variables Nombre es "Norberto" y la variable Pass es "pass" y el archivo Txt es asi:

Norberto-pass-puesto-C:\Users\Public\Pictures\Sample Pictures\Desert.jpg
Beatriz-pass2-puesto2-C:\Users\Public\Pictures\Sample Pictures\Enim.jpg

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana

Por qué se sale ???

Publicado por Antoni Masana (88 intervenciones) el 17/07/2014 06:24:40
Veo dos fallos:

Uno principal en el IF y otro secundario en el bucle, te pongo tu código original y debajo el modificado y en negrita las líneas con los cambios

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Private Sub ComprobarUsuarioPass(Nombre As String, Pass As String)
   Dim LectorLineas As String
   Dim Linea() As String
 
   ComprobarUsuario = False
 
   If Dir$(App.Path & "\BaseDatos\Empleados.txt", vbArchive) <> "" Then
 
      Open App.Path & "\BaseDatos\Empleados.txt" For Input As #1
 
      Do While Not EOF(1)
         Line Input #1, LectorLineas
         Linea = Split(LectorLineas, "-")
 
         If Linea(0) = Nombre & Linea(1) = Pass Then 'Aqui es donde se sale del código
            UltUsuNombre = Linea(0)
            UltUsuPass = Linea(1)
            UltUsuPuesto = Linea(2)
            UltUsuRutaImagen = Linea(3)
            ComprobarUsuario = True
         End If
      Loop 'El loop unca se repite
   End If
 
   Close #1 'Esto nunca se ejecuta
   Label2.Caption= Linea(0) 'Esto tampoco
End Sub



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Private Sub ComprobarUsuarioPass(Nombre As String, Pass As String)
   Dim LectorLineas As String
   Dim Linea() As String
 
   ComprobarUsuario = False
 
   If Dir$(App.Path & "\BaseDatos\Empleados.txt", vbArchive) <> "" Then
 
      Open App.Path & "\BaseDatos\Empleados.txt" For Input As #1
 
      Do While Not EOF(1) AND ComprobarUsuario = False
         Line Input #1, LectorLineas
         Linea = Split(LectorLineas, "-")
 
         IF Linea(0) = Nombre AND Linea(1) = Pass Then  ' --- Aqui es donde se sale del código
            UltUsuNombre = Linea(0)
            UltUsuPass = Linea(1)
            UltUsuPuesto = Linea(2)
            UltUsuRutaImagen = Linea(3)
            ComprobarUsuario = True
         End If
      Loop                                             ' --- El loop nunca se repite
   End If
 
   Close #1 'Esto nunca se ejecuta
   Label2.Caption= Linea(0) 'Esto tampoco
End Sub

Cuando encuentra el empleado finaliza el Bucle. Esto debería solucionar el problema

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Por qué se sale ???

Publicado por Pico (114 intervenciones) el 17/07/2014 10:26:38
Split devuelve un array de string. Das por supuesto que Lineas tiene una dimensión al menos de 2. Si el string original no tiene un guión sólo tendrá un elemento, con lo que Lineas(1) provocará un error de acceso y se saldrá del programa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar