FCLOSE()
Cierra un fichero binario abierto y escribe memorias intermedias del DOS en disco ───────────────────────────────────── Sintaxis FCLOSE() --> lError Argumentos es el manejador de fichero obtenido previamente de FOPEN() o FCREATE(). Devuelve FCLOSE() devuelve falso (.F.) si se ha producido un error mientras estaba escribiendo; de lo contrario, devuelve verdadero (.T.). Descripción FCLOSE() es una función de fichero de bajo nivel que cierra ficheros binarios y fuerza a que las memorias intermedias asociadas del DOS se graben en disco. Si la operación falla, FCLOSE() devuelve falso (.F.). FERROR() puede utilizarse para determinar el motivo del fallo. Por ejemplo, si intenta utilizar FCLOSE() con un manejador no válido devuelve falso (.F.) y FERROR() devuelve el error 6 de DOS, manejador no válido. Consulte FERROR() para obtener una lista completa de números de errores. ¡Advertencia! Esta función permite el acceso de bajo nivel a los ficheros y dispositivos del DOS. Debe utilizarse con gran precaución y requiere un conocimiento profundo del sistema operativo. Ejemplos n Este ejemplo utiliza FCLOSE() para cerrar un fichero binario que se ha creado recientemente y muestra un mensaje de error si falla el proceso de cierre: #include "Fileio.ch" // nManejador := FCREATE("Fichprueba", FC_NORMAL) IF !FCLOSE(nManejador) ? "Error cerrando el fichero, error número: ", FERROR() ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
FCOUNT()
Devuelve el número de campos del fichero (.dbf) actual ───────────────────────────────── Sintaxis FCOUNT() --> nCampos Devuelve FCOUNT() devuelve el número de campos del fichero de base de datos en el área de trabajo actual como un valor numérico entero. Si no hay ningún fichero de base de datos abierto, FCOUNT() devuelve cero. Descripción FCOUNT() es una función de base de datos. Es útil en aplicaciones que contienen programas independientes de los datos que pueden funcionar con cualquier fichero de base de datos. Estos incluyen programas generalizados de importación/exportación y de informes. Normalmente, debe utilizarse FCOUNT() para establecer el límite superior de un bucle FOR...NEXT o DO WHILE que procesa un campo cada vez. Por defecto, FCOUNT() funciona en el área de trabajo seleccionada actualmente. Ejemplos n Este ejemplo ilustra FCOUNT(), devolviendo el número de campos del área de trabajo actual y de una no seleccionada: USE Ventas NEW USE Cliente NEW ? FCOUNT() // Resultado: 5 ? Ventas->(FCOUNT()) // Resultado: 8 n Este ejemplo utiliza FCOUNT() para declarar una matriz con información de campo: LOCAL aCampos := ARRAY(FCOUNT()) AFIELDS(aCampos) n Este ejemplo utiliza FCOUNT() como límite superior de un bucle FOR que procesa la lista de los campos del área de trabajo actual: LOCAL nCampo USE Ventas NEW FOR nCampo := 1 TO FCOUNT() ? FIELD(nCampo) NEXT Ficheros: La biblioteca asociada es CLIPPER.LIB.
FCREATE()
Crea y/o trunca un fichero binario a longitud cero ──────────────────────────────────────── Sintaxis FCREATE(, []) --> nManejador Argumentos es el nombre del fichero que va a crearse. Si el fichero ya existe, su longitud se trunca a cero sin aviso previo. es uno de los atributos de fichero binario que se muestran en la tabla siguiente. Si se omite este argumento, el valor por defecto es cero. Atributos de Fichero Binario ──────────────────────────────────────────────────────────────────────── Valor Fileio.ch Atributo Descripción ──────────────────────────────────────────────────────────────────────── 0 FC_NORMAL Normal Crea un fichero de lectura/escritura normal (por defecto) 1 FC_READONLY Sólo lectura Crea un fichero de sólo lectura 2 FC_HIDDEN Oculto Crea un fichero oculto 4 FC_SYSTEM Sistema Crea un fichero de sistema ──────────────────────────────────────────────────────────────────────── Devuelve FCREATE() devuelve el número de manejador de fichero de DOS del nuevo fichero binario en el rango 0-65.535. Si se produce un error, FCREATE() devuelve -1 y FERROR() se establece de forma que indique un código de error. Descripción FCREATE() es una función de fichero de bajo nivel que crea un nuevo fichero o abre y trunca uno existente. Si no existe, se crea y se abre para escritura. Si existe y puede abrirse para escritura, se trunca a una longitud de cero. Si no puede abrirse para escritura, FCREATE() devuelve -1 y FERROR() devuelve el valor de error apropiado. Cuando FCREATE() crea un nuevo fichero de forma satisfactoria, éste se deja abierto en modo compartido compatible y en el de acceso de lectura/escritura. El atributo de fichero especificado por el argumento se aplica al nuevo fichero cuando se cierra, permitiendo la escritura en un fichero recién creado de sólo lectura. Si desea obtener una lista de modos de acceso, consulte FOPEN(). Puesto que se requiere un manejador de ficheros para identificar un fichero abierto para otras funciones de fichero, el valor de retorno de FCREATE() se asigna siempre a una variable para su utilización posterior. Al igual que otras funciones de fichero, FCREATE() no utiliza los valores SET DEFAULT o SET PATH para su operación. En su lugar, escribe en el directorio actual del DOS a menos que se establezca una vía de forma explícita. ¡Advertencia! Esta función permite el acceso de bajo nivel a los ficheros y dispositivos del DOS. Debe utilizarse con gran precaución y requiere un conocimiento profundo del sistema operativo. Ejemplos n En este ejemplo se crea un fichero llamado Fichprueba y lo abre para lectura y escritura: #include "Fileio.ch" // IF (nManejador := FCREATE("Fichprueba", FC_NORMAL)) == -1 ? "No se puede crear el fichero:", FERROR() BREAK ELSE FWRITE(nManejador, "Hola a todos") FCLOSE(nManejador) ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB, el fichero de cabecera asociado es Fileio.ch.
FERASE()
Borra un fichero del disco ─────────────────────────────── Sintaxis FERASE() --> nExito Argumentos es el nombre del fichero que debe borrarse del disco incluyendo la extensión, opcionalmente precedido por una especificación de unidad y/o vía. Devuelve FERASE() devuelve -1 si la operación falla y cero si es satisfactoria. En el caso de que se produzca un fallo, puede utilizarse FERROR() para determinar la naturaleza del error. Descripción FERASE() es una función de fichero que borra un fichero especificado del disco. FERASE() es igual que el mandato ERASE, pero devuelve un valor y puede especificarse dentro de una expresión. Cuando se llama a FERASE(), se borra del disco únicamente si se encuentra en el directorio del DOS actual o en el directorio especificado, de forma explícita, como parte del nombre del fichero. Al igual que otras funciones de fichero y mandatos, FERASE() no utiliza los valores de SET DEFAULT ni SET PATH para localizar . ¡Advertencia! Los ficheros deben cerrarse antes de borrarlos con FERASE(). Ejemplos n En este ejemplo se borra un conjunto de ficheros que coinciden con un patrón comodín: #include "Directry.ch" AEVAL(DIRECTORY("*.BAK"), { |aFichero| ; FERASE(aFichero[F_NAME]) }) n En este ejemplo se borra un fichero y se muestra un mensaje si falla la operación: IF FERASE("Fichero.txt") == -1 ? "Error de borrado de archivo:", FERROR() BREAK ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
FERROR()
Comprueba si existen errores después de una operación de fichero binario ─────────────────────────────── Sintaxis FERROR() --> nCódigoError Devuelve FERROR() devuelve el error del DOS de la última operación de fichero como un valor numérico entero. Si no hay ningún error, FERROR() devuelve cero. Valores de Retorno de FERROR() ──────────────────────────────────────────────────────────────────────── Error Significado ──────────────────────────────────────────────────────────────────────── 0 Satisfactorio 2 Fichero no encontrado 3 Vía no encontrada 4 Demasiados ficheros abiertos 5 Acceso denegado 6 Manejador no válido 8 Memoria insuficiente 15 Unidad especificada no válida 19 Ha intentado escribir en un disco protegido contra escritura 21 Unidad no preparada 23 Error CRC de datos 29 Fallo de escritura 30 Fallo de lectura 32 Violación de compartición 33 Violación de bloqueo ──────────────────────────────────────────────────────────────────────── Descripción FERROR() es una función de fichero de bajo nivel que indica un error del DOS después de que se haya utilizado una función de fichero. Estas funciones incluyen FCLOSE(), FCREATE(), FERASE(), FOPEN(), FREAD(), FREADSTR() y FRENAME(). FERROR() retiene su valor hasta la siguiente ejecución de una función de fichero. ¡Advertencia! Esta función permite el acceso de bajo nivel a los ficheros y dispositivos del DOS. Debe utilizarse con gran precaución y requiere un conocimiento profundo del sistema operativo Ejemplos n Este ejemplo comprueba FERROR() después de crear un fichero binario y muestra un mensaje de error si falla la creación: #include "Fileio.ch" // nManejador := FCREATE("Temp.txt", FC_NORMAL) IF FERROR() != 0 ? "No se puede crear el fichero, error DOS ", FERROR() ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
FIELDBLOCK()
Devuelve un bloque de código de asignación/lectura de un campo determinado ────────────────────────── Sintaxis FIELDBLOCK() --> bBloqueCampo Argumentos es el nombre del campo al que hará referencia el bloque de asignación/lectura. Devuelve FIELDBLOCK() devuelve un bloque de código que, cuando se evalúa, asigna o lee el valor del campo determinado. Si no existe en el área de directorio actual, FIELDBLOCK() devuelve NIL. Descripción FIELDBLOCK() es una función de base de datos que crea un bloque de código. Cuando se ejecuta con un argumento, el bloque de código creado mediante esta función asigna el valor del argumento a . Cuando se ejecuta sin un argumento, el bloque de código recupera el valor de . Observe que es posible que la variable de campo especificada no exista cuando se cree el bloque de código, pero debe existir antes de que éste se ejecute. Notas n Area de trabajo: El bloque de código devuelto por FIELDBLOCK() asigna o recupera el valor del campo especificado en cualquier área de trabajo en la que esté actualmente cuando se ejecute el bloque. Por ejemplo, las áreas de trabajo 1 y 2 determinadas, contienen ambas el campo NomC: SELECT 1 NomC := "Maribel" SELECT 2 NomC := "Sonia" bNomC := FIELDBLOCK("NomC") SELECT 1 ? EVAL(bNomC) // Resultado: "Maribel" SELECT 2 ? EVAL(bNomC) // Resultado: "Sonia" La función FIELDWBLOCK() proporciona un bloque de asignación/lectura para un campo en un área de trabajo específica. Ejemplos n Este ejemplo compara FIELDBLOCK() con un bloque de código creado utilizando el operador de macroexpresiones. Observe que utilizando FIELDBLOCK() evita los problemas de velocidad y tamaño asociados con el citado operador: // Bloque de asignación/lectura definido por medio del // operador de macroexpresiones bAsilec := &( "{ |ValorAsig| IF( ValorAsig == NIL,; NomC, NomC := ValorAsig ) }" ) // Bloque de asignación/lectura definido por medio de // FIELDBLOCK() // bAsilec creado aquí es el equivalente // funcional del bAsilec anterior bAsilec := FIELDBLOCK("NomC") Ficheros: La biblioteca asociada es CLIPPER.LIB.
FIELDGET()
Obtiene el valor de un campo a partir de su posición en la estructura de la base de datos ──────────────────────────────────── Sintaxis FIELDGET() --> ValorCampo Argumentos es la posición ordinal del campo en la estructura de registro para el área de trabajo actual. Devuelve FIELDGET() devuelve el valor del campo especificado. Si no corresponde a la posición de ningún campo del fichero de base de datos actual, FIELDGET() devuelve NIL. Descripción FIELDGET() es una función de base de datos que obtiene el valor de un campo utilizando su posición dentro de la estructura del fichero de la base de datos en lugar de su nombre de campo. Dentro de las funciones genéricas de servicio de base de datos esto permite, entre otras cosas, recuperar los valores de campos sin utilizar el operador de macroexpresiones. Ejemplos n Este ejemplo compara FIELDGET() con el código funcionalmente equivalente que utiliza el operador de macroexpresiones para obtener el valor de un campo: LOCAL nCampo := 1, NomC, ValC USE Cliente NEW // // Usando el operador de macroexpresiones NomC := FIELD( nCampo ) // Obtener el nombre // del campo ValC := &NomC // Obtener el valor // del campo // Usando FIELDGET() ValC := FIELDGET( nCampo ) // Obtener el valor // del campo Ficheros: La biblioteca asociada es CLIPPER.LIB.
FIELDNAME()/FIELD()
Devuelve un nombre de campo del fichero (.dbf) actual ────────────────────────────────── Sintaxis FIELDNAME/FIELD() --> cNombreCampo Argumentos es la posición de un campo en la estructura del fichero de base de datos. Devuelve FIELDNAME() devuelve el nombre del campo especificado como una cadena de caracteres. Si no corresponde con un campo existente en el fichero de base de datos actual o si no se abre ningún fichero de base de datos en el área de trabajo actual, FIELDNAME() devuelve una cadena nula (""). Descripción FIELDNAME() es una función de base de datos que devuelve un nombre de campo utilizando un índice en la posición del nombre de campo en la estructura de base de datos. Utilícelo en aplicaciones independientes de los datos donde el nombre de campo es desconocido. Si requiere información de más de un campo, utilice AFIELDS() para crear una matriz de información de campos o COPY STRUCTURE EXTENDED para crear una base de datos de información de campos. Si necesita información adicional sobre estructuras de ficheros de base de datos, utilice TYPE() y LEN(). Para obtener el número de posiciones decimales de un campo numérico, utilice la expresión siguiente: LEN(SUBSTR(STR(), RAT(".", ; STR()) + 1)) Por defecto, FIELDNAME() funciona en el área de trabajo seleccionada actualmente, tal como se muestra en el ejemplo siguiente. Ejemplos n En estos ejemplos se ilutra FIELDNAME() utilizado con otras funciones: USE Ventas ? FIELDNAME(1) // Resultado: SUCURSAL ? FCOUNT() // Resultado: 5 ? LEN(FIELDNAME(0)) // Resultado: 0 ? LEN(FIELDNAME(40)) // Resultado: 0 n En este ejemplo se utiliza FIELDNAME() para listar el nombre y tipo de cada campo de Cliente.dbf: USE Cliente NEW FOR nCampo := 1 TO FCOUNT() ? PADR(FIELDNAME(nCampo), 10),; VALTYPE(&(FIELDNAME(nCampo))) NEXT n En este ejemplo se accede a campos en áreas de trabajo no seleccionadas, utilizando expresiones de alias: USE Ventas NEW USE Cliente NEW USE Facturas NEW // ? Ventas->(FIELDNAME(1)) // Resultado: NUMVENTA ? Cliente->(FIELDNAME(1)) // Resultado: NUMCLIE Ficheros: La biblioteca asociada es CLIPPER.LIB.
FIELDPOS()
Devuelve la posición de un campo en un área de trabajo ────────────────────────────────────── Sintaxis FIELDPOS() --> nPosCampo Argumentos es el nombre de un campo en el área de trabajo actual o especificada. Devuelve FIELDPOS() devuelve la posición del campo especificado dentro de la lista de campos asociados con el área de trabajo actual o especificada. Si el área de trabajo actual no tiene ningún campo con el nombre especificado, FIELDPOS() devuelve cero. Descripción FIELDPOS() es una función de base de datos que realiza el proceso inverso de la función FIELDNAME(). FIELDPOS() se utiliza frecuentemente junto con las funciones FIELDPUT() y FIELDGET(). FIELDPOS() devuelve los nombres de campos en cualquier área de trabajo no seleccionada, haciendo referencia a la función por medio de una expresión con alias. Consulte el ejemplo que se muestra más adelante. Ejemplos n En este ejemplo se muestra una especificación típica de la función FIELDPOS(): USE Cliente NEW ? FIELDPOS("Nombre") // Resultado: 1 ? FIELDGET(FIELDPOS("Nombre")) // Resultado: Sonia n En este ejemplo se utiliza FIELDPOS() para devolver la posición de un campo especificado en un área de trabajo no seleccionada: USE Cliente NEW USE Facturas NEW ? Cliente->(FIELDPOS("Nombre")) // Resultado: 1 ? Cliente->(FIELDGET(FIELDPOS("Nombre"))) // Resultado: Sonia Ficheros: La biblioteca asociada es CLIPPER.LIB.
FIELDPUT()
Establece el valor de una variable de campo a partir de su posición en la estructura de la base de datos ────────────────────────────────────── Sintaxis FIELDPUT(, ) --> ValorAsignado Argumentos es la posición ordinal del campo en el fichero de base de datos actual. es el valor que debe asignarse al campo dado. El tipo de datos de esta expresión debe coincidir con el tipo de datos de la variable de campo designada. Devuelve FIELDPUT() devuelve el valor asignado al campo designado. Si no corresponde con la posición de ningún campo del fichero de base de datos actual, FIELDPUT() devuelve NIL. Descripción FIELDPUT() es una función de base de datos que asigna al campo en la posición ordinal en el área de trabajo actual. Esta función le permite establecer el valor de un campo utilizando su posición dentro de la estructura del fichero de base de datos en lugar de su nombre de campo. Dentro de las funciones genéricas de servicio de base de datos esto permite, entre otras cosas, seleccionar valores de campo sin tener que utilizar el operador de macroexpresiones. Ejemplos n En este ejemplo se compara FIELDPUT() con el código funcionalmente equivalente, que utiliza el operador de macroexpresiones para establecer el valor de un campo: // Usando el operador de macroexpresiones NomC := FIELD(nCampo) // Obtener nombre de campo FIELD->&NomC := ValC // Establecer valor de campo // Usando FIELDPUT() FIELDPUT(nCampo, ValC) // Establecer valor de campo Ficheros: La biblioteca asociada es CLIPPER.LIB.
FIELDWBLOCK()
Devuelve un bloque de código de asignación/lectura de un campo en un área de trabajo determinada ─────────────────────────────── Sintaxis FIELDWBLOCK(, ) --> bBloqueCampoT Argumentos es el nombre del campo especificado como una cadena de caracteres. es el número de área de trabajo donde reside el campo especificado. Devuelve FIELDWBLOCK() devuelve un bloque de código que, cuando se evalúa, asigna u obtiene el valor de en el área de trabajo designada por . Si no existe en el área de trabajo especificada, FIELDWBLOCK() devuelve NIL. Descripción FIELDWBLOCK() es una función de base de datos que crea un bloque de código. Cuando se evalúa el bloque de código con la función EVAL(), en primer lugar, selecciona el designada. Si se ha pasado un argumento, el bloque de código asigna el valor del argumento a . Si no se ha pasado ningún argumento, el bloque de código obtiene el valor de . El área de trabajo original se vuelve a seleccionar antes de que el bloque de código devuelva el control. Observe que es posible que no exista la variable de campo especificada cuando se cree el bloque de código, pero debe existir antes de que se ejecute. Notas n FIELDWBLOCK() es similar a FIELDBLOCK(), con la excepción de que FIELDWBLOCK() incorpora un área de trabajo fija en el bloque de asignación/lectura. Ejemplos n Este ejemplo compara FIELDWBLOCK() con un bloque de código creado utilizando el operador de macro. Observe que utilizando FIELDWBLOCK() se evitan los problemas de velocidad y tamaño asociados con el operador de macroexpresiones: // Bloque de asignación/lectura para el área de trabajo 1 // definido con el operador de macroexpresiones bAsilec := &( "{ |ValorAsig| IF( ValorAsig == NIL, ; 1->NomC, 1->NomC := ValorAsig ) }" ) // Bloque de asignación/lectura definido por medio de // FIELDWBLOCK() // bAsilec creado aquí es el equivalente // funcional del bAsilec anterior bAsilec := FIELDWBLOCK("NomC", 1) Ficheros: La biblioteca asociada es CLIPPER.LIB.
FILE()
Determina si existen ficheros en el directorio o vía por defecto de CA-Clipper ───────────────────────────────── Sintaxis FILE() --> lExiste Argumentos determina una especificación de fichero estándar que puede incluir caracteres comodín * y ?, así como una referencia de unidad y de vía. Las referencias explícitas a un fichero deben incluir también una extensión. Devuelve FILE() devuelve verdadero (.T.) si algún fichero coincide con el patrón ; de lo contrario, devuelve falso (.F.). Descripción FILE() es una función de entorno que determina si se ha localizado algún fichero que coincida con un patrón de especificación de fichero. FILE() busca el directorio especificado si se ha especificado una vía de forma explícita. Si no se ha especificado una vía, FILE() busca en el directorio por defecto de CA-Clipper y posteriormente, la vía de CA-Clipper. En ningún caso se busca en la vía del DOS. Observe también que FILE() no reconoce los ficheros ocultos o de sistema en su búsqueda. Ejemplos n En este ejemplo FILE() intenta localizar Ventas.dbf en otro directorio de CA-Clipper, que no sea el utilizado por defecto: ? FILE("Ventas.dbf") // Resultado: .F. ? FILE("\APPS\DBF\Ventas.dbf") // Resultado: .T. // SET PATH TO \APPS\DBF ? FILE("Ventas.dbf") // Resultado: .T. // SET PATH TO SET DEFAULT TO \APPS\DBF\ ? FILE("Ventas.dbf") // Resultado: .T. ? FILE("*.dbf") // Resultado: .T. Ficheros: La biblioteca asociada es CLIPPER.LIB.
FKLABEL()*
Devuelve un nombre de tecla de función ─────────────────────────────── Sintaxis FKLABEL() --> cEtiqTecla Devuelve FKLABEL() devuelve una cadena de caracteres que representa el nombre de la tecla de función especificada por el argumento numérico, . Si el argumento es menor que uno o mayor que 40, la función devuelve una cadena ("") nula. Descripción FKLABEL() es una función de compatibilidad que se utiliza para duplicar la función FKLABEL() en dBASE III PLUS. Como principio general, la utilización de esta función no es recomendable ni necesaria en CA-Clipper. Las teclas de función se etiquetan con Fn, donde n abarca de uno a 40 y corresponde directamente con el argumento FKLABEL(). Ficheros: La biblioteca asociada es EXTEND.LIB, el módulo fuente es SOURCE\SAMPLE\FKLABEL.PRG.
FKMAX()*
Devuelve el número de teclas de función como una constante ─────────────────────────────────────── Sintaxis FKMAX() --> nTeclasFunción Descripción FKMAX() es una función de compatibilidad que se utiliza para duplicar la función FKMAX() en dBASE III PLUS. Como principio general, la utilización de esta función no es recomendable ni necesaria en CA-Clipper. Simplemente, devuelve un valor constante igual a 40. Ficheros: La biblioteca asociada es EXTEND.LIB, el módulo fuente es SOURCE\SAMPLE\FKMAX.PRG.
FLOCK()
Bloquea un fichero de base de datos abierto en modo compartido ───────────────────────────────── Sintaxis FLOCK() --> lExito Devuelve FLOCK() devuelve verdadero (.T.) si el intento de bloquear un fichero de base de datos en uso en el área de trabajo actual es satisfactorio; de lo contrario, devuelve falso (.F.). Si desea obtener más información sobre el bloqueo de ficheros, consulte el capítulo Programación en Red en la guía Programación y Utilidades. Descripción FLOCK() es una función de base de datos que se utiliza en entornos de red para bloquear un fichero de base de datos abierto en modo compartido, evitando así que otros usuarios actualicen el fichero hasta que se libere el bloqueo. Los registros en el fichero bloqueado sólo están accesibles para operaciones de lectura. FLOCK() se relaciona con USE...EXCLUSIVE y RLOCK(). USE...EXCLUSIVE abre un fichero de base de datos, de forma que ningún otro usuario pueda abrir el mismo fichero al mismo tiempo y se trata del mecanismo de bloqueo más restrictivo de CA-Clipper. RLOCK() es el menos restrictivo e intenta situar un bloqueo de actualización en un registro compartido, impidiendo que otros usuarios actualicen el registro actual. FLOCK() representa un nivel de restricción medio. FLOCK() se utiliza en operaciones que acceden a la totalidad del fichero de base de datos. Normalmente, estos son mandatos que actualizan el fichero con un ámbito o una condición, como por ejemplo, DELETE o REPLACE ALL. A continuación, se muestra una lista de estos mandatos: Mandatos que requieren FLOCK() ──────────────────────────────────────────────────────────────────────── Mandato Modo ──────────────────────────────────────────────────────────────────────── APPEND FROM FLOCK() o USE...EXCLUSIVE DELETE (varios registros) FLOCK() o USE...EXCLUSIVE RECALL (varios registros) FLOCK() o USE...EXCLUSIVE REPLACE (varios registros) FLOCK() o USE...EXCLUSIVE UPDATE ON FLOCK() o USE...EXCLUSIVE ──────────────────────────────────────────────────────────────────────── Por cada llamada de FLOCK(), existe un intento de bloquear el fichero de base de datos y el resultado se devuelve como un valor lógico. Un bloqueo de fichero falla si otro usuario tiene actualmente un bloqueo de fichero o de registro para el mismo fichero de base de datos o bien, si otro usuario está usando la base de datos en modo exclusivo. Si FLOCK() es satisfactorio, el bloqueo de fichero permanece hasta que efectúe UNLOCK, CLOSE DATABASE o RLOCK(). Por defecto, FLOCK() funciona en el área de trabajo seleccionada, tal como se muestra en el ejemplo siguiente. Notas n SET RELATION: CA-Clipper no bloquea automáticamente todas las áreas de trabajo en la cadena de relación cuando bloquea el área de trabajo actual y el uso de la función UNLOCK no es efectivo en áreas de trabajo relacionadas. Ejemplos n Este ejemplo utiliza FLOCK() para una actualización por lotes de los precios de Inventar.dbf: USE Inventar NEW IF FLOCK() REPLACE ALL Inventar->Precio WITH ; Inventar->Precio * 1.1 ELSE ? "Fichero no disponible" ENDIF n Este ejemplo utiliza una expresión con alias para intentar un bloqueo de fichero en un área de trabajo no seleccionada: USE Ventas NEW USE Cliente NEW // IF !Ventas->(FLOCK()) ? "Ventas está siendo usado por otro usuario" ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
FOPEN()
Abre un fichero binario ──────────────────────────────────── Sintaxis FOPEN(, []) --> nManejador Argumentos es el nombre del fichero que se va a abrir incluyendo la vía, si existe. es el modo de apertura del DOS solicitado, que indica cómo puede accederse al fichero abierto. El modo de apertura se compone de elementos de los dos tipos de modos que se describen en las tablas que aparecen más adelante. Si únicamente se utiliza el Modo de Acceso, el fichero se abre como no compartido. El modo de apertura por defecto es cero, lo que indica no compartido y sólo de lectura. Modos de Acceso FOPEN() ──────────────────────────────────────────────────────────────────────── Modo Fileio.ch Operación ──────────────────────────────────────────────────────────────────────── 0 FO_READ Abierto para lectura (por defecto) 1 FO_WRITE Abierto para escritura 2 FO_READWRITE Abierto para lectura o escritura ──────────────────────────────────────────────────────────────────────── Los Modos de Utilización Compartida determinan cómo pueden acceder otros procesos al fichero.Los Modos de Acceso en combinación (+) con los modos Compartidos determinan la accesibilidad del fichero en un entorno de red. Modos de Utilización Compartida FOPEN() ──────────────────────────────────────────────────────────────────────── Modo Fileio.ch Operación ──────────────────────────────────────────────────────────────────────── 0 FO_COMPAT Modo de compatibilidad (por defecto) 16 FO_EXCLUSIVE Uso exclusivo 32 FO_DENYWRITE Evita que otros escriban 48 FO_DENYREAD Evita que otros lean 64 FO_DENYNONE Permite que otros lean o escriban 64 FO_SHARED Igual que FO_DENYNONE ──────────────────────────────────────────────────────────────────────── Devuelve FOPEN() devuelve el manejador del fichero abierto en el rango 0-65.535. Si se produce un error, FOPEN() devuelve -1. Descripción FOPEN() es una función de fichero de bajo nivel, que abre un fichero binario existente para lectura y escritura, según el argumento . Siempre que exista un error de apertura, FERROR() devuelve el número de error del DOS. Por ejemplo, si el fichero no existe, FOPEN() devuelve -1 y FERROR() devuelve 2 para indicar que no se ha localizado el fichero. Consulte FERROR() para obtener una lista completa de números de error. Si el fichero especificado se abre de forma satisfactoria, el valor devuelto es el manejador del DOS para el fichero. Este valor es similar a un alias en el sistema de base de datos y es necesario para identificar el fichero abierto para otras funciones de fichero. Por lo tanto, es importante asignar el valor de retorno a una variable para su utilización posterior, tal como se muestra en el ejemplo que aparece más adelante. ¡Advertencia! Esta función permite el acceso de bajo nivel a los ficheros y dispositivos del DOS. Debe utilizarse con gran precaución y requiere un conocimiento profundo del sistema operativo. Notas n Acceso a ficheros en otros directorios: FOPEN() no actúa según los valores de SET DEFAULT ni SET PATH. En su lugar, busca en el directorio y vía actual del DOS, a menos que se establezca una vía, de forma explícita, como parte del argumento . Ejemplos n Este ejemplo utiliza FOPEN() para abrir un fichero con estado compartible de lectura/escritura y muestra un mensaje de error si falla la apertura: #include "Fileio.ch" // nManejador := FOPEN("Temp.txt", FO_READWRITE + FO_SHARED) IF FERROR() != 0 ? "No se puede abrir el fichero, error DOS", FERROR() BREAK ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB, el fichero de cabecera asociado es Fileio.ch.
FOUND()
Determina si se encontró el registro buscado en la anterior operación de búsqueda ──────────────────────────────── Sintaxis FOUND() --> lExito Devuelve FOUND() devuelve verdadero (.T.) si el último mandato de búsqueda ha sido satisfactorio; de lo contrario, devuelve falso (.F.). Descripción FOUND() es una función de base de datos que determina si una operación de búsqueda (es decir, FIND, LOCATE, CONTINUE, SEEK o SET RELATION) ha sido satisfactoria. Cuando se ejecuta uno de estos mandatos, FOUND() devuelve verdadero (.T.) si encuentra una coincidencia; de lo contrario, devuelve falso (.F.). Si el mandato de búsqueda es LOCATE o CONTINUE, una coincidencia es el siguiente registro que cumpla con el ámbito y la condición. Si el mandato de búsqueda es FIND, SEEK o SET RELATION, una coincidencia es la primera clave del índice de control que es igual al argumento de búsqueda. Si el valor clave es igual al argumento de búsqueda, FOUND() devuelve verdadero (.T.); de lo contrario, es falso (.F.).El valor de FOUND() se retiene hasta que se ejecuta otro mandato de movimiento de registro. A menos que sea otro mandato de búsqueda,FOUND() se establece automáticamente en falso (.F.). Cada área de trabajo tiene un valor FOUND(). Esto significa que si un área de trabajo tiene una relación establecida con un área de trabajo secundaria, la consulta de FOUND() en el área secundaria devuelve verdadero (.T.) si encuentra una coincidencia. Por defecto, FOUND() actúa en el área de trabajo seleccionada actualmente. Puede hacer que funcione en un área de trabajo no seleccionada especificándola dentro de una expresión de alias (consulte el ejemplo siguiente).FOUND() devuelve falso (.F.) si no hay ninguna base de datos abierta en el área de trabajo actual. Ejemplos n En este ejemplo se ilustra el comportamiento de FOUND() después de un mandato de movimiento de registro: USE Ventas INDEX Ventas ? INDEXKEY(0) // Resultado: VENDEDOR SEEK "1000" ? FOUND() // Resultado: .F. SEEK "100" ? FOUND() // Resultado: .T. SKIP ? FOUND() // Resultado: .F. n En este ejemplo se comprueba un valor FOUND() en un área de trabajo no seleccionada utilizando una expresión de alias: USE Ventas INDEX Ventas NEW USE Cliente INDEX Cliente NEW SET RELATION TO Numclien INTO Ventas // SEEK "Casanova" ? FOUND(), Ventas->(FOUND()) n Este fragmento de código procesa todos los registros de Cliente con el valor clave "Casanova" utilizando FOUND() para determinar cuándo cambian los valores clave: USE Cliente INDEX Cliente NEW SEEK "Casanova" DO WHILE FOUND() . . . SKIP LOCATE REST WHILE Nombre == "Casanova" ENDDO Ficheros: La biblioteca asociada es CLIPPER.LIB.
FREAD()
Lee caracteres de un fichero binario en una variable de memoria intermedia ──────────────────────────────────── Sintaxis FREAD(, @, ) --> nBytes Argumentos es el manejador de fichero que se obtiene de FOPEN(), FCREATE() o predefinido por el DOS. es el nombre de una variable de carácter inicializada y existente que se utiliza para almacenar datos leídos de un fichero especificado. La longitud de esta variable debe ser mayor que o igual a . debe pasarse por referencia y, por lo tanto, debe ir precedida por el operador pasar por referencia (@). es el número de bytes que deben leerse en la memoria intermedia. Devuelve FREAD() devuelve el número de bytes leídos satisfactoriamente como un valor numérico entero. Un valor de retorno menor que o cero indica el final del fichero o cualquier otro error de lectura. Descripción FREAD() es una función de fichero de bajo nivel que lee caracteres de un fichero binario en una variable de caracteres existente. Lee el fichero comenzando en la posición del puntero de fichero del DOS, avanzando dicho puntero el número de bytes leídos. Se leen todos los caracteres incluyendo los de control, nulos y los de código ASCII superior a 127. FREAD() es similar en ciertos aspectos a FREADSTR() y FSEEK(). FREADSTR() lee un número especificado de bytes de un fichero hasta el carácter nulo siguiente (CHR(0)). FSEEK() desplaza el puntero del fichero sin leer. Si surge un error durante la lectura del fichero, FERROR() devuelve el número de error del DOS. Consulte FERROR() para obtener una lista de números de error. ¡Advertencia! Esta función permite el acceso de bajo nivel a los ficheros y dispositivos del DOS. Debe utilizarse con gran precaución y requiere un conocimiento profundo del sistema operativo. Ejemplos n Este ejemplo utiliza FREAD() después de abrir un fichero, de forma satisfactoria, para leer 128 bytes en un área de memoria intermedia: #define BLOQUE_F 128 // cMemInter := SPACE(BLOQUE_F) nManejador := FOPEN("Temp.txt") // IF FERROR() != 0 ? "Error de apertura de fichero:", FERROR() ELSE IF FREAD(nManejador, @cMemInter, BLOQUE_F) <> BLOQUE_F ? "Error de lectura en Temp.txt" ENDIF FCLOSE(nManejador) ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
FREADSTR()
Lee caracteres de un fichero binario ────────────────────────────────────────── Sintaxis FREADSTR(, ) --> cCadena Argumentos es el manejador de ficheros obtenido de FOPEN(), FCREATE() o predefinido por el DOS. es el número de bytes que deben leerse, comenzando en la posición del puntero del fichero del DOS actual. Devuelve FREADSTR() devuelve una cadena de caracteres de un máximo de 65.535 (64K) bytes. Un valor de retorno nulo ("") indica un error o el final del fichero. Descripción FREADSTR() es una función de fichero de bajo nivel que lee caracteres de un fichero binario abierto que comienza en la posición de puntero del fichero del DOS actual. Los caracteres se leen hasta o hasta que se encuentra un carácter nulo (CHR(0)). Se leen todos los caracteres incluyendo los de control, con la excepción de CHR(0). El puntero del fichero avanza . Si este número es mayor que el número de bytes desde la posición del puntero hasta el final del fichero, el puntero se sitúa en el último byte del fichero. ¡Advertencia! Esta función permite el acceso de bajo nivel a los ficheros y dispositivos del DOS. Debe utilizarse con gran precaución y requiere un conocimiento profundo del sistema operativo. Ejemplos n El ejemplo de la página siguiente muestra los valores ASCII de los primeros 16 bytes de un fichero de texto: #include "Fileio.ch" // nManejador := FOPEN("Nuevo.txt", FC_NORMAL) IF FERROR() != 0 ? "Error de apertura de fichero:", FERROR() ELSE cCadena := FREADSTR(nManejador, 16) ? cCadena FCLOSE(nManejador) ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
FRENAME()
Cambia el nombre de un fichero ───────────────────────────────── Sintaxis FRENAME(, ) --> nExito Argumentos es el nombre del fichero que debe renombrarse, incluyendo su extensión. También puede incluirse la letra de la unidad y/o nombre de vía, como parte del nombre del fichero. es el nuevo nombre del fichero, incluyendo su extensión. También puede incluirse la letra de la unidad y/o nombre de vía como parte del nombre. Devuelve FRENAME() devuelve -1 si la operación falla y cero si es satisfactoria. En el caso de que se produzca un fallo, puede utilizarse FERROR() para determinar la naturaleza del error. Descripción FRENAME() es una función de fichero que cambia el nombre de un fichero especificado por uno nuevo y actúa de forma idéntica al mandato RENAME. Cuando se llama FRENAME(), el sólo se renombra si está situado en el directorio del DOS actual o en la vía especificada.FRENAME() no utiliza los valores de SET DEFAULT o SET PATH para localizar . Si el directorio fuente es diferente del directorio destino, el fichero se desplaza al directorio destino. En el caso de que exista o esté abierto actualmente, FRENAME() falla y devuelve - 1, indicando que no ha realizado la acción designada. Con FERROR() puede determinarse la naturaleza del error. ¡Advertencia! Los ficheros deben cerrarse antes de renombrarlos. Si se intenta renombrar un fichero abierto pueden producirse resultados impredecibles. Cuando se renombra un fichero de base de datos, el fichero memo asociado (.dbt) también debe renombrarse. Si no lo hace de este modo, puede poner en peligro la integridad de sus bases de datos. Ejemplos n En este ejemplo se muestra cómo se renombra un fichero: IF FRENAME("FichAnt.txt", "NuevFich.txt") == -1 ? "Error de fichero:", FERROR() ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
FSEEK()
Sitúa el puntero de fichero binario en una nueva posición ───────────────────────────────── Sintaxis FSEEK(, , []) --> nPosición Argumentos es el manejador de ficheros obtenido de FOPEN(), FCREATE() o predefinido por el DOS. es el número de bytes que se va a desplazar el puntero del fichero desde la posición definida por . Puede ser un número positivo o negativo. Un número positivo desplaza el puntero hacia adelante y uno negativo lo desplaza hacia atrás en el fichero. define la situación inicial del puntero del fichero antes de que se ejecute FSEEK(). El valor por defecto es cero, representando el inicio del fichero. Si es el final del fichero, debe ser cero o negativo. Métodos para Desplazar el Puntero del Fichero ──────────────────────────────────────────────────────────────────────── Origen Fileio.ch Descripción ──────────────────────────────────────────────────────────────────────── 0 FS_SET Busca desde el principio del fichero 1 FS_RELATIVE Busca desde la posición actual del puntero 2 FS_END Busca desde el final del fichero ──────────────────────────────────────────────────────────────────────── Devuelve FSEEK() devuelve la nueva posición del puntero del fichero relativa al inicio del fichero (posición 0) como un valor numérico entero. Este valor es independiente de la posición original del puntero del fichero. Descripción FSEEK() es una función de fichero de bajo nivel que desplaza el puntero del fichero hacia adelante o hacia atrás en un fichero binario abierto sin leer realmente el contenido del fichero especificado. La posición inicial y desplazamiento se especifican como argumentos de función y se devuelve la nueva posición en el fichero. Independientemente de los argumentos de función especificados, el puntero del fichero no puede desplazarse de forma que exceda los límites del inicio o final del fichero. ¡Advertencia! Esta función permite el acceso de bajo nivel a ficheros y dispositivos del DOS. Debe utilizarse con gran precaución y requiere un conocimiento profundo del sistema operativo. Ejemplos n En este ejemplo se utiliza FSEEK() para determinar la longitud de un fichero buscando desde el final del mismo. Seguidamente, el puntero se restablece al inicio del fichero: #include "Fileio.ch" // // Abrir el fichero en modo de sólo lectura IF (nManejador := FOPEN("Temp.txt")) >= 0 // // Obtener la longitud del fichero nLongitud := FSEEK(nManejador, 0, FS_END) // // Restablecer la posición al comienzo del // fichero FSEEK(nManejador, 0) FCLOSE(nManejador) ELSE ? "Error de apertura de fichero:", FERROR() ENDIF n Esta pseudofunción sitúa el puntero del fichero en el último byte de un fichero binario: #define FinalFichero(nManejador); (FSEEK(nManejador, 0, FS_END)) n Esta pseudofunción sitúa el puntero del fichero en el primer byte de un fichero binario: #define InicioFichero(nManejador); (FSEEK(nManejador, 0)) n Esta pseudofunción informa de la posición actual del puntero del fichero en un fichero binario especificado: #define PosFichero(nManejador); (FSEEK(nManejador, 0, FS_RELATIVE)) Ficheros: La biblioteca asociada es CLIPPER.LIB, el fichero de cabecera asociado es Fileio.ch.
FWRITE()
Escribe en un fichero binario abierto ──────────────────────────────────── Sintaxis FWRITE(, , []) --> nBytesEscritos Argumentos es el manejador de ficheros obtenido de FOPEN(), FCREATE() o predefinido por el DOS. es la cadena de caracteres que debe escribirse en el fichero especificado. indica el número de bytes que debe escribirse, comenzando en la posición del puntero de fichero actual. Si se omite, se escribe todo el contenido de . Devuelve FWRITE() devuelve el número de bytes escritos como un valor numérico entero. Si el valor devuelto es igual a , la operación ha resultado satisfactoria. Si el valor de retorno es menor que o es cero, es debido a que el disco está lleno o se ha producido otro error. Descripción FWRITE() es una función de fichero de bajo nivel que escribe datos en un fichero binario abierto desde una memoria intermedia de cadena de caracteres. Puede escribir todo el contenido de la memoria intermedia o tan solo una parte. La escritura comienza en la posición actual del fichero y la función devuelve el número real de bytes escritos. Si FWRITE() produce una condición de error, puede utilizar FERROR() para determinar el error específico. ¡Advertencia! Esta función permite el acceso de bajo nivel a los ficheros y dispositivos del DOS. Debe utilizarse con gran precaución y requiere un profundo conocimiento del sistema operativo Ejemplos n En este ejemplo se copia el contenido de un fichero en otro: #include "Fileio.ch" #define BLOQUE_F 512 // cMemInter := SPACE(BLOQUE_F) nFichEnt := FOPEN("Temp.txt", FO_READ) nFichSal := FCREATE("NuevFich.txt", FC_NORMAL) lHecho := .F. // DO WHILE !lHecho nBytesLec := FREAD(nFichEnt, @cMemInter, BLOQUE_F) IF FWRITE(nFichSal, cMemInter, nBytesLec) < ; nBytesLec ? "Fallo de escritura: ", FERROR() lHecho := .T. ELSE lHecho := (nBytesLec == 0) ENDIF ENDDO // FCLOSE(nFichEnt) FCLOSE(nFichSal) Ficheros: La biblioteca asociada es CLIPPER.LIB.