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 ENDFUNCLo 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.