Boletín mugperu Digital - Julio 2009!
  Search 
Monday, May 21, 2012 ..:: Foros de Discusión ::.. Register  Login
Foros MUGPERU Minimize
Subject: Por favor, ayúdenme con esto
Prev Next
You are not authorized to post a reply.

Author Messages
pardoaliaga
Posts:3

23/10/2006 05:49 AM  

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...

Jmestas
Posts:115

23/10/2006 08:47 AM  
Saludos, ps la respuesta a tu pregunta es NO, los campos de tipo identity, almacenan internamente el valor de correspondiente para cada nuevo registro, ahora la pregujnta ke yo te hago es la siguiente, por ke deseas ke regrese a uno, si es asi no utilizes un campo identity, utiliza un campo de tipo entero , ahora puedes revisar este articulo ke es del viejo VB6

Zaludos
You are not authorized to post a reply.
Forums > Temas de Interés > Usando ADO.NET > Por favor, ayúdenme con esto



ActiveForums 3.7
        
Copyright 2001-2012 MUGPERU   Terms Of Use  Privacy Statement