Actualizar dos tablas vinculadas en una vista Maestro-Detalle
Una de las consultas comúnmente solicitadas a través del Blog, tiene que ver con la actualización de datos de dos tablas relacionadas en una BD de SQL, o sea actualizar una vista maestro-detalle vinculadas a sendas tablas.
Aunque por obvio y sencillo, las explicaciones acostumbran a ser de lo más diversas y finalmente te das cuenta que la mayoría de ejemplos se inician con un "desparrame" de jergas incomprensivas para la mayoría. Me decido postearos el ejemplo más básico posible, para que a partir de este punto podáis hacerlo crecer a vuestra necesidad.
Espero que os sea útil y despeje vuestras jaquecas cuando se trata de lidiar con diversas tablas.
PepLluis,
(Para ejecutar el ejemplo, iniciar Visual Studio y crear un nuevo proyecto 'Winform', añadir dos DataGridView y un Button, copiar / pegar codigo y por supuesto F5)
Imports System.Data.SqlClient
Public Class Form1
Private Maestro As SqlDataAdapter
Private Detalle As SqlDataAdapter
Private ConjuntoDeDatos As DataSet
Private Sub Form1_Load() Handles MyBase.Load
Dim miConexion As New SqlConnection("Data Source=.\SQLExpress;Initial Catalog=MaestroDetalle;Integrated Security=True")
Maestro = New SqlDataAdapter("Select * From Maestro", miConexion)
Dim MaestroCmdBuilder As New SqlCommandBuilder(Maestro)
Detalle = New SqlDataAdapter("Select * From Detalle", miConexion)
Dim DetalleCmdBuilder As New SqlCommandBuilder(Detalle)
ConjuntoDeDatos = New DataSet
Maestro.Fill(ConjuntoDeDatos, "Maestro")
Me.DataGridView1.DataSource = ConjuntoDeDatos
Me.DataGridView1.DataMember = "Maestro"
Detalle.Fill(ConjuntoDeDatos, "Detalle")
Me.DataGridView2.DataSource = ConjuntoDeDatos
ConjuntoDeDatos.Relations.Add("Fk", ConjuntoDeDatos.Tables("Maestro").Columns("IdMaestro"),
ConjuntoDeDatos.Tables("Detalle").Columns("IdDetalle"))
Me.DataGridView2.DataMember = "Maestro.Fk"
End Sub
Private Sub Actualizar() Handles Button1.Click
If ConjuntoDeDatos.HasChanges Then
Maestro.Update(ConjuntoDeDatos, "Maestro")
Detalle.Update(ConjuntoDeDatos, "Detalle")
End If
End Sub
End Class