none
Problema para cargar un datatable RRS feed

  • Pregunta

  • Uso este código para cargar los controles de un formulario y cuando ejecuta la carga del dataadapter se sale del procedimiento y no me carga nada de información en el formulario. Lo raro es que no me bota ningun error. Previo a este problema me marco algun error que hablaba de que se hacia referencia a un formulario dos veces en references. 

    No se si alguien ha tenido un problema similar y sabe como resolverlo. Me parece que mi codigo esta bien.

    Gracias de antemano

       Private Sub carga_datos_iglesia()
            Dim sql As String
            Dim dclaveparroquia As String
            Dim dnombreparroquia As String
            Dim ddiocesis As String
            Dim dpresbitero As String
            Dim dcalle As String
            Dim dexterior As String
            Dim dinterior As String
            Dim dcolonia As String
            Dim dmunicipio As String
            Dim destado As String
            Dim dpais As String
            Dim dcodigopostal As String
            Dim dlogo As String
            Dim dlogo2 As String


            'Crea la tabla en memoria
            Dim dt As New DataTable()
            sql = "SELECT Clave_parroquia, Nombre_parroquia, Nombre_diocesis, Nombre_presbitero, Calle, next, nint, Colonia, Municipio, Estado, Pais, CodigoPostal, Logo, logo_2  FROM DatosParroquia WHERE Clave_parroquia='01';"

            'Crea el adaptador de datos
            Dim dataadapterpendientes As New OleDb.OleDbDataAdapter(sql, conn)

            'Llena la tabla en memoria
            dataadapterpendientes.Fill(dt)
            'Quita la conexion fisica
            dataadapterpendientes.Dispose()
            Try
                'Inicia el recorrido de los datos encontrados

                'Obtiene la fecha del registro actual
                dclaveparroquia = dt.Rows(0)("Clave_parroquia")
                dnombreparroquia = dt.Rows(0)("Nombre_parroquia")
                ddiocesis = dt.Rows(0)("Nombre_diocesis")
                dpresbitero = dt.Rows(0)("Nombre_Presbitero")
                dcalle = dt.Rows(0)("Calle")
                dinterior = dt.Rows(0)("next")
                dexterior = dt.Rows(0)("nint")
                dcolonia = dt.Rows(0)("Colonia")
                dmunicipio = dt.Rows(0)("Municipio")
                destado = dt.Rows(0)("Estado")
                dpais = dt.Rows(0)("Pais")
                dcodigopostal = dt.Rows(0)("CodigoPostal")
                dlogo = dt.Rows(0)("Logo")
                dlogo2 = dt.Rows(0)("Logo_2")

             
                'Carga los datos en el formulario

                Txt_clave_iglesia.Text = dclaveparroquia
                Txt_nombre_Iglesia.Text = dnombreparroquia
                Txt_diocesis.Text = ddiocesis
                Txt_nombre_parroco.Text = dpresbitero
                Txt_calle.Text = dcalle
                Txt_int.Text = dinterior
                Txt_next.Text = dexterior
                Txt_colonia.Text = dcolonia
                Txt_ciudad.Text = dmunicipio
                Txt_estado.Text = destado
                Txt_pais.Text = dpais
                Txt_cp.Text = dcodigopostal




                dt.Dispose()


            Catch ex As Exception
                MsgBox(ex.ToString)

            End Try


        End Sub

    jueves, 5 de mayo de 2016 14:29

