Visual Basic Foro

Programación => Bases de Datos => Mensaje iniciado por: raul338 en Junio 09, 2010, 08:52:58 am

Título: Evitar error si el recordset esta vacio (0 filas devueltas)
Publicado por: raul338 en Junio 09, 2010, 08:52:58 am
Hoolas!!

Estoy programando un sistema de gestion en vb6 y mysql, con ado por codigo
todo va de maravilla, salvo que hay veces que salta error al intentar trabajar con un recordset vacio. Pero.... por mas que evalue si esta vacio me tira el error  :laugh:

Este es el codigo:
Código: (vb) [Seleccionar]
    Private Function Ejecutar() As Boolean
        Debug.Print Time & " - " & Consulta & vbCrLf
               
        If Not cnnDatos.Execute(Consulta) Is Nothing Then
            Set rsDatos = cnnDatos.Execute(Consulta)
            If Not (rsDatos.BOF And rsDatos.EOF) Then rsDatos.MoveFirst
            Ejecutar = True
        Else
            Ejecutar = False
        End If
    End Function

Siendo cnnDatos la conexion a MySQL y rsDatos un recordset

El if que evalua si el lo que devuelve el cnnDatos.execute lo agregue para tratar de caputrar el error y asi devolver falso (y decir que no hay registro), pero hay veces que el debuger se para ahi, diciendo que no se puede "abrir" el recorset o que EOF = BOF o algo asi....

Alguna ayuda/sugerencia/copy&paste  ;D :-X?
Título: Re:Evitar error si el recordset esta vacio (0 filas devueltas)
Publicado por: k_arlytos en Junio 09, 2010, 12:20:12 pm
Que version de Mysql estas usando esta en español?
Título: Re:Evitar error si el recordset esta vacio (0 filas devueltas)
Publicado por: ssccaann43 en Junio 09, 2010, 01:18:29 pm
Para detectar que no hay registro lo haces simplemente con EOF=True

Solo eso...!
Título: Re:Evitar error si el recordset esta vacio (0 filas devueltas)
Publicado por: wolf_kof en Junio 09, 2010, 02:36:24 pm
Para poder tener una descripcion del error te aconsejo esto

Código: (vb) [Seleccionar]

on error goto [variable]

    [codigo]

exit sub
[variable]:
                 msgbox err.description



Título: Re:Evitar error si el recordset esta vacio (0 filas devueltas)
Publicado por: raul338 en Junio 09, 2010, 08:50:37 pm
Que version de Mysql estas usando esta en español?
Nop, ingles, ese no es el problema, la aplicacion funciona todo bien, solo que hay veces en las que la consulta no devuelve registros (ej: cliente nuevo no tiene facturas) tira error de comparar un objeto no asignado

Para detectar que no hay registro lo haces simplemente con EOF=True

Tira mismo error de arriba :S

Para poder tener una descripcion del error te aconsejo esto

Código: (vb) [Seleccionar]

on error goto [variable]

    [codigo]

exit sub
[variable]:
                 msgbox err.description

la descripcion me lo tira el debugger, y ..... no me gustan usar los gotos :)
Título: Re:Evitar error si el recordset esta vacio (0 filas devueltas)
Publicado por: YAcosta en Junio 10, 2010, 03:12:21 am
Porque utilizas Execute y no Open?

Título: Re:Evitar error si el recordset esta vacio (0 filas devueltas)
Publicado por: raul338 en Junio 10, 2010, 10:19:18 am
Porque utilizas Execute y no Open?

Usaba open del recordset pero tira el mismo error, buscando un poco vi que Execute devuelve un recordset y para probar lo deje ahi :E
Título: Re:Evitar error si el recordset esta vacio (0 filas devueltas)
Publicado por: wolf_kof en Junio 10, 2010, 12:45:01 pm
tenes que postear el codigo de (consulta)
Título: Re:Evitar error si el recordset esta vacio (0 filas devueltas)
Publicado por: coco en Junio 11, 2010, 02:46:58 pm
Hoolas!!

Estoy programando un sistema de gestion en vb6 y mysql, con ado por codigo
todo va de maravilla, salvo que hay veces que salta error al intentar trabajar con un recordset vacio. Pero.... por mas que evalue si esta vacio me tira el error  :laugh:

Este es el codigo:
Código: (vb) [Seleccionar]
    Private Function Ejecutar() As Boolean
        Debug.Print Time & " - " & Consulta & vbCrLf
               
        If Not cnnDatos.Execute(Consulta) Is Nothing Then
            Set rsDatos = cnnDatos.Execute(Consulta)
            If Not (rsDatos.BOF And rsDatos.EOF) Then rsDatos.MoveFirst
            Ejecutar = True
        Else
            Ejecutar = False
        End If
    End Function

Siendo cnnDatos la conexion a MySQL y rsDatos un recordset

El if que evalua si el lo que devuelve el cnnDatos.execute lo agregue para tratar de caputrar el error y asi devolver falso (y decir que no hay registro), pero hay veces que el debuger se para ahi, diciendo que no se puede "abrir" el recorset o que EOF = BOF o algo asi....

Alguna ayuda/sugerencia/copy&paste  ;D :-X?

Código: (vb) [Seleccionar]
    Private Function Ejecutar() As Boolean
        Debug.Print Time & " - " & Consulta & vbCrLf
               
        If Not cnnDatos.Execute(Consulta) Is Nothing Then
            Set rsDatos = cnnDatos.Execute(Consulta)
           
            If Not (rsDatos.BOF And rsDatos.EOF) And (rsDatos.RecordCount > 0) Then
                rsDatos.MoveFirst
                Ejecutar = True
            End If
        End If
    End Function

Ahi?

PD: borre lo de Ejecutar = False porque no es necesario, ya que por defecto es False.
Título: Re:Evitar error si el recordset esta vacio (0 filas devueltas)
Publicado por: raul338 en Junio 11, 2010, 08:58:05 pm
Código: (vb) [Seleccionar]
    Private Function Ejecutar() As Boolean
        Debug.Print Time & " - " & Consulta & vbCrLf
               
        If Not cnnDatos.Execute(Consulta) Is Nothing Then
            Set rsDatos = cnnDatos.Execute(Consulta)
           
            If Not (rsDatos.BOF And rsDatos.EOF) And (rsDatos.RecordCount > 0) Then
                rsDatos.MoveFirst
                Ejecutar = True
            End If
        End If
    End Function

Ahi?

PD: borre lo de Ejecutar = False porque no es necesario, ya que por defecto es False.

Parece funcionar :) gracias

En cuando lo de ejecutar = false, cuando uno busca soluciones a un problema no le interesa la forma, primero es arreglarlo y luego ordenar lo demas xDDDD