Foros del Web » Programación para mayores de 30 ;) » .NET »

Actualizar BD a partir de un dataGrid

Estas en el tema de Actualizar BD a partir de un dataGrid en el foro de .NET en Foros del Web. Hola amigos, Estoy realizando una aplicación que en una de sus opciones muestra en un dataGrid una tabla procedente de una base de datos. Este ...
  #1 (permalink)  
Antiguo 23/10/2006, 02:33
Avatar de SuperPinwi  
Fecha de Ingreso: septiembre-2005
Mensajes: 317
Antigüedad: 18 años, 7 meses
Puntos: 1
Actualizar BD a partir de un dataGrid

Hola amigos,

Estoy realizando una aplicación que en una de sus opciones muestra en un dataGrid una tabla procedente de una base de datos. Este DataGrid se puede modificar y dichas modificaciones deben actualizar la base de datos. Muestro correctamente la tabla pero el problema viene a la hora de actualizar la base de datos. Según he visto en varias páginas web, para actualizar una base de datos bastaría con pasar como argumento el dataSet correspondiente en el método update de un DataAdapter, y la cuestión sería ahora cómo hacer para enlazar el resultado del datagrid al dataset (sé que a la recíproca se hace tal que así: DataGrid1.DataSource = DataSet1.Tables("X")).

¿Me podéis ayudar?

Muchas gracias compañeros!!
  #2 (permalink)  
Antiguo 23/10/2006, 05:00
Avatar de SuperPinwi  
Fecha de Ingreso: septiembre-2005
Mensajes: 317
Antigüedad: 18 años, 7 meses
Puntos: 1
ahora mismo he conseguido que no me de errores al presionar el botón guardar, pero el caso es que tampoco me actualiza la base de datos

Este es mi Código

Código:
Imports System.Data.OleDb
Public Class Configuracion
    Inherits System.Windows.Forms.Form

    'Instancia de la clase que permite desplazar los controles del formulario
    Dim Movimiento As New MoverControles
    'DataSet
    Friend ds As New DataSet("Propiedades")
    'Objeto que permite actualizar la base de datos
    Friend DataGrid1 As New System.Windows.Forms.DataGrid
    'Dim OleDbUpdateCommand As OleDbCommand = New OleDbCommand
    Dim OleDbDataAdapter1 = New OleDb.OleDbDataAdapter("SELECT * FROM Propiedades", OleDbConnection1)
    Dim commBuild = New OleDbCommandBuilder(OleDbDataAdapter1)

    Private Sub Configuracion_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Fill llena las filas desde la fuente de datos usando la sentencia select
        MuestraTablaBD()
        Movimiento.AsignarEventos(Me)
    End Sub

    Private Sub BGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BGuardar.Click
        'Actualizamos los datos
        ds.AcceptChanges()
        OleDbDataAdapter1.Update(ds, "Propiedades")
        DataGrid1.Refresh()
        Me.Close()
        'Mostramos un mensaje
        MessageBox.Show("Se ha actualizado la base de datos", "Aviso")
    End Sub

    Private Sub BSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BSalir.Click
        Me.Close()
    End Sub

    Public Sub MuestraTablaBD()
        Dim dt As New DataTable
        Dim dr As DataRow
        Dim i As Integer
        Try
            OleDbConnection1.Open()
            OleDbDataAdapter1 = New OleDb.OleDbDataAdapter("SELECT * FROM Propiedades", OleDbConnection1)
            ds = New DataSet("Propiedades")
            'Llenamos el dataset con el contenido de la original
            OleDbDataAdapter1.FillSchema(ds, SchemaType.Source, "Propiedades")
            OleDbDataAdapter1.Fill(ds, "Propiedades")
            'Llenamos la tabla con el contenido del dataset
            dt = New DataTable
            dt = ds.Tables("Propiedades")
            'Llenamos la tabla de la base de datos con la información del dataset
            DataGrid1.DataSource = ds.Tables("Propiedades")
        Catch ex As Exception
            MessageBox.Show("Ha habido algún problema", "Aviso")
        Finally
            OleDbConnection1.Close()
        End Try
    End Sub

