CLR: .Net / Mono / Boo / Otros CLR > VB .NET

 codigo buscar, modificar y eliminar

(1/1)

boda:
por favor ayuda urgente tengo problemas con el siguiente codigo se supone que tiene que hacer la funcion de buscar, modificar y elminar pero solo puedo hacer la busquedad lo demas no me da un error que dice "Referencia a objeto no establecida como instancia de un objeto"

PD: la declaracion de la cadena de conexion no aparece por que la tengo declarada publica por eso solo utilizo la variable "conexion"
el codigo es el siguiente


--- Código: vb.net --- Imports System.dataImports System.Data.SqlClientPublic Class GrdProyecto     Private oDataAd As SqlDataAdapter    Private oDataSet As DataSet    'Private oDataTable As DataTable    Private Binding As Windows.Forms.BindingSource = New BindingSource    Private busquedad As String = "SELECT * FROM proyecto"    Public oDataTable As DataTable     Private Sub GrdProyecto_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load         With DgrdProyecto            .MultiSelect = False            .RowsDefaultCellStyle.BackColor = Color.White            .AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue            .SelectionMode = DataGridViewSelectionMode.FullRowSelect        End With          ' Declarar la conexión y abrir          ' Crear un DataAdapter y pasarle el comando para traer los registros          Dim oDataAd = New SqlDataAdapter("SELECT * FROM proyecto", conexion)        ' DataTable          Dim oDataTable = New DataTable        'Dim oDataSet As New DataSet         'oDataTable = oDataSet.Tables.Add("oDataTable")         ' llenar el DataTable          oDataAd.Fill(oDataTable)        conexion.Close()          ' enlazar el DataTable al BindingSource          Binding.DataSource = oDataTable         ' propiedades para el DataGridview          '''''''''''''''''''''''''''''''''''''''          DgrdProyecto.DataSource = oDataTable      End Sub    Function Buscar(ByVal Columna As String, ByVal texto As String, ByVal Binding As BindingSource) As Integer         Try            ' si está vacio salir y no retornar nada              If Binding.DataSource Is Nothing Then                Return -1            End If             ' Ejecutar el método Find pasándole los datos              Dim fila As Integer = Binding.Find(Columna.Trim, texto)             ' Mover el cursor a la fila obtenida              Binding.Position = fila             ' retornar el valor              Return fila             ' errores          Catch ex As Exception            MsgBox(ex.Message.ToString, MsgBoxStyle.Critical)        End Try        ' no retornar nada          Return -1     End Function     Private Sub BtBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtBuscar.Click        ' Pasar el nombre del campo por el cual buscar ,           ' el dato, y el BindingSource enlazado al DataGridView           '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''          Dim ret As Integer = Buscar("cod_proyecto", TextBox1.Text.Trim, Binding)         ' si no se encontró ....          If ret = -1 Then            ' mostrar un mensaje              MsgBox("No se encontró la fila", MsgBoxStyle.Critical)        Else            With DgrdProyecto                ' volver a enlazar                  .DataSource = Binding                ' Pasarle el índice para Visualizar la fila al comienzo de la grilla                  .FirstDisplayedScrollingRowIndex = ret            End With        End If    End Sub    Private Sub BtEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtEliminar.Click        Dim oDataSet As New DataSet        Me.DgrdProyecto.Rows.RemoveAt(0)        oDataAd.Update(oDataTable)        'Me.DgrdProyecto.Update()    End Sub    Private Sub BtModif_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtModif.Click        Me.DgrdProyecto.Update()        'Me.oDataAd.Update(oDataSet, "proyecto")    End SubEnd Class  

Nebire:
Solo he mirado el cóodigo por encima, lo que quiere decir que he parado de mirar más cuando he detectado un error, es decir la corrección que te voy a indicar no implica que no tengas otros errores en el código...

El error se produce porque el objeto oDataAd y el objeto oDataTable tienen una referencia nothing. esto sucede porque estás enmascarando dichas variables... te lo explico con un ejemplo:


--- Código: vb.net --- Public Class GrdProyecto     Private oDataAd As SqlDataAdapter     Private Sub GrdProyecto_Load ....        Dim oDataAd = New SqlDataAdapter("SELECT * FROM proyecto", conexion)   end subend class  Como ves hay 2 declaraciones de variable y tienen el mismo nombre, cuando esto sucede y entro en la sub... odataad se refiere a la que está dentro de la sub si no indico otra cosa, por otro lado la variable que se crea dentro de la sub se destruye cuando se sale de la sub... lo que implica que nuevamente las referencias a oDataAd se refieren a la que está declarada a nivel de la clase... pero que no le ha sido asignada ningún valor ...

En teoría he de suponer (que tu intención) que ambas variables deberían ser las misma y sólo una variable. La declaras a nivel de clase y en el load le asignas el valor:
La solución es como sigue.. compara este código y el anterior y 'descubre' la diferencia, que por otro lado está comentada.

--- Código: vb.net --- Public Class GrdProyecto     Private oDataAd As SqlDataAdapter     Private Sub GrdProyecto_Load ....        'Dim  si ponemos dim estamos creando una NUEVA variable, que en este caso es local a esta sub y que es distinta de otras variables del mismo nombre cuyo ámbito sea distinto.        oDataAd = New SqlDataAdapter("SELECT * FROM proyecto", conexion)   end subend class  
Corrige todos los errores de este tipo que cometes...
No he mirado más cosas en detalle pero por encima veo también varios 'dim oDataSet As New DataSet' y tienes declarado un oDataSet a nivel de clase...¿¿¿¿¿ ... ?????. Seguro que sabes lo que estás haciendo ?. Un despiste lo tiene cualquiera y puede pasarle inadvertido y volverse loco buscando, pero lo que veo me indica que no tienes claro el concepto de objeto.

Navegación

[0] Índice de Mensajes

Ir a la versión completa