access-vba ms-access-2013 ms-access-data-macro

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">&quot;SAC&quot; &amp; Year(Date()) Mod 100 &amp; &quot;-&quot;</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] &amp; &quot;*&quot;</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] &amp; [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.