Visual Basic.NET - No se actualizan los datos en el formulario

 
Vista:

No se actualizan los datos en el formulario

Publicado por Medardo (17 intervenciones) el 18/04/2009 16:57:01
Hola
Tengo el siguiente código en un botón para actualizar:

oConexion.Open()
Dim comando As New OleDb.OleDbCommand(actUpdate2, oConexion)
comando.ExecuteNonQuery()

oDataSet.Clear()
oDataAdapter.Fill(oDataSet, "Clientes")
oDataAdapter.Update(oDataSet, "Clientes")
oDataSet.AcceptChanges()

MessageBox.Show("Actualizado")

‘actUpdate2’ es una variable que almacena la consulta SQL con los datos modificados de una fila específica.

Al dar clic en el botón de actualizar que contiene el código que he expuesto, suceden dos cosas:
1. El formulario no se actualiza con los nuevos datos modificados y,
2. Los combos, que todos están cargados con diferentes listas, se muestran completamente en blanco, pierden la lista.

Nota: he podido comprobar que la actualización se realiza perfectamente en la base de datos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:No se actualizan los datos en el formulario

Publicado por Damian (824 intervenciones) el 18/04/2009 19:19:45
Y en que momento actualizas tus combos?,debes refresacar estos mismos volviendo a hacer un select para copiar los nuevos valores que se modificaron.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No se actualizan los datos en el formulario

Publicado por Medardo (17 intervenciones) el 18/04/2009 21:03:13
No había contestado antes porque tuvimos un pequeño problema en la conexión.
Bueno, vamos a ver.
Tengo una función, que no quise ponerla porque resuelve el problema a medias. Esa función carga la lista de todos los combos. Te muestro una parte, por ejemplo, cuando carga el combo de provincias.

'nuevo objeto DataAdapter
oDataAdapterProv = New OleDbDataAdapter(sSelProv, sCnn)
'llenar Dataset
oDataAdapterProv.Fill(oDataSet, "PROVINCIAS")
'asignar DataSource al combo
CboBox.DataSource = oDataSet.Tables("PROVINCIAS")
CboBox.DisplayMember = "Provincias"

‘sSelProv’ es una variable pública que contiene la consulta SQL que hace referencia a la tabla de Provincias:
Public sSelProv As String = "SELECT Provincias FROM PROVINCIAS"

Después que acepto los cambios, o sea, después de todo el código que expuse anteriormente, vuelvo a cargar los cambos, y se cargan perfectamente. Pero los combos muestran el primer valor de la lista y no el valor verdadero de ese registro (en los combos no se añaden elementos, son los que están).

Ante esta situación, se me ocurrió actualizar los datos repitiendo un procedimiento que tengo en el evento Al cargar del formulario y que reestablece el campo correspondiente a cada control. De esta manera, los datos que se muestran coinciden totalmente con el registro en que me encuentro, pero los datos que he modificado, no se refrescan y vuelven a aparecer los anteriores (aunque sí se modificaron en la base de datos).

Ante esta otra situación, se me ocurrió hacer visualizar el ítem del elemento que se añadió en el combo, de esta manera:

Dim indice As Integer
Dim cadena As String
cadena = SectorProced.Text.ToLower
indice = SectorProced.FindString(cadena)
SectorProced.SelectedIndex = CInt(indice.ToString)

Pues, todo parecía perfecto, pero si me muevo a todo registro y vuelvo al mismo, los cambios desaparecen y vuelven a mostrarse los anteriores. Algo parecido puedo hacer con el resto de los controles pero, al final, no se mantienen los nuevos datos.

Entonces, ¿cómo logro refrescar los datos? De verás que me ha costado trabajo entender el VB.Net, pero sigo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No se actualizan los datos en el formulario

Publicado por Medardo (17 intervenciones) el 20/04/2009 18:42:06
A ver si puedo aportar más datos.

En un módulo de funciones tengo lo siguiente:

Public dt As New DataTable
' crear adaptador
Public oDataAdapter As New OleDbDataAdapter
' crear conjunto de datos
Public oDataSet As New DataSet()
'para crear un nuevo registro
Public dr As DataRow
' crear el objeto de conexión
Public oConexion As New OleDbConnection()
' camino de la base de datos
Public strValor As String = My.Application.Info.DirectoryPath & "ControlDelegados.mdb"
' La cadena de conexión
Public sCnn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strValor & ";" & _
" Jet OLEDB:Database Password=cocu"
' La cadena de selección de la tabla principal
Public sSel As String = "SELECT * FROM Delegados ORDER BY IdDelegado"
Public actUpdate2 As String
Public sql As String

