10 de febrero de 2006

Conocer el valor de campo autonumérico

Una labor fundamental cuando se utiliza el nuevo tipo de dato (VFP8 y posteriores)... El caso es clásico cuando se desea saber cuál fué el último valor de un campo identificador para utilizarlo como llave foránea en tablas relacionadas.

A partir de VFP9 se cuenta con una función nativa que hace muy fácil su uso: GetAutoIncValue() .
lnLastID = GetAutoIncValue() 
IF LastID > 0
     *** Utilizar este valor
ENDIF
Esta función tiene un punto débil, ya que sólo te dará los valores de el último autoincremental, cosa que podría ser contraproducente (o inútil) si utilizas varios autoincrementales en una misma tabla (cosa que es posible), para esto, y también para ayudar a aquellos que cuenta todavía con la versión 8, pongo a disposición una rutina que podría ser utilizada para subsanar este pequeño problema:
**************************************************************************
* Function: LastID
* Obtener el último ID (Autoincremental) de un cursor, según el campo indicado
* Parameters: tcAlias ---> Alias del cursor 
*             tcField ---> Campo Autoincremental
* Returns:
*      + Entero positivo mayor o igual a cero si se le ha proporcionado
*        correctamente el alias y campo (debe ser autoincremental).
*      + .NULL. en caso de haber error, o no cumplir con los
*        requerimentos
* Developer: Esparta Palma (esparta@gmail.com) http://www.PortalFox.com
**************************************************************************

FUNCTION LastID(tcAlias AS String,;
                tcField AS String ) AS Integer
  LOCAL luReturn
  luReturn = .NULL.
  *** Revisar si existe el alias
  IF (SELECT(tcAlias)>0) AND (AFIELDS(LaFields,tcAlias) > 0)
    LOCAL lnRow
    *** Buscar la columna del campo a obtener su ultimo ID
    lnRow = ASCAN(laFields,tcField,1,0,1,1+8)
    *** Si el campo existe y es del tipo AutoInc
    IF (lnRow > 0) AND (laFields[lnRow,18] > 0)
      luReturn = laFields[lnRow,17]-1
    ENDIF
  ENDIF
  RETURN luReturn
ENDFUNC 
Su modo de uso es el siguiente:
lnLastID = LastID("TuTabla","TuCampoIncremental")
IF NOT NULL(lnLastID)
  *** Utilizar este valor
ENDIF

Espero les sea de utilidad.

Espartaco Palma Martínez

No hay comentarios. :

Publicar un comentario