function redondeoacincocentimos lparameters m.nValor return ceiling(m.nvalor * 20) / 20 endfuncCarlos Yohn Zubiria
2 de julio de 2004
Redondear a 5 centavos por arriba
Esta función es muy útil para establecimientos donde las monedas de centavos ya no se usan tan frecuentemente y/o por comodidad se cobra 5 centavos arriba, es decir: $145.02 se convierte en $145.05, $145.07 se convierte en $145.10.
28 de junio de 2004
Reiniciar los contadores de campos AutoIncrementales
Con Visual FoxPro 8.0 se introdujeron los campos AutoIncrementales, veremos una forma de reiniciarlos.
El caso puede llegar en el momento en que se desea borrar todo el contenido de una tabla con autoincrementales, pero tambien deseas que dichos incrementos inicien como si la tabla fuera "nueva".
Está claro que lo puedes hacer mediante el diseñador de tablas, pero esta opción no estará disponible en tiempo de ejecución ("Runtime"), lo mismo pasará en el caso de que desees hacerlo con cursores creados con el comando CREATE CURSOR.
A continuación un código que mandé como respuesta a esta duda en el newsgroup de microsoft, el cual ayudará a realizar esta tarea programáticamente.
El procedimiento anterior, lo que hace es utilizar la tabla que hemos pasado de parametro(si es que no está en uso), si tiene algún error, devolverá un valor menor que cero ( < 0) , si cambia algún campo que tuvo incremental devolverá un número mayor que cero ( > 0) , si no cambia nada, devolverá cero... Hay que recordar que puede haber "n" campos autoincrementales un un cursor, y cada uno de esos campos, puede tener un valor distinto en su STEP...
Espero te sirva.
Espartaco Palma
El caso puede llegar en el momento en que se desea borrar todo el contenido de una tabla con autoincrementales, pero tambien deseas que dichos incrementos inicien como si la tabla fuera "nueva".
Está claro que lo puedes hacer mediante el diseñador de tablas, pero esta opción no estará disponible en tiempo de ejecución ("Runtime"), lo mismo pasará en el caso de que desees hacerlo con cursores creados con el comando CREATE CURSOR.
A continuación un código que mandé como respuesta a esta duda en el newsgroup de microsoft, el cual ayudará a realizar esta tarea programáticamente.
****************************************************
* Procedure: ResetTables
* Author: Esparta Palma Date: 17/Mayo/2004
* Purpose: Reinicia los contadores de AutoIncrementales en un cursor
* Parameters:
* tcCursor: The cursor (can include full or relative path) or alias
* Returns:
* < 0 : Number of reset fields
* -1 : Error -> Wrong parameters
* -2 : Error -> The table doesn't exist in the path
* -3 : Error -> Acess denied, used by another user
* -4 : Error -> Used by this user, but not Exclusive
* -5 : Error -> Unknow Error
* -6 : Error -> Error altering the cursor
* Use:
* lnSucess = ResetTable("myCursor")
****************************************************
PROCEDURE ResetTables
LPARAMETERS tcCursor
LOCAL llError
llError = .F.
IF VARTYPE(tcCursor)="C" AND NOT EMPTY(tcCursor) AND NOT (IsNull(tcCursor))
IF NOT USED(Juststem(tcCursor))
TRY
USE (tcCursor) IN 0 EXCLUSIVE
CATCH TO loErrorUsing
llError = .T.
DO CASE
CASE loErrorUsing.ErrorNo = 1
lnReturnValue = -2 && The Table doesn't exists
CASE loErrorUsing.ErrorNo = 1705
lnReturnValue = -3 && Acess denied, used by another user
OTHERWISE
lnReturnValue = -5 &&Unknow Error
ENDCASE
ENDTRY
IF llError
RETURN lnReturnValue
ENDIF
ELSE
IF NOT ISEXCLUSIVE(tcCursor)
RETURN -4 && Used by this user, but not Exclusive
ENDIF
ENDIF
llError = .F.
lnChangedFields = 0
FOR lnFields=1 TO AFIELDS(laFields,tcCursor)
IF laFields[lnFields,18] # 0 &&This Field has AutoInc
TRY
ALTER TABLE (tcCursor) ALTER COLUMN (laFields[lnFields,1]);
INT AUTOINC NEXTVALUE 1 STEP (laFields[lnFields,18])
lnChangedFields = lnChangedFields + 1
CATCH TO loError
llError = .T.
?[ Error: ] + STR(loError.ErrorNo)
?[ Message: ] + loError.MESSAGE
lnReturnValue = -6 &&Error Altering the Table
ENDTRY
IF llError
RETURN lnReturnValue
ENDIF
ENDIF
ENDFOR
ELSE
RETURN -1 && Wrong parameters...
ENDIF
RETURN lnChangedFields
ENDPROC
El procedimiento anterior, lo que hace es utilizar la tabla que hemos pasado de parametro(si es que no está en uso), si tiene algún error, devolverá un valor menor que cero ( < 0) , si cambia algún campo que tuvo incremental devolverá un número mayor que cero ( > 0) , si no cambia nada, devolverá cero... Hay que recordar que puede haber "n" campos autoincrementales un un cursor, y cada uno de esos campos, puede tener un valor distinto en su STEP...
Espero te sirva.
Espartaco Palma
22 de junio de 2004
New in Nine: Visual FoxPro's Latest Hits
Nuevo libro en Inglés de Tamar E. Granor, Doug Hennig, Rick Schummer, Toni Feltman y Jim Slater, sobre lo nuevo en VFP9 Beta.