En el evento Al cargar del formulario, tengo lo siguiente:

'asignar conexión
oConexion.ConnectionString = sCnn
' abrir conexión
oConexion.Open()
' Crear un nuevo objeto del tipo DataAdapter
oDataAdapter = New OleDbDataAdapter(sSel, sCnn)

' Crear los comandos de insertar, actualizar y eliminar
Dim cb As New OleDbCommandBuilder(oDataAdapter)
' Asignar los comandos al DataAdapter
oDataAdapter.UpdateCommand = cb.GetUpdateCommand
oDataAdapter.InsertCommand = cb.GetInsertCommand
oDataAdapter.DeleteCommand = cb.GetDeleteCommand
' ID con valores automáticos
oDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
' Llenar la tabla con los datos indicados en la SELECT
oDataAdapter.Fill(dt)

En el botón Actualizar:
En este caso, no se pierden la lista de los combos, pero el valor modificado en cualquier control, no se refresca, se mantiene el anterior. Sin embargo, si se modifica en la base de datos.

'Almacenar el registro actual
fila = CLng(IdDelegado.Text)
sql = ""
actUpdate(fila, Me)
sql = Trim(Mid(sql, 2))
actUpdate2 = "UPDATE Delegados SET " & sql & " WHERE idDelegado=" & CInt(fila)

'Llenar el conjunto de datos ejecutando el método Llenar de SqlDataAdapter.
oDataAdapter.Fill(oDataSet, "Delegados")

Dim comando As New OleDb.OleDbCommand(actUpdate2, oConexion)
comando.Connection.Open()
comando.ExecuteNonQuery()
comando.Connection.Close()

'Exponer la modificación del dato en la base de datos.
oDataAdapter.Update(oDataSet, "Delegados")

comando.Connection.Close()

MessageBox.Show("Actualizado")

¿Qué me falta para que se refresque el valor modificado?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No se actualizan los datos en el formulario

Publicado por Damian (824 intervenciones) el 21/04/2009 00:13:05
Antes de la linea:
comando.Connection.Close()
Hacete un select de tu tabla con los campos a mostrar y se lo pasas a tus controles de esta forma deberias ver los nuevos registros modificados.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No se actualizan los datos en el formulario

Publicado por Medardo (17 intervenciones) el 21/04/2009 17:43:02
Hola Damian
A veces no puedo contestar en un tiempo corto porque también estoy impartiendo clases sobre Informática.
Por otra parte, disculpa mi ignorancia de principiante en el .Net, pero, veamos, conformo la Select:

Dim actUpdate3 As String
actUpdate3 = "SELECT * Delegados WHERE idDelegado=" & CInt(fila)

me dices: “…y se lo pasas a tus controles…”
¿a cuáles controles te refieres?

No puedes imaginarte cuántos días llevo con este problema y todo el tiempo que he invertido investigando, pero nada.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No se actualizan los datos en el formulario

Publicado por Damian (824 intervenciones) el 21/04/2009 18:39:26
No me comentas que no puedes actualizar los combos de tu formulario? a esos controles me refiero, deberias hacer un bucle(while) e ir cargando lo que te devuelva la consulta tus coombos o combo(no se cuantos tienes). O entendi mal tu problema?.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No se actualizan los datos en el formulario

Publicado por Medardo (17 intervenciones) el 21/04/2009 19:32:58
No, no. Fíjate que en el mensaje anterior donde puse el código completo, en la parte del botón Actualizar, comencé diciendo que ya no se pierde la lista de los combos. Ese ya no es el problema, sino que, donde quiera que realice la modificación, sea combo o textbox (que son los controles que tengo), no se refresca el dato, o sea, si después de darle clic al botón Actualizar me muevo para otro registro y vuelvo al anterior (donde hice las modificaciones) los controles pierden el valor de la modificación y muestran el anterior, como si no se hubiera modificado; sin embargo, los cambios sí aparecen en la base de datos. Para ver los datos actualizados, tendría que cerrar el programa y volverlo a abrir.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar