none
COMO DECLARO EL OBJETO VACIO EN UNA TABLA AL RECORRER EL RECORSET RRS feed

  • Pregunta

  • Saludos cordiales,

     

    ALGUIEN PODRIA INDICARME POR APARECE ERROR EN ESTA SETENCIA DE VB.NET DA UNA EXCEPCION A

     

    Private Sub CargarDatos()

     

    'obtener un objeto con la fila actual

    Dim oDataRow As Data.DataRow

    AQUI

    oDataRow = Me.oDataSet.Tables("Usuarios").Rows(Me.iPosicFilaActual)

     

    'cargar los controles del formulario con los valores de los campos del registro

    Me.txtIdUsuario.Text = CStr(oDataRow("Id_Usuario"))

    Me.txtNombre.Text = CStr(oDataRow("Nombre"))

    Me.txtLoguin.Text = CStr(oDataRow("Loguin"))

    Me.txtClave.Text = CStr(oDataRow("Clave"))

    'mostrar la posicion actual del registro y el numero total del registro

    Me.lblRegistro.Text = "Registro:" & Me.iPosicFilaActual + 1 & " de " & Me.oDataSet.Tables("Usuarios").Rows.Count

    End Sub

    • Cambiado Enrique M. Montejo jueves, 29 de septiembre de 2011 16:35 acceso a datos (De:Lenguaje VB.NET)
    jueves, 13 de marzo de 2008 22:27

