3 de agosto de 2020

Agregar registro IFND en IntelliSense

El programa IFND_FoxCode.PRG agrega un registro "IFND" a nuestra tabla IntelliSense record que expandira en en un control IF Not Default().

En el editor de métodos o programa ingrese:

IFND{SPACE}

y este registro IntelliSense expadirá esto a:

IF NOT DODEFAULT()
   RETURN .F.
ENDIF
*
*  IFND_FoxCode.PRG
*  Agrega un registro "IFND" a nuestra tabla IntelliSense table para
*  que cuando ingrese:
*    IFND{SPACE}
*  esto se expanda a:
*    IF NOT DODEFAULT()
*      RETURN .F.
*    ENDIF
*
CLEAR ALL
CLOSE ALL
CLEAR
USE (_FOXCODE) IN 0 AGAIN ALIAS UpdateFoxCode
SELECT UpdateFoxCode
**************************************************
LOCATE FOR UPPER(ALLTRIM(Abbrev)) == "IFND"
**************************************************
IF NOT FOUND()
  APPEND BLANK
  REPLACE TYPE WITH "U", ;
    Abbrev WITH "IFND",;
    CASE WITH "U", ;
    SAVE WITH .T., ;
    Cmd WITH "{}", ;
    USER WITH "Mi registro IFND"
  ACTIVATE SCREEN
  ? PROGRAM() + " acaba de agregar el registro 'IFND'"
ENDIF
REPLACE DATA WITH ;
  "*  IF NOT DODEFAULT(), RETURN .F., ENDIF" + CHR(13) + CHR(10) + ;
  "LPARAMETERS oFoxcode" + CHR(13) + CHR(10) + ;
  "IF NOT oFoxcode.Location = 10" + CHR(13) + CHR(10) + ;
  [   RETURN "IFND"] + CHR(13) + CHR(10) + ;
  "ENDIF" + CHR(13) + CHR(10) + ;
  [oFoxcode.ValueType = "V"] + CHR(13) + CHR(10) + ;
  "TEXT TO myvar TEXTMERGE NOSHOW" + CHR(13) + CHR(10) + ;
  "IF NOT DODEFAULT()" + CHR(13) + CHR(10) + ;
  "  RETURN .F." + CHR(13) + CHR(10) + ;
  "ENDIF" + CHR(13) + CHR(10) + ;
  "ENDTEXT" + CHR(13) + CHR(10) + ;
  "RETURN myvar + chr(13) + [~]"
USE IN UpdateFoxCode
RETURN

VFP Tips & Tricks - Drew Speedie

20 de julio de 2020

ExecScript()

La nueva función ExecScript() en VFP 7.0 permite que usted ejecute una secuencia de código "al vuelo".

El ejemplo de abajo también hace uso de la nueva sintaxis TEXT TO para crear la cadena de comandos.

Simule esto es su código PRG o método:

*
* código normal del PRG o método aquí ...
* 

*
* cree una cadena de comandos "al vuelo" 
*
TEXT TO lcCode NOSHOW
LOCAL lcOutput,xx
lcOutput = SPACE(0)
FOR xx = 1 to 10
  lcOutput = lcOutput + ;
  "Line " + TRANSFORM(xx) + ;
  CHR(13) + CHR(10)
ENDFOR
RETURN lcOutput
ENDTEXT
*
* ejecute los comandos aquí 
*
LOCAL lcRetVal
lcRetVal = EXECSCRIPT(lcCode)
*
* continúe ejecutando el PRG o método... 
* 

Solamente tenga cuidado que ExecScript() es relativamente lento.

VFP Tips & Tricks - Drew Speedie

9 de julio de 2020

NULL en archivos CDX

NULL en archivos CDX

Artículo original: NULL in CDX files
http://www.foxpert.com/knowlbits_200708_4.htm
Autor: Christof Wollenhaupt
Traducido por: Ana María Bisbé York


VFP no guarda NULL en el campo. En su lugar, utiliza un campo oculto llamado _NULLFLAGS. Puede que usted se pregunte (bueno, yo no lo hice; pero puede que usted si) sobre cómo VFP puede crear un índice en una columna que contenga NULL, si NULL no se almacena como tal en el campo. La respuesta en realidad es muy sencilla. Un campo que contenga NULL, se guarda como una cadena vacía. Para distinguir valores NULL de campos que en verdad están vacíos, VFP agrega un guión bajo antes de cualquier dato que exista en el campo. Por tanto, en Northwind\Customers.CDX el índice sobre las ciudades contiene "_PARIS" en lugar de "PARIS"

¿Se da cuenta del efecto que esto provoca? Debido al carácter extra que agrega VFP, una expresión de índice sobre un campo NULL puede ser solamente de 239/119 caracteres de largo, en lugar de 240/120 que admiten los campos regulares.