varios valores una tabla registros registro modificar insertar eliminar datos buscar borrar actualizar ms-access vb6

ms access - valores - Recuperar el siguiente Autonumérico para la tabla de acceso



modificar datos de una tabla mysql (3)

Tengo una tabla en Microsoft Access / JET que tiene un campo Autonumérico que se configura de forma incremental y que sirve como la clave principal de la tabla. Necesito saber cuál será el valor de la clave principal para el siguiente registro insertado, pero necesito saber el valor antes de insertar el registro. Usando SELECT MAX([ID]) + 1 FROM [TableName]; no funcionará porque los registros se eliminan rutinariamente del final de la tabla. (Insertar un nuevo registro solo para descubrir el valor tampoco es una opción).

Sé que esto se hace fácilmente en MySQL usando el comando SHOW TABLE STATUS . ¿Hay algo que me permita hacer exactamente lo mismo para Access / JET usando ADO, DAO, VB6 o cualquier otra herramienta disponible?


Inicialmente, acordé con la solución de HK1 hacer tu propia, pero Hans encontró la mejor solución.

Iba a sugerir encontrar la identificación insertando un registro en una transacción con reversión. El problema es que obtendrá el siguiente número (por ejemplo, 62), pero cuando realmente agrega el nuevo registro de manera real, obtiene la identificación después de eso (63). La reparación restablecerá los valores al próximo número disponible.

Solo curiosidad, ¿por qué necesitas saber este número? Si tiene un registro (papel u otro) que necesita este valor, debe ingresarlo en ese sistema / documentación después de que realmente ingrese el registro.


La característica de Autonumérico en Access es muy limitada cuando se compara con la columna de identidad de SQL Server o la columna AUTO_INCREMENT de MySQL. No hay forma de recuperar el siguiente número disponible salvo el uso de SQL que es inexacto. Como dijiste, los registros eliminados de ese momento lo harán para que el número superior y el siguiente no coincidan. (Ver Editar a continuación).

Creo que es mejor utilizar un campo de número largo (no autonumber) y crear su propia función de autoincremento que utiliza al insertar nuevos registros.

Editar:
Veo que HansUp realmente ha encontrado una manera de hacer lo que estabas pidiendo. Por favor, mira su solución.


Puede usar ADOX (extensiones de Microsoft ADO para DDL y seguridad) para determinar el valor de "semilla" actual de su campo de autonumeración.

Public Function NextAutonumber(ByVal pTable As String, _ ByVal pAutonumField As String) As Long Dim cat As Object Set cat = CreateObject("ADOX.Catalog") Set cat.ActiveConnection = CurrentProject.Connection NextAutonumber = cat.Tables(pTable).Columns(pAutonumField).Properties("Seed") Set cat = Nothing End Function

Tenga en cuenta que este enfoque podría dar el resultado incorrecto en una situación multiusuario ... si otro usuario puede colarse un INSERT entre el momento en que recupera el próximo autonumero y realmente realiza su INSERT . Si es fundamental, puede verificar si obtuvo el valor que esperaba marcando SELECT @@Identity después de INSERT .