DBEDIT( )*

Visualiza registros en un formato de tabla

Sintaxis

     DBEDIT([], [],

        [], ],

        [],

        [<cFunciónUsuario>],

        [  <PatrónFormatoSayColumna>],

        [  ],

        [  ],

        [  ],

        [  ],

        [  ]) –> NIL

Argumentos

, , y 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 posiciones de columna de cero a MAXCOL(). Si no se especifica, las coordenadas por defecto son 0, 0, MAXROW() y MAXCOL().

es una matriz de expresiones de caracteres que contiene nombres de campos de base de datos o expresiones 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 caracteres sin paréntesis ni argumentos. Recuerde que el funcionamiento 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.

es una matriz paralela de expresiones de  caracteres, que define las cabeceras de cada columna. Si se especifica 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 o de los nombres de campo del área de trabajo actual si no se especifica el argumento .

  es una matriz paralela de caracteres, que define los caracteres utilizados para dibujar líneas horizontales que separan las cabeceras de columnas del área de campos. Si se especifica 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.

es una matriz paralela de expresiones de caracteres, que define los caracteres utilizados para dibujar las líneas verticales que separan las columnas. Si se especifica 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.

es una matriz paralela de expresiones de caracteres, que define los caracteres utilizados para dibujar las líneas horizontales que separan los pies de columnas del área de campos. Si se especifica 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.

es una matriz paralela de expresiones de caracteres, que definen pies para cada columna. Si se especifica 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 . La anchura de cada columna está determinada por la evaluación de la expresión de columna en la matriz 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 combinaciones de tecla con Ctrl que producen el esplazamiento 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 , 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 ninguna 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 donde se encuentra la columna actual. Si no se especifica , 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 Funciones 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 continuar.

                           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 cValIndice                    // 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

           cValIndice := &( 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 cValIndice != &( INDEXKEY(0) )      // Si se modificó la

                                                  // expresión clave,

              nSolicitud := DE_REFRESH            // actualizar

                                                  // pantalla

           ELSE                                   // En caso contrario,

              nSolicitud := DE_CONT               // continuar

           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.

Solicitar Soporte Tecnicoscreen tag