DATE() Devuelve la fecha del sistema como un valor de fecha ------------------------------------------------------------------------------ Sintaxis DATE() --> fFechaSistema Devuelve DATE() devuelve la fecha del sistema como un valor de fecha. Descripción DATE() es una función de conversión que permite inicializar variables de memoria con la fecha actual, comparar otros valores de fecha con la fecha actual y ejecutar cálculos de fecha correspondientes a la fecha actual. El formato de visualización de fechas se controla con el mandato SET DATE. El formato por defecto es mm/dd/aa. Ejemplos . Estos ejemplos muestran diversos resultados de la utilización de la función DATE(): ? DATE() // Resultado: 09/01/90 ? DATE() + 30 // Resultado: 10/01/90 ? DATE() - 30 // Resultado: 08/02/90 fFecha := DATE() ? CMONTH(fFecha) // Resultado: Septiembre Ficheros: La biblioteca asociada es CLIPPER.LIB.
DAY() Devuelve el día del mes como un valor numérico ------------------------------------------------------------------------------ Sintaxis DAY(<fFecha>) --> nD.a Argumentos <fFecha> es el valor de fecha que se va a convertir. Devuelve DAY() devuelve un número comprendido entre 0 y 31, como valor numérico entero. Si el mes es febrero, se tienen en cuenta los a.os bisiestos. Si el argumento es el 29 de febrero y el a.o no es bisiesto, DAY() devuelve cero. Si el argumento de fecha es un valor vac.o, DAY() devuelve cero. Descripción DAY() es una función de conversión que sirve para convertir un valor de fecha en el día del mes. Esta función se utiliza con CMONTH() y YEAR() para dar formato a las fechas. Se utiliza también con frecuencia en diversos cálculos de fecha. Ejemplos . Estos ejemplos muestran diversos resultados de la utilización de la función DAY(): ? DATE() // Resultado: 09/01/90 ? DAY(DATE()) // Resultado: 1 ? DAY(DATE()) + 1 // Resultado: 2 ? DAY(CTOD("")) // Resultado: 0 . Este ejemplo utiliza DAY() con CMONTH() y YEAR() para dar formato a un valor de fecha: ? STR(DAY(DATE())) + "de" + CMONTH(DATE()) +; STR(YEAR(DATE())) // Resultado: // 15 de Junio de 1990 Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBAPPEND() Añade un nuevo registro ------------------------------------------------------------------------------ Sintaxis DBAPPEND() --> NIL Devuelve DBAPPEND() devuelve siempre NIL. Descripción DBAPPEND() a.ade un nuevo registro al fichero de base de datos (.dbf) utilizado en el área de trabajo actual. Si la inserci.n se realiza correctamente, se asigna a los campos del registro el valor vac.o correspondiente a su tipo de datos y el nuevo registro pasa a ser el registro actual. DBAPPEND() realiza la misma función que un mandato APPEND BLANK estándar. Si desea más información, consulte el mandato APPEND BLANK. Notas . Registros lógicos: DBAPPEND() no respeta la visibilidad l.gica; es decir, si el registro se a.ade satisfactoriamente, se convierte en el registro actual, independientemente de cualquier condición de índice o de filtro. . Entorno de red: En una base de datos utilizada en modo compartido en una red, DBAPPEND() bloquea autom.ticamente el nuevo registro. Si no puede bloquearse el registro, no se a.ade y se produce un error de ejecución recuperable. El manejador de errores por defecto de CA-Clipper trata el error, establece en verdadero el nuevo valor de NETERR() y continúa.la ejecución. Si desea m.s información, consulte el capítulo Programaci.n en Red en la gu.a de Programaci.n y Utilidades. Ejemplos . En el ejemplo siguiente se a.ade un registro en blanco, se comprueba si existe un error de red y se actualizan los datos: DBUSEAREA(.T., "DBFNTX", "Ventas", "Ventas", .T.) . . <sentencias> . DBAPPEND() IF !NETERR() Ventas->Nombre := cNombre Ventas->Apellido := cApellido ELSE ? "Ha fallado la operación.de inserci.n" BREAK ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBCLEARFILTER() Borra una condición de filtro ------------------------------------------------------------------------------ Sintaxis DBCLEARFILTER() --> NIL Devuelve DBCLEARFILTER() devuelve siempre NIL. Descripción DBCLEARFILTER() borra, si la hay, la condición l.gica de filtro del .rea de trabajo actual. DBCLEARFILTER() realiza la misma función que un mandato SET FILTER estándar sin expresión. Si desea más información, consulte el mandato SET FILTER. Notas . Registros lógicos: DBCLEARFILTER() afecta a la visibilidad l.gica de los registros en el área de trabajo actual. Si desea m.s información, consulte DBSETFILTER() y el mandato SET FILTER. Ejemplos . En el ejemplo siguiente se crea un filtro, los datos se listan en el orden filtrado y se borra el filtro: USE Empleado NEW DBSETFILTER( {|| Edad < 40}, "Edad < 40" ) LIST Empleado->Nombre DBCLEARFILTER() Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBCLEARINDEX() Cierra todos los ííndices del área de trabajo actual ------------------------------------------------------------------------------ Sintaxis DBCLEARINDEX() --> NIL Devuelve DBCLEARINDEX() devuelve siempre NIL. Descripción DBCLEARINDEX() cierra los ííndices activos en al área de trabajo actual. Se escriben las actualizaciones y se cierran los ficheros ííndice. DBCLEARINDEX() realiza la misma función que un mandato SET INDEX estándar sin ningún índice. Si desea más información, consulte el mandato SET INDEX. Ejemplos . En el ejemplo siguiente se borran los ficheros ííndice, si hay alguno seleccionado: cApellido := "L.pez" DBUSEAREA(.T., "DBFNTX", "Ventas", "Ventas", .T.) DBSETINDEX( "NOMBRE" ) DBSETINDEX( "APELLIDO" ) // IF INDEXORD() > 0 // .existe alg.n índice? DBCLEARINDEX() // borrar ficheros de índice ELSE COPY TO FILE TEMP SDF // copiar en formato ENDIF // SDF en su orden natural Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBCLEARRELATION() Borra las relaciones activas ------------------------------------------------------------------------------ Sintaxis DBCLEARRELATION() --> NIL Devuelve DBCLEARRELATION() devuelve siempre NIL. Descripción DBCLEARRELATION() borra cualquier relaci.n activa del área de trabajo actual. DBCLEARRELATION() realiza la misma función que un mandato SET RELATION TO estándar sin ningúna cláusula. Si desea más información, consulte el mandato SET RELATION. Ejemplos . En el ejemplo siguiente se crea una relaci.n, se listan los datos y se borra la relaci.n: USE Empleado NEW USE Departamento NEW INDEX Dept // SELECT Empleado DBSETRELATION("Departamento", ; {|| Empleado->Dept}, "Empleado->Dept") LIST Empleado->Nombre, Departamento->Nombre DBCLEARRELATION() Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBCLOSEALL() Cierra todas las áreas de trabajo ocupadas ------------------------------------------------------------------------------ Sintaxis DBCLOSEALL() --> NIL Devuelve DBCLOSEALL() devuelve siempre NIL. Descripción DBCLOSEALL() libera todas las áreas de trabajo ocupadas. Equivale a utilizar DBCLOSEAREA() en todas las áreas de trabajo ocupadas. DBCLOSEALL() tiene el mismo efecto que el mandato CLOSE DATABASES estándar. Si desea más información, consulte los mandatos USE y CLOSE. Ejemplos . En el ejemplo siguiente se cierran todas las áreas de trabajo: cApellido := "L.pez" DBUSEAREA(.T., "DBFNTX", "Ventas", "Ventas", .T.) DBSETINDEX( "SALEFNAM" ) DBSETINDEX( "SALELNAM" ) // DBUSEAREA(.T., "DBFNTX", "Distribu", "Distribu", .T.) DBSETINDEX( "COLLFNAM" ) DBSETINDEX( "COLLLNAM" ) // DBSELECTAREA( "Ventas" ) // seleccionar el .rea // de trabajo "Ventas" // IF ( Ventas->(DBSEEK(cApellido)) ) IF Ventas->( DELETED() ) IF RLOCK() Ventas->( DBRECALL() ) ? "Registro borrado: ", Ventas->( DELETED() ) ENDIF ENDIF ELSE ? "No se encuentra" ENDIF DBCLOSEALL() // cerrar todas las áreas // de trabajo Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBCLOSEAREA() Cierra un área de trabajo ------------------------------------------------------------------------------ Sintaxis DBCLOSEAREA() --> NIL Devuelve DBCLOSEAREA() devuelve siempre NIL. Descripción DBCLOSEAREA() libera el área de trabajo actual. Se escriben las actualizaciones pendientes, se liberan los bloqueos y se cierra o se libera cualquier recurso asociado con el área de trabajo. DBCLOSEAREA() es equivalente al mandato CLOSE estándar sin cláusulas. Si desea m.s información, consulte los mandatos USE y CLOSE. Ejemplos . En el ejemplo siguiente se cierra un área de trabajo con una referencia de alias: cApellido := "L.pez" // DBUSEAREA(.T., "DBFNTX", "Ventas", "Ventas", .T.) DBSETINDEX( "SALEFNAM" ) DBSETINDEX( "SALELNAM" ) // DBUSEAREA(.T., "DBFNTX", "Distribu", "Distribu", .T.) DBSETINDEX( "COLLFNAM" ) DBSETINDEX( "COLLLNAM" ) // DBSELECTAREA( "Ventas" ) // seleccionar el .rea // de trabajo "Ventas" IF ( Ventas->(DBSEEK(cApellido)) ) IF Ventas->( DELETED() ) .AND. Ventas->( RLOCK() ) Ventas->( DBRECALL() ) ? "Registro borrado: ", Ventas->( DELETED() ) ENDIF ELSE ? "No se encuentra" Distribu->( DBCLOSEAREA() ) ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBCOMMIT() Escribe en el disco las actualizaciones pendientes ------------------------------------------------------------------------------ Sintaxis DBCOMMIT() --> NIL Devuelve DBCOMMIT() devuelve siempre NIL. Descripción DBCOMMIT() hace que se guarden en el disco todas las actualizaciones del área de trabajo actual. Todas las bases de datos actualizadas y las memorias intermedias de índice se guardan en las del DOS y se ejecuta un mandato COMMIT del DOS para el fichero de base de datos (.dbf) y cualquier fichero ííndice asociado con el área de trabajo. DBCOMMIT() realiza la misma función que un mandato COMMIT estándar, con la excepci.n de que act.a sólo en el área de trabajo actual. Si desea más información, consulte el mandato COMMIT. Notas . Entorno de red: DBCOMMIT() hace visibles a los restántes procesos las actualizaciones realizadas en la base de datos. Para asegurarse de la integridad de los datos, ejecute DBCOMMIT() antes de ejecutar UNLOCK. Si desea más información, consulte el capítulo Programaci.n en Red en la gu.a Programaci.n y Utilidades. . DBCOMMIT() utiliza la interrupci.n 21h, función 68h del DOS para ejecutar la escritura en el disco duro. La realizaci.n correcta de esta petición depende del sistema operativo de la red. Consulte con el distribuidor de red para comprobar si puede utilizarse esta interrupci.n. Ejemplos . En este ejemplo, se utiliza COMMIT para forzar una escritura en el disco después de haber asignado una serie de variables de memoria a las variables de campo: USE Ventas EXCLUSIVE NEW MEMVAR->Nombre := Ventas->Nombre MEMVAR->Cantidad := Ventas->Cantidad // @ 10, 10 GET MEMVAR->Nombre @ 11, 10 GET MEMVAR->Cantidad READ // IF UPDATED() APPEND BLANK REPLACE Ventas->Nombre WITH MEMVAR->Nombre REPLACE Ventas->Cantidad WITH MEMVAR->Cantidad Ventas->( DBCOMMIT() ) ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBCOMMITALL() Escribe en el disco las actualizaciones pendientes de todas las áreas de trabajo ------------------------------------------------------------------------------ Sintaxis DBCOMMITALL() --> NIL Devuelve DBCOMMITALL() devuelve siempre NIL. Descripción DBCOMMITALL() hace que se guarden en el disco todas las actualizaciones pendientes de todas las áreas de trabajo. Equivale a invocar el mandato DBCOMMIT() en cada área de trabajo ocupada. Si desea más información, consulte DBCOMMIT() y el mandato COMMIT. Notas . DBCOMMITALL() utiliza la interrupci.n 21h, función 68h del DOS para ejecutar la escritura de disco duro. La realizaci.n correcta de esta petición es función del sistema operativo de red. Consulte con el distribuidor de red para comprobar si se acepta esta función. Ejemplos . En el ejemplo siguiente se escriben todas las actualizaciones pendientes en el disco: cApellido := "L.pez" // DBUSEAREA(.T., "DBFNTX", "Ventas", "Ventas", .T.) DBSETINDEX( "SALEFNAM" ) DBSETINDEX( "SALELNAM" ) // DBUSEAREA(.T., "DBFNTX", "Distribu", "Distribu", .T.) DBSETINDEX( "COLLFNAM" ) DBSETINDEX( "COLLLNAM" ) DBSELECTAREA( "Ventas" ) // seleccionar el .rea // de trabajo "Ventas" IF ( Ventas->(DBSEEK(cApellido)) ) IF Ventas->(DELETED() ) .AND. Ventas( RLOCK()) Ventas->( DBRECALL() ) ? "Se ha recuperado el registro borrado." ENDIF ELSE ? "No se encuentra" ENDIF // proceso completado, escribir las // actualizaciones en el disco y cerrar DBCOMMITALL() DBCLOSEALL() QUIT Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBCREATE() Crea un fichero de base de datos a partir de una matriz de estructura ------------------------------------------------------------------------------ Sintaxis DBCREATE(<cBasedeDatos>, <aEstruct>, [<cControlador>]) --> NIL Argumentos <cBasedeDatos> es el nombre del nuevo fichero de base de datos especificado como cadena de carácteres e incluyendo, opciónalmente, la unidad y directorio. Si se especifica sin extensión, se supone (.dbf). <aEstruct> es una matriz que contiene la estructura de <cBasedeDatos> como una serie de submatrices, una por campo. Cada submatriz contiene la definición de los atributos de campo y presenta la estructura siguiente: Submatriz de Definici.n de Campos ------------------------------------------------------------------------ Posici.n Metas.mbolo Dbstruct.ch ------------------------------------------------------------------------ 1 cNombre DBS_NAME 2 cTipo DBS_TYPE 3 nLongitud DBS_LEN 4 nDecimales DBS_DEC ------------------------------------------------------------------------ <cControlador> especifica el controlador de base de datos sustituible (RDD) que va a utilizarse para procesar el área de trabajo actual. <cControlador> es el nombre del RDD especificado como una expresión de carácteres. Si especifica <cControlador> como un valor literal, debe encerrarlo entre comillas. Devuelve DBCREATE() devuelve siempre NIL. Descripción DBCREATE() es una función de base de datos que crea un fichero a partir de una matriz que contiene la estructura. Puede crear la matriz de forma literal o utilizando DBSTRUCT(). DBCREATE() es similar al mandato CREATE FROM que crea una nueva estructura de base de datos a partir de un fichero de estructura extendido. Para crear el fichero extendido se utilizan los mandatos CREATE o COPY STRUCTURE EXTENDED. Antes de utilizar DBCREATE(), debe crearse la matriz <aEstruct> y rellenarla con las matrices de definición de campos de acuerdo a la estructura de la tabla anterior. Existen determinadas reglas para crear una matriz de definición de campo, entre ellas: . Especificar todos los atributos de campo con un valor del tipo de datos apropiado para el atributo. Es necesario especificar el atributo de decimales, incluso para campos no numéricos. Si el campo no tiene un atributo de decimales, especifique cero. . Especificar el atributo de tipo, utilizando la primera letra del tipo de datos como mínimo. Para mejorar la legibilidad, utilice m.s t.rminos descriptivos y t.rminos m.s largos. Por ejemplo, pueden especificarse "C" y "Car.cter" como el atributo de tipo para campos de carácteres. . En CA-Clipper, los campos de carácteres pueden contener hasta 64.000 carácteres. A diferencia del mandato CREATE FROM, DBCREATE() no utiliza el atributo de decimales para especificar la parte superior de la longitud de campo. Especifique la longitud de campo directamente, independientemente de su magnitud. Para que las referencias a los diversos elementos de la submatriz de definición de campos sean m.s legibles, se incluye el fichero de cabecera, llamado Dbstruct.ch, que contiene #defines para asignar un nombre a la posición de matriz para cada atributo de campo. Este fichero se encuentra en \CLIPPER5\INCLUDE. Ejemplos . Este ejemplo crea una matriz vac.a y después se a.aden submatrices de definición de campos, utilizando la función AADD() antes de crear Agenda.dbf. Puede utilizar esta t.cnica para a.adir din.micamente definiciónes de campo a su matriz: aDbf := {} AADD(aDbf, { "Nombre", "C", 25, 0 }) AADD(aDbf, { "Direccion", "C", 1024, 0 }) AADD(aDbf, { "Telefono", "N", 13, 0 }) // DBCREATE("Agenda", aDbf) . Este ejemplo realiza las mismas acciones, pero declara la matriz de estructura como una matriz bidimensiónal y después utiliza el direccionamiento de subííndices para especificar las definiciónes de campos. Se crea utilizando el controlador DBFMDX: #include "Dbstruct.ch" // LOCAL aDbf[1][4] aDbf[1][ DBS_NAME ] := "Nombre" aDbf[1][ DBS_TYPE ] := "Caracteres" aDbf[1][ DBS_LEN ] := 25 aDbf[1][ DBS_DEC ] := 0 // DBCREATE("Nombre", aDbf, "DBFMDX") Ficheros: La biblioteca asociada es CLIPPER.LIB, el fichero de cabecera es Dbstruct.ch.
DBCREATEINDEX() Crea un fichero ííndice ------------------------------------------------------------------------------ Sintaxis DBCREATEINDEX(<cNombreíndice>, <cExprClave>, <bExprClave>, [<lUnico>]) --> NIL Argumentos <cNombreíndice> es un valor de carácteres, que especifica el nombre del fichero de índice que va a crearse. <cExprClave> es un valor de carácteres, que representa la expresión clave del índice en forma de texto. <bExprClave> es un bloque de código, que representa la expresión clave del índice en forma ejecutable. <lUnico> es un valor l.gico opciónal, que especifica si debe crearse un ííndice .nico. Si se omite <lUnico>, se utiliza el valor de SET UNIQUE global actual. Devuelve DBCREATEINDEX() devuelve siempre NIL. Descripción DBCREATEINDEX() crea un ííndice para el fichero de base de datos (.dbf) asociado con el área de trabajo actual. Si el área de trabajo tiene ííndices activos, se cierran. Cuando se crea el nuevo índice, se convierte en el de control del área de trabajo y el puntero se sit.a en el primer registro l.gico. DBCREATEINDEX() realiza la misma función que un mandato INDEX estándar. Si desea más información, consulte el mandato INDEX. Notas . Efectos laterales: DBCREATEINDEX() garantiza la creaci.n de un ííndice, que cuando se activa, impone el orden l.gico especificado en la base de datos. Si la expresión clave se basa en información externa al fichero de base de datos o área de trabajo, el efecto es impredecible. Si la expresión clave cambia el estado del área de trabajo (por ejemplo, desplazando el contenido de un registro a un registro diferente o cambiando el contenido del mismo), el efecto es impredecible. . Contexto de evaluaci.n: Cuando se eval.a la expresión clave, el área de trabajo asociada se selecciona autom.ticamente como el área de trabajo actual antes de la evaluaci.n. Posteriormente se restablece el área de trabajo seleccionada prevíamente. . Entorno de red: DBCREATEINDEX() crea el nuevo índice para uso exclusivo del proceso actual. Ejemplos . Este ejemplo crea un fichero ííndice, INombre, cuya clave es el campo Nombre: USE Empleados NEW DBCREATEINDEX( "INombre", "Nombre", { || Nombre }) Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBDELETE() Marca un registro para borrar ------------------------------------------------------------------------------ Sintaxis DBDELETE() --> NIL Devuelve DBDELETE() devuelve siempre NIL. Descripción DBDELETE() marca el registro actual como borrado. Los registros marcados para borrarse pueden filtrarse utilizando SET DELETED o eliminarse del fichero al utilizar el mandato PACK. DBDELETE() realiza la misma función que un mandato DELETE estándar con ámbito en el registro actual. Si desea más información, consulte el mandato DELETE. Notas . Registros lógicos: Si se ha establecido SET DELETED ON, los registros borrados no son visibles l.gicamente. Esto significa que las operación.s de base de datos que act.en en registros lógicos no tienen en cuenta los registros marcados como borrados. Recuerde, sin embargo, que si se ha establecido SET DELETED OFF el registro marcado como borrado permanece visible hasta que deja de ser el registro actual. . Entorno de red: En una base de datos compartida en una red, DBDELETE() requiere bloquear el registro actual. Si desea m.s información, consulte el capítulo Programaci.n en Red de la gu.a Programaci.n y Utilidades. Ejemplos . En el ejemplo siguiente se borra un registro después de efectuar un bloqueo satisfactorio: cApellido := "L.pez" DBUSEAREA(.T., "DBFNTX", "Ventas", "Ventas", .T.) DBSETINDEX( "APELLIDO" ) // IF ( Ventas->(DBSEEK(cApellido)) ) IF Ventas->( RLOCK() ) Ventas->( DBDELETE() ) ? "Registro borrado: ", Ventas->( DELETED() ) ELSE ? "No puede borrarse el registro..." ENDIF ELSE ? "No se encuentra" ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBEDIT()* Visualiza registros en un formato de tabla ------------------------------------------------------------------------------ Sintaxis DBEDIT([<nSup>], [<nIzq>], [<nInf>], <nDer>], [<acColumnas>], [<cfunciónUsuario>], [<acPatrónesFormatoSayColumna> | <PatrónFormatoSayColumna>], [<acCabecerasColumna> | <cCabeceraColumna>], [<acSeparadoresCabecera> | <cSeparadorCabecera>], [<acSeparadoresColumna> | <cSeparadorColumna>], [<acSeparadoresPie> | <cSeparadorPie>], [<acPiesColumna> | <cPieColumna>]) --> NIL Argumentos <nSup>, <nIzq>, <nInf> y <nDer> definen las coordenadas de la parte superior izquierda e inferior derecha de la ventana DBEDIT(). Los valores de fila pueden ir de cero a MAXROW() y las posiciónes de columna de cero a MAXCOL(). Si no se especifica, las coordenadas por defecto son 0, 0, MAXROW() y MAXCOL(). <acColumnas> es una matriz de expresiónes de carácteres que contiene nombres de campos de base de datos o expresiónes para utilizar como valores de columna para cada columna que se muestra. Si no se especifica este argumento, DBEDIT() muestra todos los campos en el área de trabajo actual como columnas. <cfunciónUsuario> es el nombre de una función definida por el usuario, que se ejecuta cuando se pulsa una tecla irreconocible o no quedan teclas pendientes en la memoria intermedia de teclado. Especifique el nombre de función como una expresión de carácteres sin paréntesis ni argumentos. Recuerde que el funciónamiento de DBEDIT() se ve afectado por la presencia de este argumento. Consulte la Descripción que se ofrece m.s adelante, si desea más información. <acPatrónFormatoSayColumna> es una matriz paralela de patrones para formatear cada columna. Si se especifica <cPatrónFormatoSayColumna> en lugar de una matriz se muestran todas las columnas con el mismo formato. Si desea más información sobre patrones de formato, consulte TRANSFORM() o @...SAY. <acCabecerasColumna> es una matriz paralela de expresiónes de carácteres, que define las cabeceras de cada columna. Si se especifica <cCabecerasColumna> todas las columnas reciben el mismo encabezado. Si desea mostrar una cabecera de líneas m.ltiples, a.ada un punto y coma en la expresión de cabecera donde desea que se interrumpa la cadena. Si no se especifica, las cabeceras de columna se toman de la matriz <acColumnas> o de los nombres de campo del área de trabajo actual si no se especifica el argumento <acColumnas>. <acSeparadoresCabeceras> es una matriz paralela de carácteres, que define los carácteres útilizados para dibujar líneas horizontales que separan las cabeceras de columnas del .rea de campos. Si se especifica <cSeparadorCabeceras> en lugar de una matriz, se utiliza el mismo separador de cabeceras para todas las columnas. Si no se especifica este argumento, el separador por defecto es una línea de gr.ficos doble. <acSeparadoresColumna> es una matriz paralela de expresiónes de carácteres, que define los carácteres útilizados para dibujar las líneas verticales que separan las columnas. Si se especifica <cSeparadorColumna> en lugar de una matriz se utiliza el mismo separador para todas las columnas. Si este argumento no se especifica, el separador por defecto es una línea simple de gr.ficos. <acSeparadoresPie> es una matriz paralela de expresiónes de carácteres, que define los carácteres útilizados para dibujar las líneas horizontales que separan los pies de columnas del .rea de campos. Si se especifica <cSeparadorPie> en lugar de una matriz, se utiliza el mismo separador de pie para todas las columnas. Si no se especifica este argumento, no existe separador de pie. <acPiesColumna> es una matriz paralela de expresiónes de carácteres, que definen pies para cada columna. Si se especifica <cPieColumna> en lugar de una matriz, todas las columnas reciben el mismo pie. Para que se muestre un pie de líneas m.ltiples, a.ada un punto y coma en la expresión del pie, donde desea que se interrumpa la cadena. Si no se especifica este argumento, no existen pies de columna. Devuelve DBEDIT() devuelve siempre NIL. Descripción DBEDIT() es una función de interfaz de usuario y de compatibilidad que muestra registros de una o más .reas de trabajo en forma de tabla. La pantalla de la ventana DBEDIT() es una rejilla de celdas divididas en columnas y filas. Las columnas corresponden a los campos de base de datos y las filas corresponden a los registros de la base de datos. Cada columna se define mediante un elemento de la matriz <acColumnas>. La anchura de cada columna est. determinada por la evaluaci.n de la expresión de columna en la matriz <acColumnas> o el patr.n de formato de columna especificado en la matriz <acPatrónFormatoSayColumna>. Todas las teclas de desplazamiento del cursor pueden utilizarse con DBEDIT(), incluyendo ReP.g, AvP.g, Inicio, Fin, las cuatro teclas de flechas y todas las combinaciónes de tecla con Ctrl que producen el desplazamiento del cursor. Las teclas de movimiento a las que responde DBEDIT() cuando no se especifica un argumento de función de usuario se listan en la tabla siguiente de Teclas Activas: Teclas Activas de DBEDIT() ------------------------------------------------------------------------ Tecla Acción ------------------------------------------------------------------------ Arriba Sube una fila Abajo Baja una fila Izquierda Columna a la izquierda Derecha Columna a la derecha Ctrl-Izquierda Desplaza la visualización una columna a la izquierda Ctrl-Derecha Desplaza la visualización una columna a la derecha Inicio Sitúa el cursor en la columna del extremo izquierdo de la pantalla actual Fin Sitúa el cursor en la columna del extremo derecho de la pantalla actual Ctrl-Inicio Sitúa el cursor sobre la primera columna de la tabla de visualización Ctrl-Fin Sitúa el cursor sobre la .ltima columna de la tabla de visualización ReP.g Pantalla anterior AvP.g Pantalla siguiente Ctrl-ReP.g Primera fila de la columna actual Ctrl-AvP.g Ultima fila de la columna actual Intro Finaliza DBEDIT() Esc Finaliza DBEDIT() ------------------------------------------------------------------------ Cuando se especifica el argumento de función (<cfunciónUsuario>), todas las teclas indicadas en la tabla anterior están activas con excepci.n de Esc y Intro. Cuando DBEDIT() llama a la función de usuario, le pasa autom.ticamente dos argumentos: . El modo actual, pasado como valor numérico . El índice de la columna actual en <acColumnas>, pasado como un valor numérico El parámetro de modo indica el estado actual de DBEDIT(), seg.n la .ltima tecla ejecutada. Los valores de modo posibles se listan en la tabla siguiente: Modos DBEDIT() ------------------------------------------------------------------------ Estado Dbedit.ch Descripción ------------------------------------------------------------------------ 0 DE_IDLE Inactividad, se han procesado todas las pulsaciones de teclas de desplazamiento y no queda ningúna pendiente 1 DE_HITTOP Intento de desplazar el cursor antes de la parte superior del fichero 2 DE_HITBOTTOM Intenta de situar el cursor después del final del fichero 3 DE_EMPTY No hay registros en el área de trabajo 4 DE_EXCEPT Excepci.n de teclado ------------------------------------------------------------------------ El parámetro de índice apunta a la posición en la matriz <acColumnas> donde se encuentra la columna actual. Si no se especifica <acColumnas>, el parámetro de índice se.ala la posición del campo en la estructura de base de datos actual. Acceda al nombre de campo utilizando FIELD(). La función definida por el usuario debe devolver un valor que indique a DBEDIT() la acci.n qu. debe ejecutar. En la tabla siguiente se listan los posibles valores de retorno y las acciones correspondientes: Valores de Retorno de funciónes de Usuario DBEDIT() ------------------------------------------------------------------------ Valor Dbedit.ch Descripción ------------------------------------------------------------------------ 0 DE_ABORT Cancela DBEDIT() 1 DE_CONT Contin.a DBEDIT() 2 DE_REFRESH Fuerza a volver a leer o dibujar y continúa.. Despu.s de redibujar, procesa las teclas y queda inactivo ------------------------------------------------------------------------ Existen varios casos en los se invoca la función de usuario: . Excepciones de teclado. Se producen cuando DBEDIT() recoge una pulsaci.n de tecla que no reconoce. Cualquier tecla pendiente permanece en la memoria intermedia del teclado hasta que se recoge dentro de la función de usuario o hasta que DBEDIT() continúa. . DBEDIT() entra en el modo inactivo (es decir, se han procesado todas las teclas pendientes). Se produce cuando el teclado est. vac.o o después de una actualizaci.n de pantalla. En este caso, se invoca la función del usuario y después DBEDIT() espera una pulsaci.n. . Se alcanza el principio o final del fichero. Es id.ntico al estado inactivo. Se ejecutan todas las teclas ejecutables y se produce una llamada a la función de usuario con el mensaje de estado apropiado. Recuerde que cuando se ejecuta DBEDIT() por primera vez, todas las teclas pendientes en la memoria intermedia del teclado se ejecutan y, después, DBEDIT() queda en el modo inactivo e invoca la función de usuario. Si no quedan teclas pendientes, se pasa al modo inactivo inmediatamente. La función de usuario debe manejar todos los modos y mensajes de estado recibidos de DBEDIT(). La función definida por el usuario debe asegurar que el estado de DBEDIT() sea equivalente al de DE_EXCEPT (4). De lo contrario, el valor de LASTKEY() carece de significado y el valor retorno de DE_REFRESH (2) sit.a la aplicación en un bucle sin fin. FUNCTION FuncEdicDB ( nModo, nPosColumna ) LOCAL ValRet := DE_CONT IF ( nModo == DE_EXCEPT ) IF ( LASTKEY() == K_F5 ) ValRet := DE_REFRESH ENDIF ENDIF RETURN( ValRet ) DBEDIT() es una función reentrante, por lo que puede contener llamadas anidadas. Esta función permite utilizar simultáneamente m.ltiples ventanas de visualización. DBEDIT() es una función de compatibilidad, por lo que no es recomendable su utilización como función de visualización programable. Como tal, ha sido sustituida por la clase TBrowse. Si desea más información, consulte la clase TBrowse en este capítulo. Ejemplos . Este ejemplo muestra una llamada gen.rica a DBEDIT(): USE Nombres NEW DBEDIT() . Este ejemplo muestra una llamada DBEDIT() con una función de usuario: #include "dbedit.ch" #include "inkey.ch" // La matriz debe ser visible a los otros // programas definidos en el programa STATIC acColumnas := {} PROCEDURE Main() USE Nombres NEW INDEX ON Nombres->Apellido + Nombres->Nombre TO Nombres CLS acColumnas := { "Apellido", "Nombre" } DBEDIT( 5, 5, 20, 70, acColumnas, "FuncUsuario" ) RETURN FUNCTION FuncUsuario( nModo, nCol ) LOCAL nTecla := LASTKEY() LOCAL nValRet := DE_CONT // Valores de // retorno por defecto DO CASE CASE nModo == DE_IDLE nValRet := FuncInac() CASE nModo == DE_HITTOP TONE( 100, 3 ) CASE nModo == DE_HITBOTTOM TONE( 100, 3 ) nValRet := FuncAnex( nTecla ) CASE nModo == DE_EMPTY nValRet := FunVacia() CASE nModo == DE_EXCEPT nValRet := FuncExcep( nTecla, nCol ) OTHERWISE TONE( 100, 3 ) ENDCASE RETURN nValRet FUNCTION FuncAnex( nTecla ) LOCAL nValRet := DE_CONT // Valor de retorno // por defecto IF nTecla == K_DOWN // Si es la flecha Abajo APPEND BLANK // A.adir registro en // blanco. Nota: El registro a.adido aparecer. en la parte // superior de la ventana DBEDIT() en la que se indexa // la base de datos. nValRet := DE_REFRESH // Actualizar pantalla ENDIF RETURN nValRet FUNCTION FuncExcep( nTecla, nCol ) LOCAL nValRet := DE_CONT // Valor de retorno por // defecto DO CASE CASE nTecla == K_ESC // Si ESCAPE nValRet := DE_ABORT // Salir CASE nTecla == K_RETURN // Si RETURN nValRet := FuncEdit( nCol ) // función para editar // campo // Activar/desactivar estado DELETED CASE nTecla == K_DEL .AND. LASTREC() != 0 // Pulsada // tecla SUPR IF DELETED() RECALL ELSE DELETE ENDIF OTHERWISE TONE( 100, 1 ) ENDCASE RETURN nValRet FUNCTION FuncEdic( nCol ) LOCAL cValíndice // Valor de la expresión // clave actual LOCAL nValRet // Valor de retorno LOCAL nCampo // Posici.n del // campo actual LOCAL cValCampo // Valor del campo actual LOCAL nGuardarCursor // Conservar el estado // del cursor // Devuelve un error si no hay índice abierto cValíndice := &( INDEXKEY(0) ) nCampo := FIELDPOS( acColumnas[nCol] ) IF nCampo != 0 nGuardarCursor := SETCURSOR() // Guardar el estado // del cursor SETCURSOR(1) // Cambiar la forma del cursor cValCampo := FIELDGET( nCampo ) // Guardar el // contenido // del campo @ ROW(), COL() GET cValCampo // nuevo valor GET READ FIELDPUT( nCampo, cValCampo ) // Sustituir por // el nuevo valor SETCURSOR( nGuardarCursor ) // Restablecer // la forma del // cursor ENDIF IF cValíndice != &( INDEXKEY(0) ) // Si se modific. la // expresión clave, nSolicitud := DE_REFRESH // actualizar // pantalla ELSE // En caso contrario, nSolicitud := DE_CONT // continúa. ENDIF RETURN nSolicitud FUNCTION FuncInac() // Rutina de inactividad RETURN DE_CONT FUNCTION FuncVacia() // Rutina de registros vac.os RETURN DE_CONT Ficheros: La biblioteca asociada es EXTEND.LIB, los ficheros de cabecera son Dbedit.ch y Inkey.ch.
DBEVAL() Eval.a un bloque de código en cada registro dentro de un ámbito que cumpla una condición ------------------------------------------------------------------------------ Sintaxis DBEVAL(<bBloque>, [<bCondici.nFor>], [<bCondici.nWhile>], [<nRegistrosSiguientes>], [<nRegistro>], [<lResto>]) --> NIL Argumentos <bBloque> es un bloque de código que va a ejecutarse en cada registro procesado. <bCondici.nFor> es una condición opciónal especificada como un bloque de código, que se eval.a en cada registro del ámbito. Realiza la misma función que la cláusula FOR de mandatos de tratamiento de registros. <bCondici.nWhile> es una condición opciónal especificada como un bloque de código, que se eval.a en cada registro del fichero actual, hasta que la condición devuelva falso (.F.). Realiza la misma función que la cláusula WHILE de los mandatos de tratamiento de registros. <nRegistrosSiguientes> es un número opciónal, que especifica el número de registros que van a procesarse, empezando por el actual. Es id.ntico a la cláusula NEXT. <nRegistro> es un número de registro opciónal que va a procesarse. Si se especifica este argumento, <bBloque> se eval.a para el registro especificado. Este argumento es id.ntico a la cláusula RECORD. <lResto> es un valor l.gico opciónal, que determina si el ámbito de DBEVAL() es todos los registros del fichero o todos los registros desde el registro actual. Este argumento corresponde a las cláusulas REST y ALL de los mandatos de tratamiento de registros. Si es verdadero (.T.) , el ámbito es REST; de lo contrario, el ámbito es ALL. Si no se especifica <lResto> el ámbito por defecto es todos los registros. Devuelve DBEVAL() devuelve siempre NIL. Descripción DBEVAL() es una función de base de datos, que eval.a un .nico bloque de código para cada registro del área de trabajo actual que cumpla un ámbito y/o condición especificada. En cada iteraci.n, DBEVAL() eval.a el bloque especificado. Se procesan todos los registros dentro del ámbito o que cumplan la condición, hasta alcanzar el final del fichero. Por defecto, DBEVAL() act.a en el área de trabajo actual. Si desea utilizarla en otra área de trabajo, debe especificarla con una expresión de alias. DBEVAL() es similar a AEVAL(), que aplica un bloque a cada elemento de una matriz. Al igual que AEVAL(), DBEVAL() puede utilizarse como primitiva para la creaci.n de mandatos definidos por el usuario para ficheros de base de datos. De hecho, existen diversos mandatos de tratamiento de base de datos de CA-Clipper que se crean por medio de DBEVAL(). Si desea más información sobre la sintaxis y teor.a de los bloques de código, consulte el apartado Bloques de C.digo en el capítulo Conceptos Básicos de la gu.a Programaci.n y Utilidades. Consulte también el apartado Sistema de Base de Datos en el capítulo Conceptos Básicos si desea más información sobre el ámbito y condiciónes de registros; y el fichero de cabecera estándar de CA-Clipper, STD.CH, que se encuentra en \CLIPPER5\INCLUDE si desea ejemplos sobre definiciónes de mandatos de base de datos de CA-Clipper, que utilizan DBEVAL(). Ejemplos . Este ejemplo utiliza DBEVAL() para crear Contar(), una función definida por el usuario, que cuenta el número de registros en un .rea de trabajo comprendidos en un ámbito especificado. El ámbito se pasa como una matriz a Contar(). Para que los ejemplos resulten m.s interesantes, existe un mandato definido por el usuario que crea la matriz de ámbito, que permite especificar el ámbito de forma que resulte familiar. Además, existe un conjunto de constantes declaradas, que definen los atributos del objeto de ámbito: // Definici.n de mandato de ámbito #command CREATE SCOPE <aámbito> [FOR <for>] ; [WHILE <while>] [NEXT <next>] [RECORD <rec>] ; [<rest:REST>] [ALL]; =>; <aámbito> := { <{for}>, <{while}>, <next>, ; <rec>, <.rest.> } // // Constantes de atributos de ámbito #define FOR_COND 1 #define WHILE_COND 2 #define NEXT_SCOPE 3 #define REC_SCOPE 4 #define REST_SCOPE 5 // // Crear un ámbito y contar registros us.ndolo LOCAL miConjunto, miContar USE Cliente NEW CREATE SCOPE miConjunto FOR Cliente = "L.pez" WHILE ; CodPostal > "90000" miContar := Contar( miConjunto ) RETURN FUNCTION Contar( aámbito ) LOCAL nContar := 0 DBEVAL( {|| nContar++},; aámbito[ FOR_COND ],; aámbito[ WHILE_COND ],; aámbito[ NEXT_SCOPE ],; aámbito[ REC_SCOPE ],; aámbito[ REST_SCOPE ]; ) RETURN nContar Ficheros: La biblioteca asociada es CLIPPER.LIB
DBF()* Devuelve el nombre de alias actual ------------------------------------------------------------------------------ Sintaxis DBF() --> cAlias Devuelve DBF() devuelve el alias del área de trabajo actual, como cadena de carácteres. Si no hay abierto un fichero de base de datos en el .rea de trabajo actual, DBF() devuelve una cadena nula (""). Descripción DBF() es una función de compatibilidad que duplica la función DBF() en dBASE III PLUS. CA-Clipper la ejecuta llamando a la función ALIAS() sin argumentos. DBF() es una función de compatibilidad, por lo que su utilización no es recomendable. Puede sustituirse completamente por la función ALIAS(). Ficheros: La biblioteca asociada es EXTEND.LIB, el fichero fuente es SOURCE\SAMPLE\DBF.PRG
DBFILTER() Devuelve la expresión de filtro actual, como cadena de carácteres ------------------------------------------------------------------------------ Sintaxis DBFILTER() --> cFiltro Devuelve DBFILTER() devuelve la condición de filtro definida en el .rea de trabajo actual, en forma de cadena de carácteres. Si no se ha establecido ningún filtro, DBFILTER() devuelve una cadena nula (""). Descripción DBFILTER() es una función de base de datos que se utiliza para guardar y volver a ejecutar un filtro activo, devolviendo la expresión de filtro como una cadena de carácteres que puede recompilarse y ejecutarse m.s tarde con el operador de macro (&). Esta función act.a de forma similar a las funciónes DBRELATION() y DBRSELECT(), que guardan y vuelven a ejecutar la expresión de enlace de una relaci.n dentro de un .rea de trabajo. Puesto que cada área de trabajo puede tener un filtro activo, DBFILTER() puede devolver la expresión de filtro de cualquier área de trabajo. Esto se realiza, haciendo referencia a DBFILTER() dentro de una expresión de alias, tal como se muestra a continúa.ión. Notas . Variables declaradas: Una cadena de carácteres devuelta por DBFILTER() es posible que no funcióne correctamente, cuando se recompila y ejecuta utilizando el operador de macro (&) si la expresión de filtro original contiene referencias a variablesólocales o estáticas o que dependan de declaraciónes que se resuelven durante la compilación. Ejemplos . Este ejemplo abre dos ficheros de base de datos, crea dos filtros y muestra las expresiónes de filtro para ambas .reas de trabajo: USE Cliente INDEX Cliente NEW SET FILTER TO Apellido = "L.pez" USE Facturas INDEX Facturas NEW SET FILTER TO IdCliente = "L.p001" SELECT Cliente // ? DBFILTER() // Resultado: Apellido = "L.pez" ? Facturas->(DBFILTER()) // Resultado: IdCliente = "L.p001" . Esta función, CrearConsulta(), utiliza DBFILTER() para crear un fichero de memoria que contiene la expresión de filtro actual en la variable privada cFiltro: FUNCTION CrearConsulta( cNombreCons ) PRIVATE cFiltro := DBFILTER() SAVE ALL LIKE cFiltro TO (cNombreCons + ".con") RETURN NIL . Posteriormente, puede restablecer el fichero de consulta con la función SelecFiltro(): FUNCTION SelecFiltro() PARAMETER cNombreCons RESTORE FROM &cNombreCons..con ADDITIVE SET FILTER TO &cFiltro. RETURN NIL Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBGOBOTTOM() Desplaza el puntero al último registro l.gico ------------------------------------------------------------------------------ Sintaxis DBGOBOTTOM() --> NIL Devuelve DBGOBOTTOM() devuelve siempre NIL. Descripción DBGOBOTTOM() desplaza el puntero al último registro l.gico en el .rea de trabajo actual. DBGOBOTTOM() realiza la misma función que un mandato GO BOTTOM estándar. Si desea más información, consulte el mandato GO. Notas . Registros lógicos: DBGOBOTTOM() act.a con registros lógicos. Si existe un ííndice activo, DBGOBOTTOM() se desplaza al último registro en el orden indexado. Si se selecciona un filtro, sólo se procesan los registros que cumplan la condición del filtro. . Orden de control: Si hay activo m.s de un ííndice en el área de trabajo, la operación.se ejecuta utilizando el orden de control, establecido por la función DBSETORDER() o el mandato SET ORDER. Si desea más información, consulte el mandato SET ORDER. . Entorno de red: Al desplazarse a otro registro en un entorno de red, las modificaciones efectuadas en el registro actual se hacen visibles a los otros procesos. Si desea más información, consulte el capítulo Programaci.n en Red en la gu.a Programaci.n y Utilidades. Ejemplos . En el ejemplo siguiente se utiliza DBGOBOTTOM() para situar el puntero en el último registro l.gico: cApellido := "L.pez" DBUSEAREA(.T., "DBFNTX", "Ventas", "Ventas", .T.) DBSETINDEX( "APELLIDO" ) // Ventas->( DBGOBOTTOM() ) IF ( Ventas->Apellido == "L.pez" ) IF RLOCK() Ventas->( DBDELETE() ) ? "Registro borrado: ", Ventas->( DELETED() ) ELSE ? "No puede bloquearse el registro..." ENDIF END Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBGOTO() Desplaza el puntero al registro del número especificado. ------------------------------------------------------------------------------ Sintaxis DBGOTO(<nNúmeroRegistro>) --> NIL Argumentos <nNúmeroRegistro> es un valor numérico que especifica el número del registro deseado. Devuelve DBGOTO() devuelve siempre NIL. Descripción DBGOTO() desplaza el puntero al registro cuyo número es igual a <nNúmeroRegistro>. Si no existe un registro de este tipo, el .rea de trabajo se sit.a en LASTREC() + 1 y tanto EOF() como BOF() devuelven verdadero (.T.). DBGOTO() realiza la misma función que un mandato estándar GO. Si desea más información, consulte el mandato GO. Notas . Registros lógicos: DBGOTO() no respeta la visibilidad l.gica. Es decir, si el registro especificado existe, se convertir. en el registro actual con independencia de cualquier condición de índice o filtro. . Entorno de red: Al desplazarse a otro registro en un entorno de red, las modificaciones efectuadas en el registro actual se hacen visibles a los otros procesos. Si desea más información, consulte el capítulo Programaci.n en Red en la gu.a Programaci.n y Utilidades. Ejemplos . En el ejemplo siguiente se utiliza DBGOTO() para procesar iterativamente saltando los registros de cuatro en cuatro: DBUSEAREA(.T., "DBFNTX", "Ventas", "Ventas", .T.) // // saltar registros de cuatro en cuatro DO WHILE !EOF() DBGOTO( RECNO() + 4 ) Ventas->Grupo := "Osos" ENDDO Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBGOTOP() Desplaza el puntero al primer registro l.gico ------------------------------------------------------------------------------ Sintaxis DBGOTOP() --> NIL Devuelve DBGOTOP() devuelve siempre NIL. Descripción DBGOTOP() desplaza el puntero al primer registro l.gico del .rea de trabajo actual. DBGOTOP() realiza la misma función que un mandato GO TOP estándar. Si desea más información, consulte el mandato GO TOP. Notas . Registros lógicos: DBGOTOP() act.a sobre registros lógicos. Si existe un ííndice activo, DBGOTOP() desplaza el puntero al primer registro en orden indexado. Si hay establecido un filtro, sólo se examinan los registros que cumplen con la condición del filtro. . Orden de control: Si hay activo m.s de un ííndice en el área de trabajo, la operación.se realiza utilizando el orden de control establecido con la función DBSETORDER() o el mandato SET ORDER. Si desea más información, consulte el mandato SET ORDER. . Entorno de red: Al desplazarse a otro registro en un entorno de red, las modificaciones efectuadas en el registro actual se hacen visibles a los otros procesos. Si desea más información, consulte el capítulo Programaci.n en Red en la gu.a Programaci.n y Utilidades. Ejemplos . Este ejemplo muestra la utilización normal de DBGOTOP(): DBGOTOP() WHILE ( !EOF() ) ? FIELD->Nombre DBSKIP() END Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBRECALL() Recupera un registro marcado para borrarse ------------------------------------------------------------------------------ Sintaxis DBRECALL() --> NIL Devuelve DBRECALL() devuelve siempre NIL. Descripción DBRECALL() hace que el registro actual se recupere si est. marcado para ser borrado. DBRECALL() realiza la misma función que un mandato RECALL. Si desea m.s información, consulte los mandatos DELETE y RECALL. Notas . Registros lógicos: La recuperaci.n de un registro borrado afecta a la visibilidad l.gica del registro si el estado global SET DELETED es verdadero (.T.). Si desea más información, consulte la función DBDELETE() y los mandatos DELETE y RECALL . . Entorno de red: Para una base de datos compartida en una red, DBRECALL() requiere bloquear el registro actual. Si desea m.s información, consulte el capítulo Programaci.n en Red en la gu.a Programaci.n y Utilidades. Ejemplos . En el ejemplo siguiente se recupera un registro marcado para borrarse si el intento de bloqueo ha sido satisfactorio: cApellido := "L.pez" DBUSEAREA(.T., "DBFNTX", "Ventas", "Ventas", .T.) DBSETINDEX( "APELLIDO" ) // IF ( Ventas->(DBSEEK(cApellido)) ) IF Ventas->( DELETED() ) IF Ventas->( RLOCK() ) Ventas->( DBRECALL() ) ? "Registro recuperado" ELSE "No puede bloquearse el registro..." ENDIF ENDIF ELSE ? "No se encuentra" ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBREINDEX() Vuelve a crear todos los ííndices activos en el área de trabajo actual ------------------------------------------------------------------------------ Sintaxis DBREINDEX() --> NIL Devuelve DBREINDEX() devuelve siempre NIL. Descripción DBREINDEX() reconstruye todos los ííndices activos asociados con el .rea de trabajo actual. Despu.s de crearse los ííndices, el área de trabajo se desplaza al primer registro l.gico del orden de control. DBREINDEX() realiza la misma función que un mandato REINDEX estándar. Si desea más información, consulte el mandato REINDEX. Ejemplos . En el ejemplo siguiente se reindexa el área de trabajo: cApellido := "L.pez" DBUSEAREA(.T., "DBFNTX", "Ventas", "Ventas", .T.) DBSETINDEX( "APELLIDO" ) // IF ( Ventas->(DBSEEK(cApellido)) ) IF RLOCK() DELETE FOR Ventas->Apellido == "L.pez" Ventas->( DBREINDEX() ) ELSE ? "No puede bloquearse el registro..." ENDIF ELSE ? "No se encuentra" ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBRELATION() Devuelve la expresión de enlace de una relaci.n especificada ------------------------------------------------------------------------------ Sintaxis DBRELATION(<nRelaci.n>) --> cExpEnlace Argumentos <nRelaci.n> es la posición de la relaci.n deseada en la lista de relaciones del área de trabajo actual. Las relaciones están numeradas de acuerdo con el orden en el que se definieron con SET RELATION. Devuelve DBRELATION() devuelve una cadena de carácteres que contiene la expresión de enlazado de la relaci.n especificada por <nRelaci.n>. Si no existe ningúna relaci.n para <nRelaci.n>, DBRELATION() devuelve una cadena nula (""). Descripción DBRELATION() es una función de base de datos que se utiliza con DBRSELECT() para determinar la expresión de enlazado y el .rea de trabajo de una relaci.n existente creada con el mandato SET RELATION. DBRELATION() devuelve la expresión de enlazado definida por la cláusula TO. DBRSELECT() devuelve el área de trabajo enlazada definida por la cláusula INTO. Por defecto, DBRELATION() opera en el área de trabajo actual. Si desea utilizarla en un área de trabajo no seleccionada, debe indicarla con una expresión de alias (consulte el ejemplo siguiente). Notas . Variables declaradas: Una cadena de carácteres devuelta por DBRELATION() puede no actuar correctamente cuando se recompila y se ejecuta utilizando el operador de macro (&), si la expresión original contiene referencias a variablesólocales o estáticas, o declaraciónes que se resuelvan durante la compilación. Ejemplos . Este ejemplo abre tres ficheros de base de datos, se establecen dos relaciones desde el área de trabajo padre, y después se muestra la expresión de enlazado para la segunda .rea de trabajo hija: USE Facturas INDEX Facturas NEW USE OrdenInverso INDEX OrdenInverso NEW USE Cliente INDEX Cliente NEW SET RELATION TO NumCliente INTO Facturas, NumOrden ; INTO OrdenInverso // ? DBRELATION(2) // Resultado: NumOrden . M.s tarde, puede utilizarse la misma expresión de enlazado desde un área de trabajo no seleccionada mediante una expresión con alias como .sta: USE Fichero NEW ? Cliente->(DBRELATION(2)) // Resultado: NumOrden . Este ejemplo es una función definida por el usuario, Relacion(), que devuelve los resultados de DBRELATION() y DBRSELECT() como una matriz: FUNCTION Relacion( nRelacion ) RETURN { DBRELATION(nRelacion), ; ALIAS(DBRSELECT(nRelacion)) } Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBRSELECT() Devuelve el número del área de trabajo destáno de una relaci.n ------------------------------------------------------------------------------ Sintaxis DBRSELECT(<nRelaci.n>) --> nAreaTrabajo Argumentos <nRelaci.n> es la posición de la relaci.n deseada en la lista de relaciones del área de trabajo actual. Las relaciones se numeran de acuerdo al orden en el que se definieron con SET RELATION. Devuelve DBRSELECT() devuelve el número del área de trabajo de la relaci.n especificada por <nRelaci.n> como un valor numérico entero. Si no existe RELATION SET para <nRelaci.n>, DBRSELECT() devuelve cero. Descripción DBRSELECT() es una función de base de datos utilizada en combinación con DBRELATION() para determinar el área de trabajo y expresión de enlazado de una relaci.n existente creada con el mandato SET RELATION. DBRSELECT() devuelve el área de trabajo definida por la cláusula INTO. DBRELATION() devuelve la expresión de enlazado definida por la cláusula TO. Para determinar el alias de la relaci.n en lugar del número de .rea de trabajo, utilice la expresión ALIAS(DBRSELECT(<nRelaci.n>)). Por defecto, DBRSELECT() act.a en el área de trabajo seleccionada actualmente. Act.a en un área de trabajo no seleccionada si la especifica como parte de una expresión con alias (consulte el ejemplo siguiente). Ejemplos . Este ejemplo abre tres ficheros de base de datos, se establecen dos relaciones desde el área de trabajo padre, después se muestra la expresión de enlace con la segunda área de trabajo hija as. como el área de trabajo destáno de la relaci.n: USE Facturas INDEX Facturas NEW USE OrdenInverso INDEX OrdenInverso NEW USE Cliente INDEX Cliente NEW SET RELATION TO NumCliente INTO Cliente, ; NumOrden INTO OrdenInverso // ? DBRELATION(2), DBRSELECT(2) // Resultado: // NumOrden 3 ? ALIAS(DBRSELECT(2)) // Resultado: // OrdenInverso . M.s tarde, puede consultar la misma información para un .rea de trabajo no seleccionada utilizando una expresión de alias: USE Fichero NEW ? Cliente->(DBRELATION(2)) // Resultado: NumOrden ? Cliente->(DBRSELECT(2)) // Resultado: 3 Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBSEEK() Desplaza el puntero al registro del valor clave especificado ------------------------------------------------------------------------------ Sintaxis DBSEEK(<expClave>, [<lB.squedaAprox>]) --> lEncontrado Argumentos <expClave> es un valor de cualquier tipo que especifica el valor clave asociado con el registro deseado. <lB.squedaAprox> es un valor l.gico opciónal que especifica si debe realizarse una b.squeda aproximada. Esto determina c.mo se sit.a el .rea de trabajo si no se localiza el valor clave especificado (consulte m.s adelante). Si se omite <lB.squedaAprox>, se utiliza el valor global SET SOFTSEEK. Devuelve DBSEEK() devuelve verdadero (.T.) si se ha localizado el valor clave especificado; de lo contrario, devuelve falso (.F.). Descripción DBSEEK() desplaza el puntero al primer registro l.gico cuyo valor clave sea igual a <expClave>. Si se localiza un registro de este tipo, se convierte en el registro actual y DBSEEK() devuelve verdadero (.T.). De lo contrario, DBSEEK() devuelve falso (.F.) y la situaci.n del .rea de trabajo es la siguiente: para una b.squeda normal (no aproximada), el área de trabajo se sit.a en LASTREC() + 1 y EOF() devuelve verdadero (.T.). En una b.squeda aproximada, el área de trabajo se sit.a en el primer registro cuyo valor clave sea mayor que el valor clave especificado. Si no existe un registro de este tipo, el área de trabajo se sit.a en LASTREC() + 1 y EOF() devuelve verdadero (.T.). En un área de trabajo sin ííndices activos, DBSEEK() no tiene efecto. DBSEEK() realiza la misma función que un mandato SEEK estándar. Si desea más información, consulte el mandato SEEK. Notas . Registros lógicos: DBSEEK() act.a sobre registros lógicos. Los registros se examinan en el orden indexado. Si se establece un filtro, sólo se examinan los registros que cumplan la condición del filtro. . Orden de control: Si el área de trabajo tiene m.s de un índice activo, la operación.se realiza utilizando el orden de control establecido con la función DBSETORDER() o con el mandato SET ORDER. Si desea más información, consulte el mandato SET ORDER. . Entorno de red: Al desplazarse a otro registro en un entorno de red, las modificaciones efectuadas en el registro actual se hacen visibles a los otros procesos. Si desea más información, consulte el capítulo Programaci.n en Red en la gu.a Programaci.n y Utilidades. Ejemplos . En este ejemplo, DBSEEK() desplaza el puntero al registro en la base de datos Empleado, en la que el valor del CAMPO "cNombre" coincide con el valor introducido de cNombre: ACCEPT "Nombre del Empleado: " TO cNombre IF ( Empleado->(DBSEEK(cNombre)) ) Empleado->(MostrarRegistro()) ELSE ? "No encontrado" END Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBSELECTAREA() Cambia el área de trabajo actual ------------------------------------------------------------------------------ Sintaxis DBSELECTAREA(<nArea> | <cAlias>) --> NIL Argumentos <nArea> es un valor numérico comprendido entre 0 y 250, inclusive, que especifica el área de trabajo que se va a seleccionar. <cAlias> es un valor de carácteres que especifica el alias de un área de trabajo ocupada actualmente que se va a seleccionar. Devuelve DBSELECTAREA() devuelve siempre NIL. Descripción DBSELECTAREA() hace que el área de trabajo especificada se convierta en el área de trabajo actual. Todas las operación.s de base de datos posteriores se aplican a este área de trabajo a menos que se especifique explícitamente otra área de trabajo para una operación. DBSELECTAREA() realiza la misma función que un mandato SELECT estándar. Si desea m.s información, consulte el mandato SELECT. Notas . Selecci.n cero: Si se selecciona un área de trabajo cero, el área de trabajo libre con el número m.s bajo se convierte en el área de trabajo actual. . Expresiones de alias: El operador de alias (->) puede seleccionar temporalmente un área de trabajo mientras se eval.a una expresión y, posteriormente, restablecer el área de trabajo anterior. Si desea más información, consulte el operador de alias (->). Ejemplos . El ejemplo siguiente selecciona un área de trabajo mediante el nombre de alias: cApellido := "L.pez" DBUSEAREA(.T., "DBFNTX", "Ventas", "Ventas", .T.) DBSETINDEX( "NOMVENDE" ) DBSETINDEX( "APEVENDE" ) // DBUSEAREA(.T., "DBFNTX", "DISTRIBU", "DISTRIBU", .T.) DBSETINDEX( "NOMDISTR" ) DBSETINDEX( "APEDISTR" ) // DBSELECTAREA( "Ventas" ) // seleccionar .rea // de trabajo "Ventas" IF ( Ventas->(DBSEEK(cApellido)) ) IF Ventas->( DELETED() ) .AND. Ventas->( RLOCK() ) Ventas->( DBRECALL() ) ? "Se ha recuperado el registro borrado." ENDIF ELSE ? "No encontrado" ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBSETDRIVER() Devuelve el controlador de base de datos por defecto y, opciónalmente, selecciona un nuevo controlador ------------------------------------------------------------------------------ Sintaxis DBSETDRIVER([<cControlador>]) --> cControladorActual Argumentos <cControlador> es un valor opciónal de carácteres que especifica el nombre del controlador de base de datos que va a utilizarse para activar y gestionar nuevas .reas de trabajo cuando no hay ningún controlador explícitamente especificado. Devuelve DBSETDRIVER() devuelve el nombre del controlador actual por defecto. Descripción DBSETDRIVER() establece el controlador de base de datos que va a utilizarse cuando se activan nuevas .reas de trabajo sin especificar un controlador. Si el controlador especificado no est. disponible para la aplicación, la llamada no tiene efecto. DBSETDRIVER() devuelve el nombre del controlador actual por defecto, si lo hay. Ejemplos . Este ejemplo convierte al controlador "DBFNDX" en el controlador por defecto. Si el controlador no est. disponible, se emite el mensaje: DBSETDRIVER("DBFNDX") IF ( DBSETDRIVER() <> "DBFNDX" ) ? "Controlador DBFNDX no disponible" ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBSETFILTER() Establece una condición de filtro ------------------------------------------------------------------------------ Sintaxis DBSETFILTER(<bCondici.n>, [<cCondici.n>]) --> NIL Argumentos <bCondici.n> es un bloque de código que expresa la condición de filtro, en forma ejecutable. <cCondici.n> es un valor opciónal de carácteres que expresa la condición de filtro en forma de texto. Si se omite <cCondici.n>, la función DBFILTER() devuelve una cadena vac.a para el área de trabajo. Devuelve DBSETFILTER() devuelve siempre NIL. Descripción DBSETFILTER() establece una condición de filtro l.gico en el .rea de trabajo actual. Cuando se establece un filtro, los registros que no cumplen con la condición del mismo no son l.gicamente visibles. Es decir, las operación.s de base de datos que act.an sobre registros lógicos no procesan esos registros. La expresión de filtro suministrada para DBSETFILTER() resulta verdadera (.T.) si el registro actual cumple con la condición del filtro; y de lo contrario resulta falsa (.F.). La expresión de filtro debe ser un bloque de código (<bCondici.n>) o un bloque de código y texto equivalente (<cCondici.n>). Si se utilizan ambas versiones, deben expresar la misma condición. Si se omite la versi.n de texto, DBFILTER() devuelve una cadena vac.a para el área de trabajo. DBSETFILTER() realiza la misma función que un mandato SET FILTER estándar. Si desea más información, consulte el mandato SET FILTER. Notas . Registros lógicos: DBSETFILTER() afecta a la visibilidad l.gica de los registros (consulte las notas anteriores). . Efectos laterales: La condición de filtro sólo garantiza la limitaci.n de visibilidad en ciertos registros, como se ha descrito anteriormente. Si la expresión de filtro se basa en la información externa al fichero de base de datos o área de trabajo, el efecto es impredecible. Si la expresión de filtro cambia el estado del área de trabajo (por ejemplo, desplaz.ndose a un registro diferente o cambiando el contenido de un registro), el efecto es impredecible. . Contexto de evaluaci.n: Cuando se eval.a la expresión de filtro, el área de trabajo asociada se selecciona autom.ticamente como área de trabajo actual antes proceder a la evaluaci.n. El .rea de trabajo prevíamente seleccionada se restablece posteriormente. Ejemplos . Este ejemplo limita el acceso de datos, a los registros en los que el valor del campo Edad es inferior a 40: USE Empleado NEW DBSETFILTER( {|| Edad < 40}, "Edad < 40" ) DBGOTOP() Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBSETINDEX() Abre un ííndice ------------------------------------------------------------------------------ Sintaxis DBSETINDEX(<cNombreíndice>) --> NIL Argumentos <cNombreíndice> es un valor de carácteres que especifica el nombre del fichero ííndice que va a abrirse. Devuelve DBSETINDEX() devuelve siempre NIL. Descripción DBSETINDEX() abre un fichero ííndice en el área de trabajo actual. Todos los ficheros ííndice que ya estuviesen asociados con el área de trabajo continúa. activos. Si el nuevo índice abierto es el .nico asociado al área de trabajo, se convierte en el índice de control. En caso contrario, el orden de control permanece inalterado. Despu.s de que se haya abierto el nuevo fichero ííndice, el .rea de trabajo se sit.a en el primer registro l.gico en el orden de control. DBSETINDEX() realiza la misma función que un mandato SET INDEX estándar o la cláusula INDEX del mandato USE. Si desea más información, consulte el mandato SET INDEX. Notas . Registros lógicos: La activaci.n de un ííndice afecta al orden l.gico de los registros del área de trabajo. Es decir, cuando un ííndice est. activo, los mandatos que act.an sobre los registros lógicos procesan los registros en el orden del índice. Si el índice de control es un ííndice con el atributo de unicidad, los registros que tengan claves de índice duplicadas no son visibles. . Entorno de red: DBSETINDEX() abre el índice en modo compartido si el fichero de base de datos asociado fue abierto en modo compartido. De lo contrario, el índice se abre en modo exclusivo. Ejemplos . El ejemplo siguiente establece ííndices m.ltiples: cApellido := "L.pez" DBUSEAREA(.T., "DBFNTX", "Ventas", "Ventas", .T.) DBSETINDEX( "NOMBRE" ) DBSETINDEX( "APELLIDO" ) // IF ( Ventas->(DBSEEK(cApellido)) ) IF Ventas->( DELETED() ) .AND. Ventas->( RLOCK() ) Ventas->( DBRECALL() ) ? "Se ha recuperado el registro borrado." ENDIF ELSE ? "No encontrado" ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBSETORDER() Establece el orden de control ------------------------------------------------------------------------------ Sintaxis DBSETORDER(<nN.mOrden>) --> NIL Argumentos <nN.mOrden> es un valor numérico que especifica cu.l de los ííndices activos debe ser el índice de control. Devuelve DBSETORDER() devuelve siempre NIL. Descripción DBSETORDER() controla cu.l de los ííndices activos en el área de trabajo actual es el índice de control. El índice de control es el que determina el orden l.gico de los registros del área de trabajo. Los ííndices activos se numeran del uno al número de ííndices activos, según el orden en que se abrieron los ííndices. <nN.mOrden> especifica el número de índice deseado. DBSETORDER() realiza la misma función que un mandato SET ORDER estándar. Si desea más información, consulte el mandato SET ORDER. Notas . Poner a cero el orden: Si se pone a cero el orden, se accede al área de trabajo en su orden natural (número de registro). S.lo se ve afectado el orden l.gico de los registros; cualquier índice que haya abierto continúa.activo y se mantiene adecuadamente. Ejemplos . Este ejemplo establece el segundo índice, llamado Edad, como el índice de control: USE Empleado NEW SET INDEX TO Nombre, Edad DBSETORDER(2) Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBSETRELATION() Relaciona dos .reas de trabajo ------------------------------------------------------------------------------ Sintaxis DBSETRELATION(<nArea> | <cAlias>, <bExpr>, [<cExpr>]) --> NIL Argumentos <nArea> es un valor numérico que especifica el número del .rea de trabajo hija. <cAlias> es un valor de carácteres que especifica el alias del .rea de trabajo hija. <bExpr> es un bloque de código que contiene la expresión de la relaci.n, en forma ejecutable. <cExpr> es un valor opciónal de carácteres que expresa la expresión relacional en forma de texto. Si se omite <cExpr>, la función DBRELATION() devuelve una cadena vac.a para la relaci.n. Devuelve DBSETRELATION() devuelve siempre NIL. Descripción DBSETRELATION() relaciona el área de trabajo especificada por <nArea> o <cAlias> (el área de trabajo hija), con el área de trabajo actual (el área de trabajo padre). Cualquier relaci.n existente permanece activa. Las .reas de trabajo relacionadas sincronizan las .reas de trabajo hijas con el área de trabajo padre. Esto se consigue desplazando autom.ticamente el área de trabajo hija cuando el área de trabajo padre se desplaza a un nuevo registro. Si existe un ííndice activo en el .rea de trabajo hija, al desplazar el área de trabajo padre se ejecuta una operación.SEEK autom.tica en el área de trabajo hija; la clave de b.squeda se basa en la expresión especificada mediante <bExpr> y/o <cExpr>. Si el área de trabajo hija no tiene un ííndice activo, al desplazar el área de trabajo padre se ejecuta un GOTO autom.tico en el área de trabajo hija; el número de registro para GOTO se basa en la expresión especificada por <bExpr> y/o <cExpr>. La expresión de relaci.n puede ser un bloque de código (<bExpr>) o un bloque de código y un texto equivalente (<cExpr>). Si se utilizan ambas versiones, deben ser equivalentes. Si se omite la versi.n de texto, DBRELATION() devuelve una cadena vac.a para la relaci.n. DBSETRELATION() realiza la misma función que un mandato SET RELATION estándar con la cláusula ADDITIVE. Si desea más información, consulte el mandato SET RELATION. Notas . Efectos laterales: DBSETRELATION() sólo garantiza la sincronizaci.n de las .reas de trabajo, seg.n se describe m.s arriba. Si la expresión relacional se basa en información externa al .rea de trabajo superior o en su fichero de base de datos asociado, el efecto es impredecible. Si la expresión cambia el estado de cualquier .rea de trabajo (por ejemplo, desplazando el cursor a un registro diferente o cambiando el contenido de un registro), el efecto es impredecible. . Contexto de evaluaci.n: Al evaluar la expresión relacional, el área de trabajo padre se selecciona autom.ticamente como el .rea actual antes de proceder a la evaluaci.n: posteriormente, el área de trabajo anterior se restablece autom.ticamente. . B.squeda aproximada: Las operación.s de b.squeda que se producen como parte del posiciónamiento relacional no son nunca b.squedas aproximadas. Si el movimiento relacional no tiene .xito, el área de trabajo secundaria se sit.a en LASTREC() + 1, el estado FOUND() devuelve falso (.F.) y el estado EOF() devuelve verdadero (.T.). Ejemplos . Este ejemplo muestra una de los usos m.s frecuentes de la función DBSETRELATION(): USE Empleado NEW USE Departamento NEW INDEX Dept SELECT Empleado DBSETRELATION("Departamento", {|| Empleado->Dept},; "Empleado->Dept") LIST Empleado->Nombre, Departamento->Nombre Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBSKIP() Desplaza el puntero respecto al registro actual ------------------------------------------------------------------------------ Sintaxis DBSKIP([<nRegistros>]) --> NIL Argumentos <nRegistros> es el número de registros lógicos que se va a desplazar, respecto al registro actual. Un valor positivo significa saltar hacia adelante y uno negativo hacerlo hacia atr.s. Si se omite este argumento, se supone un valor de 1. Devuelve DBSKIP() devuelve siempre NIL. Descripción DBSKIP() desplaza hacia adelante o hacia atr.s el puntero respecto al registro actual. Si se intenta pasar m.s all. del último registro, el área de trabajo se sit.a en LASTREC() + 1 y EOF() devuelve verdadero (.T.). Si intenta pasar antes del primer registro, el área de trabajo se sit.a en el primer registro y BOF() devuelve verdadero (.T.). DBSKIP() realiza la misma función que un mandato SKIP estándar. Si desea más información, consulte el mandato SKIP. Notas . Registros lógicos: DBSKIP() act.a en registros lógicos. Si existe un ííndice activo, los registros se visualizan en el orden indexado. Si se establece un filtro, sólo se visualizan los registros que cumplan con la condición del filtro. . Orden de control: Si el área de trabajo tiene m.s de un índice activo, se ejecuta la operación.de salto utilizando el orden establecido por la función DBSETORDER() o por el mandato SET ORDER. Si desea más información, consulte el mandato SET ORDER. . Entorno de red: Al desplazarse a otro registro en un entorno de red, las modificaciones efectuadas en el registro actual se hacen visibles a los otros procesos. Si desea más información, consulte el capítulo Programaci.n en Red en la gu.a Programaci.n y Utilidades. Ejemplos . Este ejemplo muestra una utilización t.pica de la función DBSKIP(): DBGOTOP() DO WHILE ( !EOF() ) ? FIELD->Nombre DBSKIP() ENDDO Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBSTRUCT() Crea una matriz, que contiene la estructura de una base de datos ------------------------------------------------------------------------------ Sintaxis DBSTRUCT() --> aEstruct Devuelve DBSTRUCT() devuelve la estructura del fichero de base de datos actual en una matriz, cuya longitud es igual al número de campos del fichero de base de datos. Cada elemento de la matriz es una submatriz, que contiene la información de un campo. Las submatrices tienen el formato siguiente: Matriz de Retorno DBSTRUCT() ------------------------------------------------------------------------ Posici.n Metas.mbolo Dbstruct.ch ------------------------------------------------------------------------ 1 cNombre DBS_NAME 2 cTipo DBS_TYPE 3 nLongitud DBS_LEN 4 nDecimales DBS_DEC ------------------------------------------------------------------------ Si no hay fichero de base de datos en uso en el área de trabajo actual, DBSTRUCT() devuelve una matriz vac.a ({}). Descripción DBSTRUCT() es una función de base de datos que act.a de forma similar a COPY STRUCTURE EXTENDED creando una matriz de información de estructura en lugar de un fichero de base de datos de información de estructura. Existe otra función, DBCREATE(), que puede crear un fichero de base de datos a partir de la matriz de estructura. Por defecto, DBSTRUCT() act.a en el área de trabajo seleccionada actualmente. funcióna en un área de trabajo no seleccionada si la especifica como parte de una expresión de alias, tal como se muestra a continúa.ión. Observe, que un fichero de cabecera, Dbstruct.ch, situado en \CLIPPER5\INCLUDE contiene una serie de constantes declaradas para cada atributo de campo. Ejemplos . Este ejemplo abre dos ficheros de base de datos, después, se crea una matriz que contiene la estructura de base de datos, utilizando DBSTRUCT() en una expresión alias. Los nombres de campo se listan utilizando AEVAL(): #include "Dbstruct.ch" // LOCAL aEstruct USE Cliente NEW USE Facturas NEW // aEstruct := Cliente->(DBSTRUCT()) AEVAL( aEstruct, {|aCampo| QOUT(aCampo[DBS_NAME])} ) Ficheros: La biblioteca asociada es CLIPPER.LIB, el fichero de cabecera es Dbstruct.ch.
DBUNLOCK() Libera todos los bloqueos del área de trabajo actual ------------------------------------------------------------------------------ Sintaxis DBUNLOCK() --> NIL Devuelve DBUNLOCK() devuelve siempre NIL. Descripción DBUNLOCK() libera cualquier bloqueo de registro o fichero obtenido mediante el proceso actual en el área de trabajo actual. DBUNLOCK() sólo es significativo en una base de datos compartida en un entorno de red. DBUNLOCK() realiza la misma función que un mandato UNLOCK estándar. Si desea más información, consulte el mandato UNLOCK. Notas . Entorno de red: Al desplazarse a otro registro en un entorno de red, las modificaciones efectuadas en el registro actual se hacen visibles a los otros procesos. Si desea más información, consulte el capítulo Programaci.n en Red de la gu.a Programaci.n y Utilidades. Ejemplos . En el ejemplo siguiente se ilustra una utilización b.sica de la función DBUNLOCK(): cApellido := "L.pez" USE Ventas SHARED NEW VIA "DBFNTX" DBSETINDEX( "APELLIDO" ) // IF ( Ventas->(DBSEEK(cApellido)) ) IF Ventas->( RLOCK() ) Ventas->( DBDELETE() ) ? "Registro borrado: ", Ventas->( DELETED() ) Ventas->( DBUNLOCK() ) ELSE ? "No puede bloquearse el registro..." ENDIF ELSE ? "No encontrado" ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBUNLOCKALL() Libera todos los bloqueos en todas las áreas de trabajo ------------------------------------------------------------------------------ Sintaxis DBUNLOCKALL() --> NIL Devuelve DBUNLOCKALL() devuelve siempre NIL. Descripción DBUNLOCKALL() libera cualquier bloqueo de registro o de fichero realizado con el proceso actual en cualquier área de trabajo. DBUNLOCKALL() sólo es significativo en una base de datos compartida en un entorno de red. Equivale a utilizar DBUNLOCK() en las .reas de trabajo ocupadas. DBUNLOCKALL() realiza la misma función que un mandato UNLOCK ALL. Si desea más información, consulte el mandato UNLOCK ALL. Ejemplos . En el ejemplo siguiente se marca un registro para borrarlo, si el intento de ejecutar RLOCK() ha sido satisfactorio, y luego elimina todos los bloqueos en todas las áreas de trabajo: cApellido := "L.pez" USE Ventas SHARED NEW VIA "DBFNTX" DBSETINDEX( "NOMVENDE" ) DBSETINDEX( "APEVENDE" ) // USE DISTRIBU SHARED NEW VIA "DBFNTX" DBSETINDEX( "NOMDISTR" ) DBSETINDEX( "APEDISTR" ) // DBSELECTAREA( "Ventas" ) // seleccionar el .rea // de trabajo "Ventas" // IF ( Distribu->(DBSEEK(cApellido)) ) IF Distribu->( DELETED() ) ? "Registro borrado: ", Distribu->( DELETED() ) IF Distribu->( RLOCK() ) Distribu->( DBRECALL() ) ? "Registro recuperado..." ENDIF ENDIF ELSE ? "No encontrado" DBUNLOCKALL() // eliminar todos los bloqueos ENDIF // en las .reas de trabajo Ficheros: La biblioteca asociada es CLIPPER.LIB.
DBUSEAREA() Abre un fichero de base de datos en un área de trabajo ------------------------------------------------------------------------------ Sintaxis DBUSEAREA( [<lAreaNueva>], [<cControlador>], <cNombre>, [<xcAlias>], [<lCompartido>], [<lSoloLectura>]) --> NIL Argumentos <lAreaNueva> es un valor l.gico opciónal. Un valor verdadero (.T.) selecciona el área de trabajo no ocupada que tenga la numeraci.n m.s baja como el área de trabajo actual antes de la utilización. Si <lAreaNueva> es falso (.F.) o se omite, se utiliza el área de trabajo actual. Si el área de trabajo est. ocupada se cierra primero. <cControlador> es un valor opciónal de carácteres. Si se indica especifica el nombre del controlador de la base de datos que se utilizar. con al área de trabajo. Si se omite <cControlador>, se utiliza el controlador por defecto actual (consulte la nota siguiente). <cNombre> especifica el nombre del fichero de base de datos (.dbf) que va a abrirse. <xcAlias> es un valor opciónal de carácteres. Si se indica, especifica el alias que va a asociarse con el área de trabajo. El alias debe ser un identificador víaacute;lido de CA-Clipper. Un <xcAlias> víaacute;lido puede ser cualquier identificador legal (es decir, debe comenzar con un carácter alfabético y puede contener carácteres numéricos o alfabéticos y el de subrayado). En una aplicación, CA-Clipper no acepta alias duplicados. Si se omite <xcAlias>, el alias por defecto es <cNombre>. <lCompartido> es un valor l.gico opciónal. Si se indica, especifica si el fichero de base de datos (.dbf) debe ser accesible a los otros procesos de una red. Un valor verdadero (.T.) especifica que otros procesos podr.n acceder; un valor falso (.F.) especifica que el proceso actual debe tener acceso exclusivo. Si se omite <lCompartido>, el valor global actual de SET EXCLUSIVE determina si se permite el acceso compartido. <lS.loLectura> es un valor l.gico opciónal que especifica si se prohiben las actualizaciones en el área de trabajo actual. Un valor verdadero (.T.) prohibe las actualizaciones; un valor falso (.F.) las permite. Un valor verdadero (.T.) también permite el acceso de sólo lectura al fichero de base de datos (.dbf) especificado. Si se omite <lS.loLectura>, el valor por defecto es falso (.F.). Devuelve DBUSEAREA() devuelve siempre NIL. Descripción DBUSEAREA() asocia el fichero de base de datos (.dbf) especificado con el área de trabajo actual. DBUSEAREA() realiza la misma función que un mandato USE estándar. Si desea más información, consulte el mandato USE. Notas . Controlador actual: Si no se especifica ningún controlador con la llamada a DBUSEAREA() se utiliza el controlador por defecto. Si est. disponible m.s de un controlador para la aplicación, el controlador por defecto es el especificado en la llamada m.s reciente a DBSETDRIVER(). Si no se ha invocado antes DBSETDRIVER(), el nombre del controlador por defecto no est. determinado. Ejemplos . Este ejemplo es una utilización t.pica de la función DBUSEAREA(): DBUSEAREA(.T., "DBFNDX", "Empleados") Ficheros: La biblioteca asociada es CLIPPER.LIB.
DELETED() Devuelve el estado del indicador de borrado del registro actual ------------------------------------------------------------------------------ Sintaxis DELETED() --> lBorrado Devuelve DELETED() devuelve verdadero (.T.) si el registro actual est. marcado para borrarse; de lo contrario, devuelve falso (.F.). Si no existe fichero de base de datos en uso en el área de trabajo actual, DELETED() devuelve falso (.F.). Descripción DELETED() es una función de base de datos que determina si el registro actual del área de trabajo activa est. marcado para borrarse. Puesto que cada área de trabajo con un fichero de base de datos abierto puede tener un registro actual, cada área de trabajo tiene su propio valor DELETED(). Por defecto, DELETED() funcióna en el área de trabajo seleccionada actualmente. funcióna en un área de trabajo no seleccionada si lo especifica como parte de una expresión de alias (consulte el ejemplo siguiente). En las aplicaciónes, DELETED() se utiliza normalmente para consultar el estado borrado como parte de las condiciónes de tratamiento de registros o para mostrar el estado borrado como una parte de pantallas e informes. Ejemplos . Este ejemplo utiliza DELETED() en el área de trabajo actual y en una no seleccionada: USE Cliente NEW USE Ventas NEW ? DELETED() // Resultado: .F. DELETE ? DELETED() // Resultado: .T. ? Cliente->(DELETED()) // Resultado: .F. . Este ejemplo utiliza DELETED() para mostrar un estado de borrado de registro en pantallas e informes: @ 1, 65 SAY IF(DELETED(), "Inactivo", "Activo") Ficheros: La biblioteca asociada es CLIPPER.LIB.
DESCEND() Crea un valor clave para un ííndice descendente ------------------------------------------------------------------------------ Sintaxis DESCEND(<exp>) --> ValorDescendente Argumentos <exp> es cualquier expresión víaacute;lida de carácter, fecha, l.gica o numérica. El tipo memo se trata del mismo modo que el tipo de carácteres. Devuelve DESCEND() devuelve una expresión invertida del mismo tipo de datos que <exp>, con la excepci.n de las fechas que devuelven un valor numérico. Si se aplica DESCEND() a CHR(0), devuelve siempre CHR(0). Descripción DESCEND() es una función de conversión que devuelve la forma inversa de la expresión especificada, que va a utilizarse con INDEX para crear ííndices en orden descendente. Especifique qu. parte de la expresión clave desea que sea descendente como el argumento DESCEND(). Si desea ejecutar posteriormente una b.squeda con SEEK, especifique DESCEND() en la expresión de b.squeda. Notas . La forma preferible de crear un ííndice descendente es útilizar la cláusula DESCENDING del mandato INDEX. La utilización de DESCENDING es equivalente a especificar la función DESCEND(), pero sin reducir la velocidad durante las actualizaciones de índice. Si crea un ííndice DESCENDING, no necesita utilizar la función DESCEND() durante SEEK. DESCENDING es un atributo del fichero (.ntx), donde se almacena y se utiliza para reindexados. Ejemplos . Este ejemplo utiliza DESCEND() en una expresión INDEX para crear un ííndice de fecha de orden descendente: USE Ventas NEW INDEX ON DESCEND(FechaPedido) TO FechaVentas Luego, utilice DESCEND() para efectuar la b.squeda en el índice descendente: SEEK DESCEND(dBuscarFecha) . Este ejemplo ilustra c.mo crear un ííndice de orden descendente, utilizando m.s de un tipo de datos. Aqu., la clave se ha creado concatenando campos de fecha y de carácteres después de que se haya realizado la conversión del tipo apropiado. Este ejemplo utiliza STR() en lugar de DTOS() puesto que DESCEND() de una fecha devuelve un valor numérico: USE Ventas NEW INDEX ON STR(DESCEND(FechaVenta)) + Vendedor TO ULTVENDA Ficheros: La biblioteca asociada es EXTEND.LIB.
DEVOUT() Escribe un valor en el dispositivo de salida actual ------------------------------------------------------------------------------ Sintaxis DEVOUT(<exp>, [<cCadenaColor>]) --> NIL Argumentos <exp> es el valor que va a mostrarse. <cCadenaColor> es un argumento opciónal que define el color de la pantalla de <exp>. Si se ha establecido SET DEVICE TO SCREEN, la salida se muestra en el color especificado. Si no se especifica, <exp> se muestra en el color estándar del sistema actual, seg.n se define mediante SETCOLOR(). <cCadenaColor> es una expresión de carácteres que contiene la selecci.n de color estándar. Si desea especificar una selecci.n de color literal, debe encerrarla entre comillas. Devuelve DEVOUT() devuelve siempre NIL. Descripción DEVOUT() es una función de visualización de pantalla completa, que escribe el valor de una expresión sencilla en el dispositivo de salida actual en la posición actual del cursor o en la posición del cabezal de impresi.n. STD.CH usa DEVOUT() con DEVPOS() para definir el mandato @...SAY. Ejemplos . Este ejemplo muestra la relaci.n entre la función DEVOUT() y el mandato @...SAY: DEVPOS(10, 10) DEVOUT("Hola .qu. tal?", "BG+/B")) // @ 10, 10 SAY "Hola .qu. tal?" COLOR "BG+/B" Ficheros: La biblioteca asociada es CLIPPER.LIB.
DEVOUTPICT() Escribe un valor en el dispositivo de salida actual utilizando un patr.n de formato ------------------------------------------------------------------------------ Sintaxis DEVOUTPICT(<exp>, <cPatrónFormato>, [<cCadenaColor>]) --> NIL Argumentos <exp> es el valor que va a mostrarse. <cPatrónFormato> define el patr.n de formato para la visualización de <exp>. El patr.n de formato aqu. especificado es el mismo que se utiliza con @...SAY o TRANSFORM y puede incluir plantillas y funciónes. <cCadenaColor> es un argumento opciónal que define el color de visualización de <exp>. Si se ha establecido SET DEVICE TO SCREEN, la salida se muestra en el color especificado. Si no se especifica, <exp> se muestra como el color estándar del sistema actual, definido con SETCOLOR(). <cCadenaColor> es una expresión de carácteres que contiene la selecci.n de color estándar. Si desea especificar una selecci.n de color literal, debe encerrarla entre comillas. Devuelve DEVOUTPICT() devuelve siempre NIL. Descripción DEVOUTPICT() es una función de visualización de pantalla completa, que escribe el valor de una expresión en el dispositivo de salida actual, en la posición actual del cursor o del cabezal de impresión. DEVOUTPICT() se utiliza con DEVPOS() en STD.CH para definir el mandato @...SAY utilizado con una cláusula PICTURE. Ejemplos . Este ejemplo muestra la relaci.n entre la función DEVOUTPICT() y el mandato @...SAY: DEVPOS(10, 10) DEVOUTPICT("Hola .qu. tal?", "@!", "BG+/B")) // @ 10, 10 SAY "Hola .qu. tal?" PICTURE "@!" COLOR "BG+/B" Ficheros: La biblioteca asociada es CLIPPER.LIB.
DEVPOS() Desplaza el cursor o el cabezal de impresión a una nueva posición, según el dispositivo actual ------------------------------------------------------------------------------ Sintaxis DEVPOS(<nFila>, <nCol>) --> NIL Argumentos <nFila> y <nCol> son las nuevas posiciónes de fila y columna del cursor o del cabezal de impresión. Devuelve DEVPOS() devuelve siempre NIL. Descripción DEVPOS() es una función de entorno, que sit.a el cursor en la pantalla o desplaza el cabezal de impresión, en función del valor actual de SET DEVICE. Si se ha establecido SET DEVICE TO SCREEN, DEVPOS() act.a igual que SETPOS(): desplaza el cursor a la situaci.n especificada y actualiza ROW() y COL() con la nueva posición del cursor. Si se ha establecido SET DEVICE TO PRINTER, DEVPOS() desplaza el cabezal de impresión. Para ello, envía cierto número de carácteres de salto de línea y/o de salto de p.gina a la impresora, haciendo avanzar la cabeza de impresión a la nueva posición. Si el valor de SET MARGIN actual es mayor que cero, dicho valor se a.ade a <nCol>. El cabezal de impresión se desplaza a la posición espec.fica de <nFila> y <nCol> y PROW() y PCOL() se actualizan. Si <nFila> o <nCol> son menores que los valores PROW() y PCOL() actuales, el cabezal de impresión se desplaza seg.n estas reglas: . Si <nFila> es menor que PROW(), se envía un EJECT (CHR(12)) autom.tico a la impresora seguido por el número de carácteres de salto de línea (CHR(10)) necesarios para situar la cabeza de impresi.n en la <nFila> de la p.gina siguiente. . Si <nCol>, incluyendo el valor de SET MARGIN actual, es menor que PCOL(), se envían a la impresora un carácter de retorno de carro (CHR(13)) y el número de carácteres de espacio necesarios para situar la cabeza de impresión en <nCol>. Si desea evitar este comportamiento, utilice SETPRC() para asignar los nuevos valores a PROW() y PCOL() antes de utilizar DEVPOS(). Consulte la Descripción de SETPRC() si desea más información. Si la salida de la impresora se redirige a un fichero utilizando el mandato SET PRINTER, DEVPOS() actualiza el fichero en lugar de la impresora. Ficheros: La biblioteca asociada es CLIPPER.LIB.
DIRECTORY() Crea una matriz de información de directorios y de ficheros ------------------------------------------------------------------------------ Sintaxis DIRECTORY(<cEspecDir>, [<cAtributos>]) --> aDirectorio Argumentos <cEspecDir> identifica la unidad, el directorio y el fichero para la b.squeda en el directorio. Se permiten carácteres comod.n en la especificación de fichero. Si se omite <cEspecDir>, el valor por defecto es *.*. <cAtributos> incluye en la información devuelta los ficheros que tengan los atributos especificados. <cAtributos> es una cadena, que contiene uno o m.s de los carácteres siguientes: Atributos DIRECTORY() ------------------------------------------------------------------------ Atributo Significado ------------------------------------------------------------------------ H Incluir ficheros ocultos S Incluir ficheros del sistema D Incluir directorios V Buscar la etiqueta de volumen del DOS y excluir el resto de los ficheros ------------------------------------------------------------------------ Los ficheros normales siempre se incluyen en la b.squeda, a menos que especifique V. Devuelve DIRECTORY() devuelve una matriz de submatrices, cada una conteniendo información de cada fichero que cumpla la <cEspecDir>. La submatriz tiene la estructura siguiente: Estructura de Submatriz DIRECTORY() ------------------------------------------------------------------------ Posici.n Metas.mbolo Directry.ch ------------------------------------------------------------------------ 1 cNombre F_NAME 2 cTama.o F_SIZE 3 fFecha F_DATE 4 cHora F_TIME 5 cAtributos F_ATT ------------------------------------------------------------------------ Si no se encuentran ficheros que coincidan con <cEspecDir> o si <cEspecDir> es una vía o una especificación de fichero ilegal, DIRECTORY() devuelve una matriz vac.a ({}). Descripción DIRECTORY() es una función de entorno que devuelve información sobre los ficheros en el directorio actual o en el directorio especificado. Es similar a ADIR(), pero devuelve una sola matriz en lugar de a.adir valores a una serie de matrices existentes pasadas por referencia. Utilice DIRECTORY() para ejecutar acciones en grupos de ficheros. En combinación con AEVAL(), puede definir un bloque que puede aplicarse a todos los ficheros que cumplan la <cEspecDir> especificada. El fichero de cabecera, Directry.ch, situado en el subdirectorio \CLIPPER5\INCLUDE contiene #defines para los subííndices de submatriz, a fin de mejorar la legibilidad de referencias a cada submatriz. Ejemplos . Este ejemplo crea una matriz de información sobre ficheros en el directorio actual y después se listan los nombres de los ficheros utilizando AEVAL() y QOUT(): #include "Directry.ch" // aDirectorio := DIRECTORY("*.*", "D") AEVAL( aDirectorio, {|aFichero| QOUT(aFichero[F_NAME])} ) Ficheros: La biblioteca asociada es CLIPPER.LIB, el fichero de cabecera es Directry.ch.
DISKSPACE() Devuelve el espacio disponible en el disco especificado ------------------------------------------------------------------------------ Sintaxis DISKSPACE([<nUnidad>]) --> nBytes Argumentos <nUnidad> es el número de la unidad que se va a examinar, donde uno es la unidad A, dos es B, tres es C, etc. Si se omite <nUnidad> o se especifica cero, el valor por defecto es la unidad DOS actual. Devuelve DISKSPACE() devuelve el número de bytes de espacio vac.o en la unidad de disco especificada, en forma de valor numérico entero. Descripción DISKSPACE() es una función de entorno que determina el número de bytes disponibles en la unidad de disco especificada. Se utiliza antes de ejecutar un mandato COPY o SORT en otra unidad, para determinar si existe suficiente espacio. También puede utilizarse con RECSIZE() y RECCOUNT() para crear un procedimiento para realizar una copia de seguridad de ficheros de base de datos. DISKSPACE() es independiente del valor de SET DEFAULT. Ejemplos . Este ejemplo es una función definida por el usuario que muestra la utilización de DISKSPACE() para hacer una copia de seguridad de un fichero de base de datos en otra unidad: FUNCTION CopiaSeg( cFicheroDestáno, cUnidadDestáno ) LOCAL nEspacioNecesario, nUnidadDestáno // nEspacioNecesario := INT((RECSIZE() * ; LASTREC()) + HEADER() + 1) nUnidadDestáno := ASC(UPPER(cUnidadDestáno)) - 64 // IF DISKSPACE(nUnidadDestáno) < nEspacioNecesario RETURN .F. ENDIF COPY TO (cUnidadDestáno + ":" + cFicheroDestáno) // RETURN .T. Ficheros: La biblioteca asociada es EXTEND.LIB, el fichero fuente es EXAMPLEC.C.
DISPBEGIN() Inicia el almacenamiento en memoria intermedia de la salida por pantalla ------------------------------------------------------------------------------ Sintaxis DISPBEGIN() --> NIL Devuelve DISPBEGIN() devuelve siempre NIL. Descripción DISPBEGIN() es una función de pantalla, que informa al sistema de salida por pantalla de CA-Clipper que la aplicación va a realizar una serie de operación.s de pantalla. Utilice DISPBEGIN() con DISPEND() para permitir que el sistema de salida en pantalla sit.e en la memoria intermedia las actualizaciones que se realicen. La salida en pantalla comprendida entre DISPBEGIN() y DISPEND() se almacena en las memorias intermedias internas. Al ejecutarse DISPEND() , las actualizaciones pendientes aparecen en la pantalla f.sica. Es .til en aplicaciónes cuyas visualizaciónes sean complejas y lentas y en las que se desea aumentar la velocidad. Las llamadas DISPBEGIN() y DISPEND() son opciónales. No son necesarias para la salida normal. Notas . Llamadas anidadas: Las llamadas DISPBEGIN() pueden anidarse internamente. Si se producen varias llamadas DISPBEGIN(), se permite el almacenamiento en la memoria intermedia hasta que se produzca el número correspondiente de llamadas DISPEND(). . Operaciones garantizadas: Las actualizaciones de pantalla realizadas entre DISPBEGIN() y DISPEND() no siempre están almacenadas en la memoria intermedia. Algunas actualizaciones pueden hacerse visibles antes de invocar DISPEND(). Sin embargo, todas las actualizaciones son visibles después de la llamada DISPEND() de cierre. . Operaciones de terminal: No deben realizarse operación.s de entrada de terminal, como por ejemplo, INKEY() o READ entre DISPBEGIN() y DISPEND(). En caso contrario, puede perderse la entrada o la salida por la pantalla. . Operaciones incompatibles: La salida de pantalla de otras funciónes de visualización que no sean de CA-Clipper (por ejemplo, mediante bibliotecas incorporadas o por el DOS a trav.s de OUTSTD(), etc.) pueden no ser compatibles con DISPBEGIN() y DISPEND(). Es posible que se pierda la salida. Ejemplos . Este ejemplo almacena en la memoria intermedia la salida de pantalla, actualiza la pantalla y después muestra la salida de la memoria intermedia: DISPBEGIN() // Iniciar almacenamiento de la pantalla // SETPOS(10, 10) DISPOUT("Una actualizaci.n de pantalla") SETPOS(11, 10) DISPOUT("Otra visualización de pantalla") // DISPEND() // Mostrar los datos de la memoria // intermedia Ficheros: La biblioteca asociada es CLIPPER.LIB.
DISPBOX() Muestra un cuadro en la pantalla ------------------------------------------------------------------------------ Sintaxis DISPBOX(<nSup>, <nIzq>, <nInf>, <nDer>, [<cnCadenaCuadro>], [<cCadenaColor>]) --> NIL Argumentos <nSup>, <nIzq>, <nInf> y <nDer> definen las coordenadas del cuadro. DISPBOX() dibuja un cuadro utilizando valores de fila comprendidos entre cero y MAXROW() y valores de columna entre cero y MAXCOL(). Si <nInf> y <nDer> son mayores que MAXROW() y MAXCOL(), el .ngulo inferior derecho se dibuja fuera de la pantalla. <cnCadenaCuadro> es una expresión numérica o de carácteres que define los carácteres de borde del cuadro. Si se especifica como una expresión numérica, un valor 1 muestra un cuadro de una línea y un valor 2 muestra un cuadro de dos líneas. El resto de valores numéricos muestran un cuadro de una sola línea. Si <cnCadenaCuadro> es una expresión de carácteres, especifica los carácteres que van a utilizarse para dibujar el cuadro. Esta es una cadena de ocho carácteres de borde y uno de relleno. Si se especifica <cnCadenaCuadro> como un sólo carácter, dicho carácter se utiliza para dibujar todo el cuadro. Si no se especifica este argumento, se dibuja un cuadro de una sola línea. <cCadenaColor> define el color de pantalla del cuadro que se va a dibujar. Si no se especifica, el cuadro se dibuja en el color estándar del sistema actual, tal como se define con SETCOLOR(). Devuelve DISPBOX() devuelve siempre NIL. Descripción DISPBOX() es una función de pantalla, que dibuja un cuadro en las coordenadas de pantalla especificadas, en el color indicado. Si especifica <cnCadenaCuadro>, DISPBOX() dibuja un cuadro en la pantalla, utilizando un borde configurable y carácteres de relleno. DISPBOX() dibuja el cuadro utilizando <cnCadenaCuadro> comenzando por el .ngulo superior izquierdo, siguiendo en sentido de las agujas del reloj y llenando el .rea de la pantalla con el noveno carácter. Si no se especifica dicho carácter, el .rea de pantalla dentro del cuadro no se dibuja. El texto existente y el color permanecen inalterables. Despu.s de ejecutar DISPBOX(), el cursor se encuentra en el .ngulo superior de la regi.n del cuadro, en <nSup> + 1 y <nIzq> + 1. ROW() y COL() también se actualizan para reflejar la nueva posición del cursor. Recuerde que Box.ch, situado en \CLIPPER5\INCLUDE, proporciona constantes para diversas configuraciónes de borde. Ejemplos . Este código de ejemplo muestra un cuadro de doble línea utilizando un valor numérico para especificar el borde del cuadro: #define B_SINGLE 1 #define B_DOUBLE 2 // DISPBOX(1, 1, 10, 10, B_DOUBLE, "BG+/B") . Este ejemplo muestra un cuadro de una sola línea en la parte superior y un cuadro con dos líneas en la parte lateral de la pantalla, especificando carácteres de borde con una constante declarada definida en Box.ch: #include "Box.ch" // DISPBOX(1, 1, 10, 10, B_SINGLE_DOUBLE, "BG+/B") Ficheros: La biblioteca asociada es CLIPPER.LIB, el fichero de cabecera es Box.ch.
DISPCOUNT() Devuelve el número de llamadas DISPEND() pendientes ------------------------------------------------------------------------------ Sintaxis DISPCOUNT() --> nN.mLlamadas Devuelve DISPCOUNT() devuelve el número de llamadas DISPEND() necesarias para restablecer el contexto de la pantalla original. Descripción DISPCOUNT() permite determinar el contexto de la pantalla actual. CA-Clipper utiliza los contextos de pantalla para las operación.s de supervisi.n del almacenamiento en la memoria intermedia y de la visualización. Cada llamada a DISPBEGIN() define un nuevo contexto de pantalla. No puede salirse de ese contexto de pantalla hasta que se ejecute la sentencia DISPEND() correspondiente. Puesto que es posible anidar llamadas DISPBEGIN(), puede utilizar DISPCOUNT() para determinar si existen llamadas pendientes de actualizaci.n de pantalla. Ejemplos . Este ejemplo guarda la selecci.n de DISPCOUNT(), después libera todos los contextos de pantalla pendientes y luego escribe la pantalla: PROCEDURE ObligarVisualz(cExp) LOCAL nGuardVeces nGuardVeces := DISPCOUNT() // Descartar todos los contextos pendientes DO WHILE ( DISPCOUNT() > 0) DISPEND() ENDDO DISPOUT(cExp) // Volver al contexto de pantalla inicial DO WHILE (DISPCCOUNT() < nGuardVeces ) DISPBEGIN() ENDDO RETURN Ficheros: La biblioteca asociada es CLIPPER.LIB.
DISPEND() Muestra en pantalla las actualizaciones almacenadas en la memoria intermedia ------------------------------------------------------------------------------ Sintaxis DISPEND() --> NIL Devuelve DISPEND() devuelve siempre NIL. Descripción DISPEND() es una función de pantalla, que informa al sistema de salida en pantalla de CA-Clipper, que la aplicación ha finalizado una serie de operación.s de pantalla. DISPEND() se utiliza con DISPBEGIN(), para que el sistema de salida almacene en la memoria intermedia las actualizaciones de pantalla. Esto puede ser importante en aplicaciónes de visualizaciónes complejas y lentas, cuya velocidad se desea aumentar. Si desea más información, consulte DISPBEGIN() Ejemplos . Este ejemplo almacena en la memoria intermedia la salida en pantalla, la actualiza y después se muestra en ella el contenido de la memoria intermedia: DISPBEGIN() // Iniciar el almacenamiento en la // memoria intermedia // SETPOS(10, 10) DISPOUT("Una actualizaci.n de pantalla") SETPOS(11, 10) DISPOUT("Otra actualizaci.n de pantalla") // DISPEND() // Mostrar los datos de la memoria // intermedia Ficheros: La biblioteca asociada es CLIPPER.LIB.
DISPOUT() Escribe un valor en la pantalla ------------------------------------------------------------------------------ Sintaxis DISPOUT(<exp>, [<cCadenaColor>]) --> NIL Argumentos <exp> es el valor que se va a mostrar. <cCadenaColor> es un argumento opciónal, que define el color de presentaci.n de <exp>. Si no se especifica, <exp> se muestra en el color estándar del sistema, definido mediante SETCOLOR(). <cCadenaColor> es una expresión de carácteres que contiene la selecci.n de color estándar. Si desea especificar una selecci.n de color literal, debe encerrarla entre comillas. Devuelve DISPOUT() devuelve siempre NIL. Descripción DISPOUT() es una función de salida sencilla que escribe el valor de una expresión en la pantalla en la posición actual del cursor. Esta función ignora el valor de SET DEVICE ; la salida se dirige siempre a la pantalla. S.lo puede utilizarse esta función dentro de otro procedimiento o función. Ejemplos . Este ejemplo muestra la salida en la pantalla en una situaci.n especificada utilizando colores diferentes. Observe c.mo se guarda la posición del cursor y se restablece utilizando ROW(), COL() y SETPOS(): PROCEDURE Mostrarlo LOCAL nFila, nCol ? nCol := COL() // guardar la posición del ?? nFila := ROW() // cursor original INKEY(2) SETPOS(nFila, nCol) DISPOUT("Esto es una prueba de DISPOUT()") ? COL() // mostrar la posición ?? ROW() // actual del cursor INKEY(2) SETPOS(nFila, nCol) DISPOUT(space(26)) // borrar la posición // original SET DEVICE TO PRINTER // ignorar SET DEVICE SETPOS(nFila, nCol) // mostrar en la DISPOUT(" completa") // posición original RETURN Ficheros: La biblioteca asociada es CLIPPER.LIB.
DOSERROR() Devuelve el último número de error DOS ------------------------------------------------------------------------------ Sintaxis DOSERROR([<nNuevoC.digoSO>]) --> nC.digoSO Argumentos <nNuevoC.digoSO>, si se especifica, altera el valor devuelto por DOSERROR(). Debe ser un valor numérico que contenga un número de error DOS. Devuelve DOSERROR() devuelve el número de error DOS como un valor numérico entero. Descripción DOSERROR() es una función de error que devuelve el último código de error DOS que ha producido una activaci.n del bloque de error de ejecución. Cuando se produce un error de ejecución, la función DOSERROR() toma el valor del error DOS actual si la operación.tiene un error DOS asociado. Este valor se mantiene hasta que se produzca otro error de ejecución. Si la operación.fallida no tiene un error DOS asociado, DOSERROR() devuelve cero. Con funciónes de fichero de bajo nivel, FERROR() devuelve el mismo valor que DOSERROR(). Si se pasa el argumento <nNuevoC.digoSO> opciónal puede personalizar el valor devuelto por la función. Si desea una lista completa de números de error DOS y las Descripciónes correspondientes, consulte la gu.a Mensajes de Error y Apííndices. Ficheros: La biblioteca es CLIPPER.LIB.
DOW() Convierte un valor de fecha en un día de la semana numérico ------------------------------------------------------------------------------ Sintaxis DOW(<fFecha>) --> nD.a Argumentos <fFecha> es el valor de fecha que se va a convertir. Devuelve DOW() devuelve el día de la semana en forma de número comprendido entre cero y siete. El primer día de la semana es uno (Domingo) y el último d.a es siete (S.bado). Si <fFecha> est. vac.a, DOW() devuelve cero. Descripción DOW() es una función de conversión de fechas que convierte un valor de fecha en un número que identifica el día de la semana. Permite calcular fechas en base semanal. DOW() es similar a CDOW(), que devuelve el d.a de la semana como una cadena de carácteres en lugar de como un número. Ejemplos . Estos ejemplos ilustran CDOW() y su relaci.n con DOW(): ? DATE() // Resultado: 09/01/89 ? DOW(DATE()) // Resultado: 3 ? CDOW(DATE()) // Resultado: Martes ? DOW(DATE() - 2) // Resultado: 1 ? CDOW(DATE() - 2) // Resultado: Domingo . Esta es una función que utiliza DOW() para calcular la fecha del último lunes de cualquier otra fecha: FUNCTION últimoLunes(fFecha) RETURN (fFecha - DOW(fFecha) + 2) Ficheros: La biblioteca asociada es CLIPPER.LIB.
DTOC() Convierte un valor de fecha en una cadena de carácteres ------------------------------------------------------------------------------ Sintaxis DTOC(<fFecha>) --> cFecha Argumentos <fFecha> es el valor de fecha que se va a convertir. Devuelve DTOC() devuelve una cadena de carácteres que representa un valor de fecha. El valor de retorno se formatea en el formato de fecha actual. El formato por defecto es mm/dd/aa. Una fecha nula devuelve una cadena de espacios de longitud igual al formato de fecha actual. Descripción DTOC() es una función de conversión utilizada para mostrar una fecha en el formato establecido por SET DATE cuando se requiere una expresión de carácteres (por ejemplo, en un LABEL FORM). Si se necesita un formato de fecha especializado, puede utilizar TRANSFORM() o una expresión personalizada. Si precisa crear un ííndice con una clave que contenga una representaci.n de la fecha en carácteres, utilice DTOS() en lugar de DTOC() para convertir el valor de fecha en una cadena de carácteres. Ejemplos . Estos ejemplos muestran la utilización general de DTOC(): ? DATE() // Resultado: 09/01/90 ? DTOC(DATE()) // Resultado: 09/01/90 ? "Hoy es " + DTOC(DATE()) // Resultado: Hoy es 09/01/90 Ficheros: La biblioteca asociada es CLIPPER.LIB.
DTOS() Convierte un valor de fecha en una cadena de carácteres en formato aaaammdd ------------------------------------------------------------------------------ Sintaxis DTOS(<fFecha>) --> cFecha Argumentos <fFecha> es el valor de fecha que se va a convertir. Devuelve DTOS() devuelve una cadena de ocho carácteres con el formato aaaammdd. Si <fFecha> es una fecha nula (CTOD("")), DTOS() devuelve una cadena de ocho espacios. El valor de retorno no se ve afectado por el formato de fecha actual. Descripción DTOS() es una función de conversión de fechas que se utiliza para crear expresiónes de índice formadas por un valor de fecha y de una expresión de carácteres. DTOS() convierte un valor de fecha en una cadena que puede concatenarse con cualquier otra expresión de carácteres. El valor de retorno est. estructurado de forma que mantiene el orden de la fecha (a.o, mes y d.a). Ejemplos . Estos ejemplos muestran la forma de utilizar DTOS() con otras funciónes: ? DATE() // Resultado: 09/01/90 ? DTOS(DATE()) // Resultado: 19900901 ? LEN(DTOS(CTOD(""))) // Resultado: 8 . Este ejemplo muestra c.mo crear un ííndice con una fecha compuesta y una clave de carácteres útilizando DTOS(): USE Ventas NEW INDEX ON DTOS(Fecha) + Vendedor TO NombreFecha Ficheros: La biblioteca asociada es CLIPPER.LIB.