Respuestas

  • "hector barajas" escribió:

    > cuando ejecuta la carga del dataadapter se sale del procedimiento y no me carga nada
    > de información en el formulario. Lo raro es que no me bota ningun error.
    >

    Si no te "bota ningún error", puede que sea porque no se haya producido un error. Y si no se carga de datos el objeto DataTable, puede que se deba a que no existan registros donde el valor del campo Clave_parroquia sea igual a "01".

    > Private Sub carga_datos_iglesia()

    Observando el código que deseas ejecutar en dicho procedimiento, entiendo que lo correcto es que ese procedimiento devuelva un valor, por tanto, en lugar de Sub lo vamos a transformar en Function, si te parece bien, claro está:

    Imports System.Data.OleDb

    Private Function Obtener_Datos_Iglesia(claveParroquia As String) As DataRow Dim row As DataRow = Nothing Using cnn As New OleDbConnection(Escribe aquí tu cadena de conexión) Dim cmd As OleDbCommand = cnn.CreateCommand() cmd.CommandText = "SELECT Clave_parroquia, Nombre_parroquia, Nombre_diocesis, Nombre_presbitero, Calle, next, nint, Colonia, Municipio, Estado, Pais, CodigoPostal, Logo, logo_2 " & "FROM DatosParroquia " & "WHERE Clave_parroquia=@clave;" cmd.Parameters.AddWithValue("@clave", claveParroquia) 'Crea el adaptador de datos Dim dataadapterpendientes As New OleDbDataAdapter(cmd) 'Crea la tabla en memoria Dim dt As New DataTable() 'Llena la tabla en memoria dataadapterpendientes.Fill(dt) ' Referenciamos el primer registro existente en el objeto DataTable, ' siempre y cuando exista algún registro. ' If (dt.Rows.Count > 0) Then row = dt.Rows(0) End If End Using Return row End Function


    Como podrás observar, la función te devolverá un objeto DataRow con los datos del registro que coincidan con el valor de la clave pasada al procedimiento, que en definitiva será el criterio que se especificará en la cláusula WHERE de la consulta SQL de selección.

    Ahora, cuando desees recuperar los datos y rellenar los distintos controles TextBox existentes en el formulario, llamarías a dicha función como indico a continuación:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Try
                ' Obtenemos un objeto DataRow correspondiente a una clave de parroquia
                '
                Dim row As DataRow = Obtener_Datos_Iglesia("01")
                If (row Is Nothing) Then
                    MessageBox.Show("No existen datos.")
    
                    ' Abandonar el procedimiento.
                    Return
                End If
    
                ' Mostrar los datos en el formulario.
                '
                Dim value As Object = row("Clave_parroquia")
                Txt_clave_iglesia.Text = If(value Is DBNull.Value, "", value.ToString())
    
                value = row("Nombre_parroquia")
                Txt_nombre_Iglesia.Text = If(value Is DBNull.Value, "", value.ToString())
    
                value = row("Nombre_diocesis")
                Txt_diocesis.Text = If(value Is DBNull.Value, "", value.ToString())
    
                value = row("Nombre_Presbitero")
                Txt_nombre_parroco.Text = If(value Is DBNull.Value, "", value.ToString())
    
                value = row("Calle")
                Txt_calle.Text = If(value Is DBNull.Value, "", value.ToString())
    
                value = row("next")
                Txt_int.Text = If(value Is DBNull.Value, "", value.ToString())
    
                value = row("nint")
                Txt_next.Text = If(value Is DBNull.Value, "", value.ToString())
    
                value = row("Colonia")
                Txt_colonia.Text = If(value Is DBNull.Value, "", value.ToString())
    
                value = row("Municipio")
                Txt_ciudad.Text = If(value Is DBNull.Value, "", value.ToString())
    
                value = row("Estado")
                Txt_estado.Text = If(value Is DBNull.Value, "", value.ToString())
    
                value = row("Pais")
                Txt_pais.Text = If(value Is DBNull.Value, "", value.ToString())
    
                value = row("CodigoPostal")
                Txt_cp.Text = If(value Is DBNull.Value, "", value.ToString())
    
                Dim dlogo As Object = row("Logo")
                Dim dlogo2 As Object = row("Logo_2")
    
            Catch ex As Exception
                ' Se ha producido un error
                MessageBox.Show(ex.Message)
    
            End Try
    
        End Sub

    Revisa que la asignación de los valores de los campos a los controles TextBox sea correcta, vaya a ser que me haya equivocado con los nombres de los controles.

    Como en el código que has publicado no has indicado lo que deseas hacer con el valor de los campos Logo y Logo_2, yo me he limitado a declarar dos variables del tipo Object para almacenar el valor de los mismos.

    Si todo ha ido bien y existe un registro en la tabla DatosParroquia donde el campo Clave_parroquia sea igual a "01", entiendo que no deberías de tener problemas para que se muestren los datos en los distintos controles TextBox.

    > ... Previo a este problema me marco algun error que hablaba de
    > que se hacia referencia a un formulario dos veces en references.

    ¡Ni idea del error que comentas! ¿?

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.



    jueves, 5 de mayo de 2016 16:39
    Moderador