' No se necesita actualización sino hubo cambio en Datos inicialmente leídos.
If LosDatos.GetChanges() Is Nothing Then
MessageBox.Show("Ninguna modificacion")
Else
' La propiedad ContinueUpDateOnError del DataAdapter se establece en True para que la actualización no se interrumpa al primer rechazo.
UnConexionTemporal.ContinueUpdateOnError = True
Dim UnaCommand As OleDbCommand
Dim Param As OleDbParameter
Dim MisModifs As DataTable
Dim RegistrasATratar As Integer
Dim RegistrasTratadas As Integer
' Actualización: Agregar localidades (TLoc antes de TPers porque tabla "padre")
' Constitución de una tabla de datos que contiene todos los registros cuyo RowState es
' "Agregado". Este es el método GetChanges (DataRowState.Added) que llena este DataTable.
MisModifs = LosDatos.Tables("TLoc").GetChanges(DataRowState.Added)
' Si el DataTable está vacío, no hay registro para agregar.
' De lo contrario, se almacena el número de líneas a procesar.
If Not MisModifs Is Nothing Then
RegistrasATratar = MisModifs.Rows.Count
' Escribiendo el comando add con ? para valores desconocidos.
UnaCommand = New OleDbCommand("INSERT INTO TLoc (NumeroLocalidad, NombreLocalidad) VALUES (?, ?)", UnConexion)
' Un parámetro está definido por muchas propiedades, pero el único que se necesita aquí es el
' nombre del campo que representa. Un bucle For Each se puede utilizar cuando el orden y el
' número de incógnitas corresponden al orden y al número de columnas de la tabla de datos.
' Cada parámetro debe agregarse a la colección de parámetros del comando.
For Each C As DataColumn In MisModifs.Columns
Param = New OleDbParameter
Param.SourceColumn = C.ColumnName
UnaCommand.Parameters.Add(Param)
Next
' Cuando se escribe el comando y se definen sus parámetros, debe asignarse a la propiedad
' apropiada (InsertCommand en este caso) del DataAdapter.
UnConexionTemporal.InsertCommand = UnaCommand
' Todo lo que tiene que hacer es actualizar la actualización y guardar el número de líneas procesadas.
RegistrasTratadas = UnConexionTemporal.Update(MisModifs)
' Tratamiento de los rechazos (Display)
' Si hay menos líneas tratadas de las que hay que tratar, es que hubo rechazos.
' Tienes que pasar por el DataSet para encontrarlos y procesarlos.
If RegistrasTratadas < RegistrasATratar Then
For Each R As DataRow In MisModifs.Rows
' Cualquier línea que se actualice correctamente recibe el valor Sin cambios para su propiedad RowState.
If R.RowState <> DataRowState.Unchanged Then
MessageBox.Show(R.Item(0) & " " & R.Item(1) & " no agregado")
End If
Next
End If
MisModifs.Reset()
End If
' ... ... ...