Title: New in Nine: Visual FoxPro's Latest Hits
Authors: Tamar E. Granor, Doug Hennig, Rick Schummer, Toni Feltman y Jim Slater
Edited by: Jim Slater
ISBN: 1-930919-64-6
Length: Est. 240 pages
Formats Available: Printed (incl. ebook) or Ebook only
Printed book format: Paperback, 7"x9"
Ebook format: PDF (5 MB)
Price ($US): 49.95
Weight: 1.1 lbs.
Press date: October, 2004
Para mas información: http://www.hentzenwerke.com/catalog/wnvfp9.htm
Tabla de Contenidos
IDE
Chapter 1: Project Manager Improvements
Chapter 2: Controlling the Property Sheet
Chapter 3: Writing Code
Chapter 4: Better Tools
Reporting
Chapter 5: Enhancements to the Reporting System
Chapter 6: Customizing the Report Designer at Design-Time
Chapter 7: Customizing the Report Designer at Runtime
Data
Chapter 8: SQL Changes
Chapter 9: New Data and Index Types
Chapter 10: Managing XML
Chapter 11: Working with Remote Data
Chapter 12: Other Data Changes
Programming
Chapter 13: Forms and Controls
Chapter 14: Language Improvements
Chapter 15: Setup and Deployment
Para mas información: http://www.hentzenwerke.com/catalog/wnvfp9.htm
.
Title: New in Nine: Visual FoxPro's Latest Hits
Authors: Tamar E. Granor, Doug Hennig, Rick Schummer, Toni Feltman y Jim Slater
Edited by: Jim Slater
ISBN: 1-930919-64-6
Length: Est. 240 pages
Formats Available: Printed (incl. ebook) or Ebook only
Printed book format: Paperback, 7"x9"
Ebook format: PDF (5 MB)
Price ($US): 49.95
Weight: 1.1 lbs.
Press date: October, 2004
Para mas información: http://www.hentzenwerke.com/catalog/wnvfp9.htm
Tabla de Contenidos
IDE
Chapter 1: Project Manager Improvements
Chapter 2: Controlling the Property Sheet
Chapter 3: Writing Code
Chapter 4: Better Tools
Reporting
Chapter 5: Enhancements to the Reporting System
Chapter 6: Customizing the Report Designer at Design-Time
Chapter 7: Customizing the Report Designer at Runtime
Data
Chapter 8: SQL Changes
Chapter 9: New Data and Index Types
Chapter 10: Managing XML
Chapter 11: Working with Remote Data
Chapter 12: Other Data Changes
Programming
Chapter 13: Forms and Controls
Chapter 14: Language Improvements
Chapter 15: Setup and Deployment
Para mas información: http://www.hentzenwerke.com/catalog/wnvfp9.htm
.
14 de junio de 2004
Obtener el tamaño de un archivo o serie de archivos
Una función para calcular el tamaño de un archivo...
Espartaco Palma Martínez
****************************************************************
* Function FileSize
* Purpose: Get the FileSize (in bytes) of a single or multiple file
* Use: ?FileSize("miArchivo.txt") or ?FileSize("*.txt")
****************************************************************
FUNCTION FileSize
LPARAMETERS tcFile
LOCAL lnFileSize
lnFileSize = 0
FOR lnCounter=1 TO ADIR(laFile,tcFile)
lnFileSize = lnFileSize+ laFile[2]
ENDFOR
RETURN lnFileSize
ENDFUNC
Espartaco Palma Martínez
9 de junio de 2004
Autocompletar en un ComboBox
Método para añadir la característica Autocompletar en un control ComboBox.
* Escribe este codigo en el evento InteractiveChange
Nota del editor: A continuación un ejemplo completo para ejecutar con el código anterior.
* Escribe este codigo en el evento InteractiveChange
LOCAL lnUltimaTecla, lcMostrarValor,lcUltimoValorMostrado, ;
lnUltimaSeleccion, lnSeleccionados
lnUltimaTecla = LASTKEY()
lcUltimoValorMostrado = ""
lnUltimaSeleccion = 0
lnSeleccionados = 0
IF (lnUltimaTecla >= 32 AND lnUltimaTecla <= 126)
IF THIS.SELSTART >= 1
lcMostrarValor = SUBSTR(THIS.DISPLAYVALUE,1,THIS.SELSTART-1)+(CHR(lnUltimaTecla))
ELSE
lcMostrarValor = (CHR(lnUltimaTecla))+ALLT(THIS.DISPLAYVALUE)
ENDIF
IF EMPTY(lcMostrarValor)
lcMostrarValor = ALLT(CHR(lnUltimaTecla))
ENDIF
FOR i = 1 TO THIS.LISTCOUNT
IF UPPER(lcMostrarValor) = UPPER(SUBSTR(THIS.LIST(i),1,LEN(lcMostrarValor)))
THIS.DISPLAYVALUE = THIS.LIST(i)
IF LEN(ALLT(THIS.DISPLAYVALUE)) > LEN(lcMostrarValor)
THIS.SELSTART = LEN(lcMostrarValor)
THIS.SELLENGTH = LEN(ALLT(THIS.DISPLAYVALUE))-LEN(lcMostrarValor)
ENDIF
lcUltimoValorMostrado = THIS.DISPLAYVALUE
lnUltimaSeleccion = THIS.SELSTART
lnSeleccionados = THIS.SELLENGTH
RETURN
ENDIF
ENDFOR
THIS.DISPLAYVALUE = lcUltimoValorMostrado
THIS.SELSTART = lnUltimaSeleccion
THIS.SELLENGTH = lnSeleccionados
ENDIF
Oscar Arley Yepes AristizabalNota del editor: A continuación un ejemplo completo para ejecutar con el código anterior.
PUBLIC oMiFormulario
oMiFormulario=NEWOBJECT("MiFormulario")
oMiFormulario.SHOW
RETURN
*--------------------------------
DEFINE CLASS MiFormulario AS FORM
DOCREATE = .T.
CAPTION = "Autocompletar en ComboBox"
NAME = "frmAutocompletar"
ADD OBJECT combo1 AS COMBOBOX WITH ;
FONTBOLD = .T., ;
FONTSIZE = 12, ;
ROWSOURCETYPE = 1, ;
ROWSOURCE = "ALICIA,AMIRA,ANA,ELENA,ESTELA," + ;
"ESTHER,MARCELA,MARIA,MARTA," + ;
"MARTINA,MERCEDES,MIRTA,MONICA", ;
HEIGHT = 24, ;
LEFT = 24, ;
TOP = 24, ;
WIDTH = 240, ;
NAME = "Combo1"
PROCEDURE combo1.INTERACTIVECHANGE
LOCAL lnUltimaTecla, lcMostrarValor,lcUltimoValorMostrado, ;
lnUltimaSeleccion, lnSeleccionados
lnUltimaTecla = LASTKEY()
lcUltimoValorMostrado = ""
lnUltimaSeleccion = 0
lnSeleccionados = 0
IF (lnUltimaTecla >= 32 AND lnUltimaTecla <= 126)
IF THIS.SELSTART >= 1
lcMostrarValor = SUBSTR(THIS.DISPLAYVALUE,1,THIS.SELSTART-1)+(CHR(lnUltimaTecla))
ELSE
lcMostrarValor = (CHR(lnUltimaTecla))+ALLT(THIS.DISPLAYVALUE)
ENDIF
IF EMPTY(lcMostrarValor)
lcMostrarValor = ALLT(CHR(lnUltimaTecla))
ENDIF
FOR i = 1 TO THIS.LISTCOUNT
IF UPPER(lcMostrarValor) = UPPER(SUBSTR(THIS.LIST(i),1,LEN(lcMostrarValor)))
THIS.DISPLAYVALUE = THIS.LIST(i)
IF LEN(ALLT(THIS.DISPLAYVALUE)) > LEN(lcMostrarValor)
THIS.SELSTART = LEN(lcMostrarValor)
THIS.SELLENGTH = LEN(ALLT(THIS.DISPLAYVALUE))-LEN(lcMostrarValor)
ENDIF
lcUltimoValorMostrado = THIS.DISPLAYVALUE
lnUltimaSeleccion = THIS.SELSTART
lnSeleccionados = THIS.SELLENGTH
RETURN
ENDIF
ENDFOR
THIS.DISPLAYVALUE = lcUltimoValorMostrado
THIS.SELSTART = lnUltimaSeleccion
THIS.SELLENGTH = lnSeleccionados
ENDIF
ENDPROC
ENDDEFINE
*--------------------------------
Suscribirse a:
Entradas
(
Atom
)