End Class

¿Alguna sugerencia?
  #3 (permalink)  
Antiguo 24/10/2006, 00:32
Avatar de SuperPinwi  
Fecha de Ingreso: septiembre-2005
Mensajes: 317
Antigüedad: 18 años, 7 meses
Puntos: 1
Buenas,

He conseguido que me actualice el Dataset, mi problema es ahora que al tratar de actualizar la base de datos me aparece el siguiente mensaje de error:

"El parámetro 'x' no tiene un valor predeterminado"

alguien sabe a qué se refiere esto??

gracias
  #4 (permalink)  
Antiguo 24/10/2006, 02:04
Avatar de SuperPinwi  
Fecha de Ingreso: septiembre-2005
Mensajes: 317
Antigüedad: 18 años, 7 meses
Puntos: 1
Cita:
Iniciado por SuperPinwi Ver Mensaje
Buenas,

He conseguido que me actualice el Dataset, mi problema es ahora que al tratar de actualizar la base de datos me aparece el siguiente mensaje de error:

"El parámetro 'x' no tiene un valor predeterminado"

alguien sabe a qué se refiere esto??

gracias
acabo de descubrir que ese error lo da simplemente en los campos de tipo String...

mi código ahora mismo es tal que así, (el campo de la base de datos Access es de tipo Texto)

Código:
Dim sDescripcion As String
sDescripcion = dr("descripcion")
OleDbUpdateCommand1.CommandText = "UPDATE Propiedades SET descripcion = " & sDescripcion & " WHERE ID = " & sID
OleDbUpdateCommand1.ExecuteNonQuery()
Graciasssss
  #5 (permalink)  
Antiguo 31/10/2006, 13:16
 
Fecha de Ingreso: octubre-2006
Mensajes: 1
Antigüedad: 17 años, 6 meses
Puntos: 0
De acuerdo

Sencillamente sin meterse en rollos (y a grandes rasgos).
Si quieren trabajaron con un DataGrid, DataSet (o Datatable) y actualizar la DB, pueden hacer lo siguiente.

Declaran e Instancian un DataAdapter, el DataTable y un CommandBuilder

OleDbDataAdapter myda = new OleDbDataAdapter("SELECT * FROM mitabla", conexion);
DataTable mydt = new DataTable("mitabla");
OleDbCommandBuilder mycmb = new OleDbCommandBuilder(myda);
myda.Fill(mydt);

Luego Agregan rows al DataTable, o no sé, lo que se les ocurra hacer con el, como mostrarlo en el grid, etc, etc.. al ultimo actualizan con
myda.Update(mydt);

El problema que veo es que no pueden actualizar la DB, lo que hace aqui el trabajo es el commandBuilder que crea los comandos DML necesarios para que el data adapter funcione correctamente. En otro comentario leí que tenia problema con un parametro o algo asi, recuerden que el DataTable debe tener el mismo esquema, constraints, etc de la tabla de la DB, me imagino que es por eso, he ahi por lo que hice un Select a la tabla, para que jalara el esquema al DataTable y tener de una ves los datos..

En fin... espero haber aportado algo.
Saludos

[email protected]
  #6 (permalink)  
Antiguo 31/10/2006, 15:48
 
Fecha de Ingreso: agosto-2006
Mensajes: 101
Antigüedad: 17 años, 8 meses
Puntos: 0
Yo te voy a dar otra idea, mas rudimentaria pero a mi me gusta más porque controlas más lo que sucede.

http://www.webprogramacion.com/registro.aspx?id=53

Supon que el dataset del que se habla del articulo, es el dataset que está asignado como datasource del datagridview.

Saludos.

Última edición por dvelazquez; 08/08/2007 a las 02:33
  #7 (permalink)  
Antiguo 02/11/2006, 01:10
Avatar de SuperPinwi  
Fecha de Ingreso: septiembre-2005
Mensajes: 317
Antigüedad: 18 años, 7 meses
Puntos: 1
Muchas gracias amigos, funciona perfectamente ahora
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:58.