Spanish [SOLUCIONADO] Duda sobre hilo de ejecucion de rutinas

Discussion in 'Spanish Forum' started by Edu Portu, Mar 15, 2019 at 5:53 AM.

  1. Edu Portu

    Edu Portu Member Licensed User

    Tengo una rutina que le paso un usuario y contraseña tecleados y tiene que consultar en una BD Remota los datos de usuario y contraseña y devolverme True o False segun sean o no correctos

    Este es mas o menos el codigo

    Code:
    'Aqui hay que hacer una cobsulta JSON al servidor para ver si estamos identificados
    Sub Consulta_Correcta(IDB As String, IDU As String, IDP As StringAs Boolean
        
    Dim AccesoValido As Boolean
        AccesoValido = 
    False
       
        
    'Comprobamos si se puede escribir en la memoria externa
        If Not(File.ExternalWritable) Then
            
    ToastMessageShow("No se pueden descargar las rutas"True)
        
    Else
            
    'Comprobamos si tenemos conexion a internet
            Dim server As ServerSocket 'Add a reference to the network library
            server.Initialize(0"")
            
    If server.GetMyIP = "127.0.0.1" Then  'this is the local host address
                'ToastMessageShow("No se puede autentificar. Compruebe conexión.", True)
            Else
                
    'Accedemos al base de datos para coger los datos
                Dim job As HttpJob
                
    Dim Query As String = "SELECT * FROM buzones WHERE (IDBUZON = '" & IDBuzon & "')"
                job.Initialize(ID_BUZON, Me)
                job.PostString(
    "http://www.xxx.com/privado/xxx.php", Query)

                
    Wait For (job) JobDone(job As HttpJob)
                
                
    If job.Success Then
                    
    Log(job.GetString)
                    
    Msgbox(IDB & ":" & ServerBuzon & " - " & IDU & ":" & ServerUsuario & " - " & IDP & ":" & ServerPass, "CONSULTA SQL")
                    
    'Aqui tendriamos que comprobar que es correcta la informacion y poner AccesoValido=True o False
                    
                
    End If
                job.Release
            
    End If
        
    End If
        
        
    Return AccesoValido
    End Sub



    Sub JobDone(Job As HttpJob)
        
    If Job.Success Then
            
    Dim res As String
            res = Job.GetString
            
    Dim parser As JSONParser
            parser.Initialize(res)
            
    Select Job.JobName
                
    Case ID_BUZON
                    
    Dim PARTIDOS As List
                    PARTIDOS = parser.NextArray 
    'returns a list with maps
                    If PARTIDOS.Size = 1 Then 'Solo tiene que haber un registro con esa ID
                        
                        
    Dim m As Map
                        m = PARTIDOS.Get(
    0)
                        
    'Tratamos el campo FECHA Y HORA
                        ServerUsuario = m.Get("IDUsuario")
                        ServerPass = m.Get(
    "IDPass")
                    
    End If
                    
    DoEvents
            
    End Select
        
    Else
            
    ToastMessageShow("Error: " & Job.ErrorMessage, True)
        
    End If
        
    ProgressDialogHide
        Job.Release

    End Sub
    El problema es que las rutinas funcionan bien, pero cuando intento poner a la rutina Consulta_Correcta que devuelva un valor boolean me da el error:

    B4A Versión: 8.50
    Parseando código. Error
    Error al analizar el programa.
    Descripción del error: El tipo devuelto por las rutinas resumibles debe ser ResumableSub (o nada).
    Ha ocurrido un error en la línea: 174 (Main)
    Sub Consulta_Correcta(IDB As String, IDU As String, IDP As String) As Boolean

    que no se lo que significa

    Saludos y Gracias
     
    Last edited: Mar 15, 2019 at 6:32 AM
  2. Edu Portu

    Edu Portu Member Licensed User

    Al final parece ser que las rutinas RESUMIBLES (que tienen wait for) no pueden devolver valores, asi que lo he solucionado metiendo todo el codigo en el boton que llamaba a esta rutina.

    Muchas gracias
     
  3. bgsoft

    bgsoft Well-Known Member Licensed User

    Hola Edu:

    Si que se puede, lo que pasa que en la llamada tienes que hacer algo como lo que pongo mas abajo y en el Sub no devolver un boolean si no un ResumableSub

    Por ejemplo algo asi:

    Code:
    Dim bf2 As ResumableSub = Consulta_Correcta(Valor para IDB, Valor paraIDU, Valor paraIDP ) 
    Wait For (bf2) complete (Resultado As Boolean)
     
    if Resultado then
    ' ''''''''''''''
    ''''''''''
     end if    


    ' En tu rutina cambiar el boolean por ResumableSub

     
    Sub Consulta_Correcta(IDB As String, IDU As String, IDP As StringAs ResumableSub

    '''''''''''''''''
    '''''''''''''''
    Saludos
     
    dar2o3 and Descartex like this.
  4. Edu Portu

    Edu Portu Member Licensed User

    Muchas gracias por la rapida respuesta, al final lo habia resuelto poniendo todo el codigo en la tecla de AUTENTIFICAR, algo asi:

    Code:
    Sub btnIden_Click
       
    Dim Identificado As Boolean = False
     
       btnIden.Enabled = 
    False

       
    If ((edIDBuzon.Text<>""And (edIDUsuario.Text<>""And (edPass.Text<>"")) Then
           
    'Conectamos con la BD para solicitar los datos de autentificacion
         
           
    'Comprobamos si se puede escribir en la memoria externa
           If Not(File.ExternalWritable) Then
               
    ToastMessageShow("No se puede autentificar. Compruebe conexión."True)
           
    Else
               
    'Comprobamos si tenemos conexion a internet
               Dim server As ServerSocket 'Add a reference to the network library
               server.Initialize(0"")
               
    If server.GetMyIP = "127.0.0.1" Then  'this is the local host address
                   'ToastMessageShow("No se puede autentificar. Compruebe conexión.", True)
               Else
                   
    'Accedemos al base de datos para coger los datos
                   Dim job As HttpJob
                   
    Dim Query As String = "SELECT * FROM buzones WHERE (IDBUZON = '" & edIDBuzon.Text & "')"
                   job.Initialize(
    "", Me)
                   job.PostString(
    "http://www.siguealburro.com/privado/sab.php", Query)

                   
    Wait For (job) JobDone(job As HttpJob)
             
                   
    If job.Success Then
                       
    'Msgbox(job.GetString, "LOG")
                     
                       
    Dim parser As JSONParser
                       parser.Initialize(job.GetString)
                       
    Dim DATOS As List
                       DATOS = parser.NextArray 
    'returns a list with maps
                       If DATOS.Size = 1 Then 'Solo tiene que haber un registro con esa ID
                           Dim m As Map
                           m = DATOS.Get(
    0)
                           
    'Tratamos el campo FECHA Y HORA
                           ServerBuzon = m.Get("IDBuzon")
                           ServerUsuario = m.Get(
    "IDUsuario")
                           ServerPass = m.Get(
    "IDPass")
                           
    'Msgbox(ServerBuzon & " - " & ServerUsuario & " - " & ServerPass, "CONSULTA SQL")
                       End If
                       
    DoEvents
                       
    'Msgbox(edIDBuzon.Text & ":" & ServerBuzon & " - " & edIDUsuario.Text & ":" & ServerUsuario & " - " & edPass.Text & ":" & ServerPass, "COMPARACION")
                       If ((ServerBuzon = edIDBuzon.Text) And (ServerUsuario = edIDUsuario.Text) And (ServerPass = edPass.Text)) Then
                           
    'Guardamos los datos en la BD para futuras veces
                           IDBuzon = edIDBuzon.Text
                           IDUsuario = edIDUsuario.Text
                           IDPass = edPass.Text
                           funciones.EscConfig
                           Identificado = 
    True
                       
    End If
                   
    Else
                       
    ToastMessageShow("Error: " & job.ErrorMessage, True)
                   
    End If
                   job.Release
               
    End If
           
    End If

       
    End If
     
       
    If Identificado Then
           pnlIden.RemoveView
           
    'La identificacion ha sido correcta asi que aqui cargamos la pantalla de inicio
           lblNombreBuzon.Initialize("")
           ....
       
    Else
           
    ToastMessageShow("Error al identificar"True)
           btnIden.Enabled = 
    True
       
    End If

    End Sub
    No se si es muy correcto a nivel de programacion, pero parece que funciona. De todas maneras probare tambien lo que me comentas.

    Saludos y muchas gracias por la colaboracion.
     
  5. José J. Aguilar

    José J. Aguilar Active Member Licensed User

Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice