none
Actualizar en Ejecucion DataSet despues de Insertar sin Cerrar la Aplicacion

    Pregunta

  • Hola Buenas Tardes

    Quisiera saber si me pueden ayudar

    1. Tengo una Bases de Datos de Partes de Almacen en SQL SERVER 2005
    2. Tengo una Aplicacion en Microsoft Visual Basic 2005
    3. Tengo un DataAdapter declarado en un modulo como publico llamado DAPARTES
    4. Tengo un DataSet declarado en el modulo antes mencionado como publico llamado DSPARTES
    5. Quisiera Actualizar el DSPARTES despues de Insertar (o realizasr cualquier otra operacion Editar, Borrar).

        Ya que este DSPARTES lo muestro en un DATAGRIDVIEW y unos TEXTBOX (para ir recorriendo y mostrando fila a fila a detalle)

    Existe algun comando para actualizar dicho DataSet sin cerrar la aplicacion.  Porque al reiniciar la aplicacion el DSPARTES, esta actualizado hasta el ultimo momento.

    Para explicarme mejor Ingreso, Edito y Borro sin problemas, pero al mostrar los cambios al usuario, es lo que no puedo hacer.

    Gracias por el apoyo !!!



    viernes, 08 de abril de 2011 21:13

Respuestas

  • Existe algun comando para actualizar dicho DataSet sin cerrar la aplicacion.

    solo deberias volver a realziar un Fill() del dataset para que recargue o actualice los datos

    con eso es mas que suficiente

    ojo esto y ademas volver a asignar el dataset al DataSource del DataGridView par aque muestree los datos

     

    en resumen debes realziar los mismas linea que usas cuandoc argas por primera vez el grid, con eso se actualiza

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 08 de abril de 2011 21:43
  • hola

    no entendi, porque es que realzias dos SELECT contra la tabla Partes ?

    y declaras

    Dim DSPartesGrid As New DataSet("PARTES")               

    Dim DSPartes As New DataSet("PARTES")

    por ahi debas quitar del codigo als partes que no deberias ir

    lo que veo es que cargas un dataset por una sola tabla, porque no suas un datatable ?

    o sea

    Dim dtPartes As New DataTable

    DAPartesGrid.Fill(dtPartes)              

    DataGridViewParts.DataSource = dtPartes

     

    veo ademas que haces

     DAPartes.Fill(DSPartes, "PARTES") 'Prueba                    

    DAPartes.Update(DSPartes.Tables(0))

    cual seria el objetivo del Update() sino has realziado cambio alguno en el DataSet, imagino al actualziacion la has realziado en el stored procedure

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    sábado, 09 de abril de 2011 0:31
  • Para esto debe crear un TableAdapterManager, te pongo un fragmento de codigo para que lo adapte a tu codigo

    Public Partial Class ActualizarDataSet
    	Inherits Form
    	Private manager As ColegioDataSetTableAdapters.TableAdapterManager 'Declaracion a nivel de la clase
    
    	Public Sub New()
    		InitializeComponent()
    	End Sub
            
            'Le trabajo en el lugar que quiero que realizo la actualizacion del DataSet
    	Private Sub asistenciaBindingNavigatorSaveItem_Click(sender As Object, e As EventArgs)
                    
                    ' Lo Configuro
    		manager = New ColegioDataSetTableAdapters.TableAdapterManager()
    		manager.AsistenciaTableAdapter = Me.asistenciaTableAdapter
    
    		Me.Validate()
    		Me.asistenciaBindingSource.EndEdit()
    
                    ' Invoco el metodo UpdateAll del manager
    		Me.manager.UpdateAll(Me.colegioDataSet)
    
    	End Sub
    
    	Private Sub ActualizarDataSet_Load(sender As Object, e As EventArgs)
    		' TODO: esta línea de código carga datos en la tabla 'colegioDataSet.Asistencia' Puede moverla o quitarla según sea necesario.
    		Me.asistenciaTableAdapter.Fill(Me.colegioDataSet.Asistencia)
    
    	End Sub
    End Class
    
    

     

     

     


    Angel R. Jimenez G.
    Software Development
    Santo Domingo
    Republica Dominicana
    sábado, 09 de abril de 2011 23:16

Todas las respuestas

  • Existe algun comando para actualizar dicho DataSet sin cerrar la aplicacion.

    solo deberias volver a realziar un Fill() del dataset para que recargue o actualice los datos

    con eso es mas que suficiente

    ojo esto y ademas volver a asignar el dataset al DataSource del DataGridView par aque muestree los datos

     

    en resumen debes realziar los mismas linea que usas cuandoc argas por primera vez el grid, con eso se actualiza

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 08 de abril de 2011 21:43
  •    Asi es como anteriormente lo tenia y cuiando voy ejectandolo paso a paso, en el DataGridView si me lo muestra actualizado, al momento de recorrerlo manualmente en los textbox no tengo el ultimo cambio realizado. 

    Y reviso logicamente el contenido del DataSet y no contiene el ultimo cambio despues de llenarlo. Intente con un codigo del DataAdapter.Update(DataSet) y tampoco lo actuliza.

    Como veras a continuacion Intento incluso con Try Catch pero como no es error, prosigue, pero simplemente no me lo muestra en los textbox

    Private Sub ButtonGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonGuardar.Click
        CadenaSQL = String.Concat(Fuente, ";", BD, ";", UserBD, ";", _
                      Password)
        Select Case intOptionOperacion
    
    
          Case 1 'AGREGAR 
            CamposVacios()
    
            If (boolFaltaCampo = False) Then
    
              Revision_Part_Repetida()
    
              Dim conexion As New SqlClient.SqlConnection(CadenaSQL)
              Console.WriteLine("Realizando conexion...")
    
              
              conexion.Open()
              Try
    
                Dim CmdAddPartes As SqlCommand = New SqlCommand("sp_AddPartes", conexion)             
                CmdAddPartes.CommandType = CommandType.StoredProcedure
                CmdAddPartes.Parameters.AddWithValue("@IDPARTE", (UCase(TextBox2.Text)))
                CmdAddPartes.Parameters.AddWithValue("@DESCRIPCION", (UCase(TextBox3.Text)))
                CmdAddPartes.Parameters.AddWithValue("@FECHA_CAPTURA", Convert.ToDateTime(DateTimeFechaCapParts.Text))
                CmdAddPartes.Parameters.AddWithValue("@CANTMAX", TextBox4.Text)
                CmdAddPartes.Parameters.AddWithValue("@CANTMIN", TextBox5.Text)
                CmdAddPartes.Parameters.AddWithValue("@INVENT_INICIAL", TextBox6.Text)
                CmdAddPartes.Parameters.AddWithValue("@ULTIMO_COSTO", TextBox7.Text)
                CmdAddPartes.Parameters.AddWithValue("@COSTO_ANT_ULT", TextBox8.Text)
                CmdAddPartes.Parameters.AddWithValue("@CANT_EXIST", TextBox9.Text)
    
                Dim strVigencia As String = ComboBox1.Text
                strVigencia = UCase(strVigencia)
                If (strVigencia = "SI") Then
                  CmdAddPartes.Parameters.AddWithValue("@VIGENCIA", "1")
                Else
                  If (strVigencia = "NO") Then
                    CmdAddPartes.Parameters.AddWithValue("@VIGENCIA", "0")
                  End If
                End If
    
                CmdAddPartes.Parameters.AddWithValue("@PATHFOTO", strPATHFOTO)
    
                If (boolIDPartDuplicado = False) Then
    
                  CmdAddPartes.ExecuteNonQuery()
    
                  Dim DAPartesGrid As New SqlDataAdapter("SELECT FOLIO, IDPARTE, DESCRIPCION FROM PARTES", conexion)
                  Dim DSPartesGrid As New DataSet("PARTES")
    
                  Dim DSPartes As New DataSet("PARTES")
                  Dim DAPartes As New SqlClient.SqlDataAdapter("SELECT * FROM PARTES", conexion)
    
                 
                 <strong> Try
    
                        DAPartes.Fill(DSPartes, "PARTES") 'Prueba
                        DAPartes.Update(DSPartes.Tables(0))
    
    
                       Catch ex As Exception
                          MsgBox("Error al actualizar el Dataset")
                       End Try
    
    
    </strong>
                  Console.WriteLine("Conexion realizada con exito")
                  MsgBox("Se agrego correctamente la Parte al Catalogo a la Base de Datos de la Empresa.", MsgBoxStyle.OkOnly, "Listo")
    
                  DataGridViewParts.Enabled = True
                  DAPartesGrid.Fill(DSPartesGrid, "PARTES")
                  DataGridViewParts.DataSource = DSPartes.Tables(0)
                  DataGridViewParts.Update()
              
                  ptcBoxParts.Image = Nothing
                  DAPartes.Dispose()
                
                  Bloquea()
              
    
                Else
                  MsgBox("Ya existe un Número de Parte identico. Por favor intenta otro diferente o modifica el existente!!!", MsgBoxStyle.Exclamation, "Número de parte repetido")
    
                End If
    
              Catch Ex As Exception
                MessageBox.Show(Ex.Message, "Error: Modulo Guardar una nueva Parte!!!", MessageBoxButtons.OK, MessageBoxIcon.Warning)
                     Finally
                conexion.Close()
                conexion.Dispose()
                Bloquea()
                DAPartes.Dispose()
              End Try
    
            Else
              Bloquea()
              MsgBox("Lo siento, pero hay uno o mas campos vacios. Por favor completalos correctamente.", MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "Solo puedes ingresar Partes con datos completos !!")
    
            End If
          
        End Select
    
      End Sub
    

     

    Pero gracias de todas formas por la ayuda !!!

     

     

    viernes, 08 de abril de 2011 22:26
  • hola

    no entendi, porque es que realzias dos SELECT contra la tabla Partes ?

    y declaras

    Dim DSPartesGrid As New DataSet("PARTES")               

    Dim DSPartes As New DataSet("PARTES")

    por ahi debas quitar del codigo als partes que no deberias ir

    lo que veo es que cargas un dataset por una sola tabla, porque no suas un datatable ?

    o sea

    Dim dtPartes As New DataTable

    DAPartesGrid.Fill(dtPartes)              

    DataGridViewParts.DataSource = dtPartes

     

    veo ademas que haces

     DAPartes.Fill(DSPartes, "PARTES") 'Prueba                    

    DAPartes.Update(DSPartes.Tables(0))

    cual seria el objetivo del Update() sino has realziado cambio alguno en el DataSet, imagino al actualziacion la has realziado en el stored procedure

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    sábado, 09 de abril de 2011 0:31
  • Bueno la razon de tener dos DataSet es porque originalmente tenia DSPARTESGRID para alimentarmentarme el DataGridView solo con los campos  de IDPART y Descripcion.  Y el DSPARTES me alimenta los cuadros de texto para mostrar a detalle cada registro.

    De la misma forma tengo eventos sobre el DataGridview que al presionar sobre cualquier fila del mismo toma el indice y lo manda a mostrar a detalle en las cajas de texto y viceversa cuando voy recorriendo manualmente en las cajas de texto fila a fila, tambien va recorriendo automaticamente en el DataGridview.

    Pero como tenia tenia dudas acerca de que, despues de Insertar no se estuviera actualizando el Dataset DSPARTES, alimente el Datagridview solo para ver logicamente que contenia en ejecucion el DSPARTES

    Y mi sorpresa me confundio a un mas en el DataGridView se muestra actualizado, pero al momento de recorrer el DSPARTES con las cajas de texto, NO SE ENCONTRABAN LOS ULTIMOS CAMBIOS, asi fueran nuevos registros, modificaciones o borrar registros, PERO TODO ESTO SOLO EN EJECUCION.

    Porque al cerrar y reiniciar el formulario el DSPARTES se encontraba actualizado tanto en las cajas de texto como en el DatagridView..

    Estoy muy confundido....

     

    sábado, 09 de abril de 2011 21:34
  • Para esto debe crear un TableAdapterManager, te pongo un fragmento de codigo para que lo adapte a tu codigo

    Public Partial Class ActualizarDataSet
    	Inherits Form
    	Private manager As ColegioDataSetTableAdapters.TableAdapterManager 'Declaracion a nivel de la clase
    
    	Public Sub New()
    		InitializeComponent()
    	End Sub
            
            'Le trabajo en el lugar que quiero que realizo la actualizacion del DataSet
    	Private Sub asistenciaBindingNavigatorSaveItem_Click(sender As Object, e As EventArgs)
                    
                    ' Lo Configuro
    		manager = New ColegioDataSetTableAdapters.TableAdapterManager()
    		manager.AsistenciaTableAdapter = Me.asistenciaTableAdapter
    
    		Me.Validate()
    		Me.asistenciaBindingSource.EndEdit()
    
                    ' Invoco el metodo UpdateAll del manager
    		Me.manager.UpdateAll(Me.colegioDataSet)
    
    	End Sub
    
    	Private Sub ActualizarDataSet_Load(sender As Object, e As EventArgs)
    		' TODO: esta línea de código carga datos en la tabla 'colegioDataSet.Asistencia' Puede moverla o quitarla según sea necesario.
    		Me.asistenciaTableAdapter.Fill(Me.colegioDataSet.Asistencia)
    
    	End Sub
    End Class
    
    

     

     

     


    Angel R. Jimenez G.
    Software Development
    Santo Domingo
    Republica Dominicana
    sábado, 09 de abril de 2011 23:16