? SEMANASMES(DATE()) FUNCTION SEMANASMES(ldFecha) IF TYPE("ldFecha") # "D" MESSAGEBOX('Parametro invalido',16,"Alto") RETURN 0 ENDIF RETURN CEILING(DAY(GOMONTH(ldFecha, 1) - DAY(ldFecha)) / 7) ENDFUNCEmanuel Omar Villicaña Villegas
30 de noviembre de 2007
Semanas del mes
Un compañero de trabajo hoy me estaba solicitando una rutina que le mostrara las semanas del mes así que basado en un ejemplo que existe en fox.wikis.com del ultimo día del mes lo adapte e hice la siguiente función a la cual podría ayudar a alguien como este compañero si existe una mejor forma agradecería sus comentarios.
28 de noviembre de 2007
Agregar campo autoincremental a tabla con registros
Tuve que agregar un campo incremental a varias tablas que tenían cantidades variables de registros y me encontré con el problema que, por un lado, a todos los registros les puso el valor de cero; y por otro lado, el campo era de sólo lectura.
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:
Devuelve numérico: 0 si falló, 1 si se realizó la operación.
Para llamarlo:
Arturo Panana
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
7 de noviembre de 2007
Rutina para una fecha en letras
Hice una variaciones para utilizar la rutina de Hector Urrutia en una función definida por el usuario (UDF) el programa puede tener cualquier nombre yo le puse datestr.prg y asi se llama la función, es como sigue:
Nelson Maranjes
Cuba
PARAMETERS tddate LOCAL lcStr as String lcStr = UPPER(CDOW(tdDate)) + [, ] + ALLT(STR(DAY(tdDate))) + [ DE ] + ; UPPER(SUBSTR(SUBSTR(DMY(tdDate),AT(" ",DMY(tdDate),1) + 1,LEN(DMY(tdDate))),1,RAT(" ",SUBSTR(DMY(tdDate),; AT(" ",DMY(tdDate),1) + 1,LEN(DMY(tdDate))),1))) + [ DE ]+ ALLT(STR(YEAR(tdDate))) RETURN lcStrDe esta forma agrega mucha funcionalidad ya que si tenemos una tabla donde haya un campo fecha se puede ver directamente usando el browse tanto el campo fecha como su descripción en letra utilizando la función como un campo calculado por ejemplo:
BROWSE FIELD FECHA,A=DATESTR(FECHA)también
DISP ALL FECHA,DATESTR(FECHA)también si tienes la fecha en una variable
? DATESTR(variable)Gracias a todos en especial a Hector mucha salud y suerte.
Nelson Maranjes
Cuba
Suscribirse a:
Entradas
(
Atom
)