• Viernes 8 de Noviembre de 2024, 10:46

Autor Tema:  codigo buscar, modificar y eliminar  (Leído 2107 veces)

boda

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
codigo buscar, modificar y eliminar
« en: Miércoles 1 de Julio de 2009, 02:36 »
0
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
  1.  
  2. Imports System.data
  3. Imports System.Data.SqlClient
  4. Public Class GrdProyecto
  5.  
  6.     Private oDataAd As SqlDataAdapter
  7.     Private oDataSet As DataSet
  8.     'Private oDataTable As DataTable
  9.     Private Binding As Windows.Forms.BindingSource = New BindingSource
  10.     Private busquedad As String = "SELECT * FROM proyecto"
  11.     Public oDataTable As DataTable
  12.  
  13.     Private Sub GrdProyecto_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  14.  
  15.         With DgrdProyecto
  16.             .MultiSelect = False
  17.             .RowsDefaultCellStyle.BackColor = Color.White
  18.             .AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue
  19.             .SelectionMode = DataGridViewSelectionMode.FullRowSelect
  20.         End With
  21.  
  22.  
  23.         ' Declarar la conexión y abrir  
  24.         ' Crear un DataAdapter y pasarle el comando para traer los registros  
  25.         Dim oDataAd = New SqlDataAdapter("SELECT * FROM proyecto", conexion)
  26.         ' DataTable  
  27.         Dim oDataTable = New DataTable
  28.         'Dim oDataSet As New DataSet
  29.  
  30.         'oDataTable = oDataSet.Tables.Add("oDataTable")
  31.  
  32.         ' llenar el DataTable  
  33.         oDataAd.Fill(oDataTable)
  34.         conexion.Close()
  35.  
  36.  
  37.         ' enlazar el DataTable al BindingSource  
  38.         Binding.DataSource = oDataTable
  39.  
  40.         ' propiedades para el DataGridview  
  41.         '''''''''''''''''''''''''''''''''''''''  
  42.         DgrdProyecto.DataSource = oDataTable
  43.  
  44.  
  45.     End Sub
  46.     Function Buscar(ByVal Columna As String, ByVal texto As String, ByVal Binding As BindingSource) As Integer
  47.  
  48.         Try
  49.             ' si está vacio salir y no retornar nada  
  50.             If Binding.DataSource Is Nothing Then
  51.                 Return -1
  52.             End If
  53.  
  54.             ' Ejecutar el método Find pasándole los datos  
  55.             Dim fila As Integer = Binding.Find(Columna.Trim, texto)
  56.  
  57.             ' Mover el cursor a la fila obtenida  
  58.             Binding.Position = fila
  59.  
  60.             ' retornar el valor  
  61.             Return fila
  62.  
  63.             ' errores  
  64.         Catch ex As Exception
  65.             MsgBox(ex.Message.ToString, MsgBoxStyle.Critical)
  66.         End Try
  67.         ' no retornar nada  
  68.         Return -1
  69.  
  70.     End Function
  71.  
  72.     Private Sub BtBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtBuscar.Click
  73.         ' Pasar el nombre del campo por el cual buscar ,  
  74.         ' el dato, y el BindingSource enlazado al DataGridView  
  75.         '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''  
  76.         Dim ret As Integer = Buscar("cod_proyecto", TextBox1.Text.Trim, Binding)
  77.  
  78.         ' si no se encontró ....  
  79.         If ret = -1 Then
  80.             ' mostrar un mensaje  
  81.             MsgBox("No se encontró la fila", MsgBoxStyle.Critical)
  82.         Else
  83.             With DgrdProyecto
  84.                 ' volver a enlazar  
  85.                 .DataSource = Binding
  86.                 ' Pasarle el índice para Visualizar la fila al comienzo de la grilla  
  87.                 .FirstDisplayedScrollingRowIndex = ret
  88.             End With
  89.         End If
  90.     End Sub
  91.     Private Sub BtEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtEliminar.Click
  92.         Dim oDataSet As New DataSet
  93.         Me.DgrdProyecto.Rows.RemoveAt(0)
  94.         oDataAd.Update(oDataTable)
  95.         'Me.DgrdProyecto.Update()
  96.     End Sub
  97.     Private Sub BtModif_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtModif.Click
  98.         Me.DgrdProyecto.Update()
  99.         'Me.oDataAd.Update(oDataSet, "proyecto")
  100.     End Sub
  101. End Class
  102.  
  103.  

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: codigo buscar, modificar y eliminar
« Respuesta #1 en: Sábado 4 de Julio de 2009, 20:31 »
0
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
  1.  
  2. Public Class GrdProyecto
  3.  
  4.     Private oDataAd As SqlDataAdapter
  5.  
  6.     Private Sub GrdProyecto_Load ....
  7.         Dim oDataAd = New SqlDataAdapter("SELECT * FROM proyecto", conexion)
  8.    end sub
  9. end class
  10.  
  11.  
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
  1.  
  2. Public Class GrdProyecto
  3.  
  4.     Private oDataAd As SqlDataAdapter
  5.  
  6.     Private Sub GrdProyecto_Load ....
  7.         '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.
  8.         oDataAd = New SqlDataAdapter("SELECT * FROM proyecto", conexion)
  9.    end sub
  10. end class
  11.  
  12.  

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.
«Ma non troppo»
----> ModoVacaciones = False<----