Amigos, buenos días... Visitando la página de "el guille", me di con este ejemplo:
http://www.elguille.info/NET/ADONET/ejemplo_adonet_bases_tipo_access.htm
Se trabaja con una base de datos access, la cual tiene sólo una tabla con un campo ID (llave) autoincremental...
Primer "problema" que tengo... cuando elimino los posibles registros, el campo para el ID sigue y sigue aumentando sus valores... Es decir, si tiene registros desde el 1 hasta el 20, siendo estos dos números la llave para el primer elemento y el último respectivamente... y luego se me ocurre eliminar todos... La siguiente vez que ingrese un valor, éste cogerá el 21 como su ID y no el 1. ¿No debería coger el 1?
Segundo problema...
Por qué el guille dice esto en su artículo...
Debido a cómo funcionan los campos autincrementales, para asegurarnos de que en realidad el valor de ese ID se actualiza correctamente, si es el primer registro que añadimos (o vale cero, como es la comprobación que hacemos aquí), deberíamos volver a leer los datos reales de la base de datos (que será después de haber añadido el primer registro) con idea de que ese ID tenga el valor correcto. Esto no es necesario en los siguientes datos que vayamos añadiendo, ya que en otros casos el valor del ID se asignará correctamente.
Como ves, también controlamos los errores que se puedan producir... ¡nunca está de más!
Y por qué hace esto en su código:
Private Sub btnNuevo_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles btnNuevo.Click
' Crear un nuevo registro
Dim dr As DataRow = dt.NewRow()
' Asignar los datos de los textbox a la fila
asignarDatos(dr)
' Añadir la nueva fila a la tabla
dt.Rows.Add(dr)
' Guardar físicamente los datos en la base
Try
da.Update(dt)
dt.AcceptChanges()
' Si es el primer registro de la base,
' volver a leer los datos para actualizar los IDs
If CInt("0" & dr("ID").ToString) = 0 Then
dt = New DataTable
da.Fill(dt)
End If
' Posicionarlo en la última fila
btnLast_Click(Nothing, Nothing)
Catch ex As DBConcurrencyException
MessageBox.Show("Error de concurrencia:" & vbCrLf & ex.Message)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Mil gracias por su valiosa ayuda...
|