Todas las respuestas

  • Hola,

     

    Asi a bote pronto sin conocer lo que dice tu excepcion...

     

    Si hay un NULL en la base de datos eso va a fallar estrepitosamente.

     

    a la hora de recuperar por ejemplo oDataRow("Id_Usuario") tienes que comprobar que no es nulo antes de hacer el CStr

     

    ejemplo:

     

    If (oDataRow("Id_Usuario") <> DbNull.Value) Then

    Me.txtIdUsuario.Text = CStr(oDataRow("Id_Usuario"))

    Else

    Me.txtIdUsuario.Text = ""

    End If

     

    mas o menos.

     

    Un saludo.

     

    Colabora con el foro: Si este mensaje te es de utilidad marcalo como respuesta.

    Javier Conesa

    MCP - Analista Programador

    Web: http://www.moreplus.es/index.aspx


    viernes, 14 de marzo de 2008 11:50
    Moderador
  • ESTIMADO JAVIER TE AGRADEZCO TU COLABORACION, ESTOY DESAROLLANDO UNA APLICACION EN vbnet 2005 con ado.net y con SQL SERVER 2005. ESTE ES MI PRIMER SISTEMA EN vbNEt PERO LO SIENTO COMPLICADO. Y PRACTICAMENTE TENGO PARADO EL PROYECTO POR ESTA SENTENCIA.....

     

     

    TE AGRADECERE TUS COMENTARIOS O AYUDA INFINITA;

     

     

     

     

    Imports System.Data.SqlClient

    Imports System.IO

    Imports System.Xml

    Imports System.Data

    Imports System.Text

    Imports Microsoft.Win32

    Public Class frmUsuarios

    Inherits System.Windows.Forms.Form

    'declaracion de objetos de acceso a datos a nivel de clase

    Private oConexion As Data.SqlClient.SqlConnection

    Private oDataSet As Data.DataSet

    Private oDataAdapter As Data.SqlClient.SqlDataAdapter

    Private iPosicFilaActual As Integer

    Private oDataRow As Data.DataRow

     

    ACA ESTA EL FORMULARIO PRINCIPAL FORM

     

    Private Sub frmUsuarios_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    'crear conexion

    Dim oConexion As SqlConnection

    ' se incluye en TRY para validar los errores

    Try

    oConexion = New SqlConnection()

    oConexion.ConnectionString = "Server=(local);" & " integrated security=sspi;" & "database=SINFORMACION;uid=sa;pwd=;"

    'crear adaptador

    Me.oDataAdapter = New SqlDataAdapter("SELECT * FROM Usuarios", oConexion)

    'crear COmmandBuilder

    Dim oCommBuild As SqlCommandBuilder = New SqlCommandBuilder(oDataAdapter)

    'crar DataSet

    Me.oDataSet = New DataSet

    'abrir conexion, operardatos, cerrar

    oConexion.Open()

    Me.oDataAdapter.Fill(oDataSet, "Usuarios")

    oConexion.Close()

     

    Catch ex As Exception

    MessageBox.Show("Error al conectar con la Base de Datos")

    End Try

    'establecer el indicador del registro a mostrar de la tabla

    Me.iPosicFilaActual = 0

    'cargar la columna del registro en los controles del formulario

    ACA MANDO A INVOCAR A LA FUNCION PARA SABER EN QUE POSICION ESTOY POR DEFECTO LE ASIGNO CERO EN EL REGISTRO;

    Me.CargarDatos()

    End Sub

     

    Private Sub CargarDatos()

     

    'obtener un objeto con la fila actual

    Dim oDataRow As Data.DataRow

     

    ACA ES DONDE ME MANDA AL EXEPCION Y DEBE DE SER QUE COMO LA TABLA ESTA VACIA EL PUNTERO ESTA APUNTANDO A NOTHING; EN VB6 YO RECUERDO QUE SE LLAMADA UNA VALIDACION PARA BOF o EOF  E INICIABAS A LLENAR EL DATO INICIAL; PERO ESTE  ME ESTOY ADAPTANDO,

     

     

     

    oDataRow = Me.oDataSet.Tables("Usuarios").Rows(Me.iPosicFilaActual)

     

    'cargar los controles del formulario con los valores de los campos del registro

    Me.txtIdUsuario.Text = CStr(oDataRow("Id_Usuario"))

    Me.txtNombre.Text = CStr(oDataRow("Nombre"))

    Me.txtLoguin.Text = CStr(oDataRow("Loguin"))

    Me.txtClave.Text = CStr(oDataRow("Clave"))

    'mostrar la posicion actual del registro y el numero total del registro

    Me.lblRegistro.Text = "Registro:" & Me.iPosicFilaActual + 1 & " de " & Me.oDataSet.Tables("Usuarios").Rows.Count

    End Sub

     

    ESTA SERIA LA FUNCION DE INSERCION

     

    Private Sub cmdInsertar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdInsertar.Click

    Dim oDataRow As DataRow

    'obtener un nuevo objeto filade la tabla del dataset

    oDataRow = Me.oDataSet.Tables("Usuarios").NewRow()

    'asignar el valor de los campos de la nueva fila

    oDataRow("Id_Usuario") = Me.txtIdUsuario.Text

    oDataRow("Nombre") = Me.txtNombre.Text

    oDataRow("Loguin") = Me.txtLoguin.Text

    oDataRow("Clave") = Me.txtClave.Text

    'añadir el objeto fila a la coleccion de filas de la tabla del dataset

    Me.oDataSet.Tables("Usuarios").Rows.Add(oDataRow)

    MessageBox.Show("Actualizando datos....")

    End Sub

     

    Y ESTE UN EJEMPO DE AVANCE, SIEMPRE AMBAS INVOCAN A CARGARDATOS!!!!!!!!!!!

     

    Private Sub cmdAvanzar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAvanzar.Click

    'si estamos en el ultimo registro, no hacer movimiento

    If Me.iPosicFilaActual = (Me.oDataSet.Tables("Usuarios").Rows.Count - 1) Then

    MessageBox.Show("Ultimo registro")

    Else

    'incrementar el marcador de registro y actualizar los controles con los datos actual

    Me.iPosicFilaActual += 1

    Me.CargarDatos()

    End If

    End Sub

    viernes, 14 de marzo de 2008 16:32
  • TE PASO LO SIGUIENTE, COMO YO TRABAJO POR MODULOS ENTONCES COPIATE ESTO EN UN MODULO:

    Imports System.Data
    Imports System.Data.SqlClient
    Module SqlSettings
        Public Connection_Sql As New SqlConnection("Persist Security Info=False;Integrated Security=SSPI;database="TU BASE SQL SIN COMILLAS";server=NOMBRE DE TU SERVIDOR\NOMBRE DE TU INSTANCIA INSTALADA")
        Public sSel As String
        Public dt As DataTable
        Public da As SqlDataAdapter
        Public cb As SqlCommandBuilder
        Public Cmd As New SqlCommand
        Public dr As DataRow
        Public fila As Integer
    End Module

     

    ahora bien, las instrucciones de llenado y vuelta de informacion es la siguiente en tu caso:

            SqlSettings.sSel = "SELECT * FROM Usuarios"
            SqlSettings.da = New SqlDataAdapter(sSel, SqlSettings.Connection_Sql)
            SqlSettings.cb = New SqlCommandBuilder(da)
            SqlSettings.da.MissingSchemaAction = MissingSchemaAction.AddWithKey
            SqlSettings.dt = New DataTable
            SqlSettings.da.Fill(dt)

    Me .txtIdUsuario.Text = SqlSettings.dr ( "Id_Usuario" ) .ToString
    Me
    .txtNombre.Text = SqlSettings.dr ( "Nombre" ).ToString
    Me
    .txtLoguin.Text = SqlSettings.dr ( "Loguin" ).ToString
    Me
    .txtClave.Text = SqlSettings.dr ( "Clave" ).ToString

    ahora, para insertar registros en la bd desde vb.net seria de la siguiente forma:

            SqlSettings.sSel = "Insert Into Products values('" & Me .txtIdUsuario .Text & "'," & _
                "'" & Me.txtNombre .Text & "'," & _
                "'" & Me.txtLoguin .Text & "'," & _
                "'" & Me.txtClave .Text & "')"
            SqlSettings.Connection_Sql.Open()
            SqlSettings.Cmd = New SqlCommand(SqlSettings.sSel, SqlSettings.Connection_Sql)
            SqlSettings.Cmd.ExecuteNonQuery()
            SqlSettings.Connection_Sql.Close()

     

    para mostrar cuantas filas hay dentro de la consulta que hiziste ya sea por "select * from" o con "select * from where"es:

    dt.Rows.Count

     

    suerte... espero te sirva.... saludines...

    • Propuesto como respuesta Danger Zone domingo, 15 de agosto de 2010 19:31
    domingo, 15 de agosto de 2010 19:30