access vba - Cree un valor de ID secuencial basado en el año en que se agrega un registro
access-vba ms-access-2013 (1)
Con las versiones de Access 2010 y posteriores, puede usar una macro de datos controlada por eventos para generar la ID secuencial. Por ejemplo, supongamos que tiene una tabla llamada [poledata]. Ábralo en la Vista de diseño y agregue dos campos:
alternate_id_seq - Numeric (Entero largo)
alternate_id - Texto (20)
Guarde los cambios en su tabla y luego cambie a Vista de hoja de datos.
En la cinta de acceso, cambie a la pestaña "Herramientas de tabla> Tabla" y haga clic en "Antes de cambiar"
luego ingrese la siguiente macro ...
... o pegue el siguiente XML en la ventana del editor de macros
<?xml version="1.0" encoding="utf-16" standalone="no"?>
<DataMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application">
<DataMacro Event="BeforeChange">
<Statements>
<ConditionalBlock>
<If>
<Condition>[IsInsert]</Condition>
<Statements>
<Action Name="SetLocalVar">
<Argument Name="Name">next_seq</Argument>
<Argument Name="Value">1</Argument>
</Action>
<Action Name="SetLocalVar">
<Argument Name="Name">prefix</Argument>
<Argument Name="Value">"SAC" & Year(Date()) Mod 100 & "-"</Argument>
</Action>
<LookUpRecord>
<Data Alias="pd">
<Query>
<References>
<Reference Source="poledata" Alias="pd" />
</References>
<Results>
<Property Source="pd" Name="alternate_id_seq" />
</Results>
<Ordering>
<Order Direction="Descending" Source="pd" Name="alternate_id_seq" />
</Ordering>
</Query>
<WhereCondition>[pd].[alternate_id] Like [prefix] & "*"</WhereCondition>
</Data>
<Statements>
<Action Name="SetLocalVar">
<Argument Name="Name">next_seq</Argument>
<Argument Name="Value">[pd].[alternate_id_seq]+1</Argument>
</Action>
</Statements>
</LookUpRecord>
<Action Name="SetField">
<Argument Name="Field">alternate_id_seq</Argument>
<Argument Name="Value">[next_seq]</Argument>
</Action>
<Action Name="SetField">
<Argument Name="Field">alternate_id</Argument>
<Argument Name="Value">[prefix] & [next_seq]</Argument>
</Action>
</Statements>
</If>
</ConditionalBlock>
</Statements>
</DataMacro>
</DataMacros>
Ahora, cuando se agregan nuevas filas a la tabla, las columnas [alternate_id_seq] y [alternate_id] se completarán automáticamente.
Estoy trabajando en una base de datos de Access 2013 que tendrá diferentes polos de utilidad ingresados en la base de datos y vinculados con otros atributos. Cada polo tendrá una ID global única, y para simplificar el trabajo, me gustaría agregar otra ID única que sea más simple. Me gustaría que este campo se rellenara automáticamente cuando se importara un nuevo polo a la base de datos. La identificación iría de la siguiente manera:
SAC (año) - (Número creciente, no puede ser un duplicado)
ex. SAC16-20 (Este sería el vigésimo polo ingresado en la base de datos en 2016)
ex. SAC15-2536 (Sería la pole número 2536 ingresada en 2015)
Si alguien pudiera ayudarme a generar algún código para hacer que este campo de ID de llenado automático funcione, lo agradecería enormemente.