Imaginé que había una función que actualizaba ese campo en todos los registros, pero busqué información al respecto en la documentación y web pero al no encontrarla (y con la presión de terminar el trabajo lo más pronto posible) hice la función siguiente:
FUNCTION NewIncrem
LPARAMETERS lcTabla, lcNombreCampo, lnError, lnUltInc
* abre la tabla
TRY
USE (lcTabla) IN 0 EXCLUSIVE
lnError = 0
CATCH
MESSAGEBOX("Error al abrir tabla", 48, "Error")
lnError = 1
ENDTRY
IF lnError = 1
RETURN 0
ENDIF
* crea el campo, si ya existe el nombre o es inválido cancela la operación
* crea el campo como numérico para poder actualizar los valores
TRY
SELECT (lcTabla)
ALTER TABLE (lcTabla) ADD COLUMN (lcNombreCampo) N(10)
CATCH
MESSAGEBOX("Error al crear el campo", 48, "Error")
lnError = 1
ENDTRY
IF lnError = 1
RETURN 0
ENDIF
* actualiza los valores del campo
REPLACE (lcNombreCampo) WITH RECNO() ALL
* actualiza el tipo de campo a incremental y el siguiente valor del autoincremental
ALTER TABLE (lcTabla) ALTER COLUMN (lcNombreCampo) I
GO BOTTOM
lnUltInc = &lcNombreCampo
ALTER TABLE (lcTabla) ALTER COLUMN (lcNombreCampo) INT AUTOINC NEXTVALUE iUltReg+1 STEP 1
RETURN 1
ENDFUNC
Lo primero que hace es crear el campo como numérico, para poder reescribirlo, le pone a cada fila el número de registro que le corresponde. Luego, modifica el tipo de campo a entero autoincremental y actualiza el valor siguiente en la base de datos.Devuelve numérico: 0 si falló, 1 si se realizó la operación.
Para llamarlo:
=NewIncrem("miTabla", "miCampo")
Arturo Panana
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.