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
Ir a la versión completa