RECEIVE RECORD

4D - Documentation   Français   English   German   Español   English   4D v11 SQL, Comandos por temas   4D v11 SQL, Lista alfabética de comandos   4D v11 SQL, Constantes por temas   Regresar   Anterior   Siguiente

versión 3


RECEIVE RECORD {(tabla)}

ParámetroTipoDescripción
tablaTablaTabla en la cual recibir el registro o
Tabla por defecto, si se omite

Descripción

RECEIVE RECORD recibe un registro en tabla del puerto serial o de un documento abierto por el comando SET CHANNEL. El registro debe haber sido envíado con SEND RECORD. Cuando ejecuta RECEIVE RECORD, se crea automáticamente un nuevo registro en tabla. Si el registro se recibe correctamente, entonces debe utilizar SAVE RECORD para guardar el nuevo registro.

Se recibe el registro completo. Esto significa que también se reciben todos los subregistros, imágenes y BLOBs almacenados en el registro.

Importante: Cuando los registros se envía y reciben utilizando SEND RECORD y RECEIVE RECORD, la estructura de la tabla fuente y la estructura de la tabla de destino deben ser compatibles. Si no lo son, 4D convertirá los valores de acuerdo a las definiciones de las tablas cuando se ejecute RECEIVE RECORD.

Notas

1. Si recibe un registro de un documento utilizando este comando, el documento debe haber sido abierto utilizando el comando SET CHANNEL. No puede utilizar RECEIVE RECORD con un documento abierto con Open document, Append document o Create document.

2. Durante la ejecución de RECEIVE RECORD, el usuario puede interrumpir la recepción presionando Ctrl-Alt-Mayús (Windows) o Comando-Opción-Mayús (Macintosh). Esta interrupción genera un error -9994 que puede interceptar con el método instalado por el comando ON ERR CALL. Generalmente, sólo debe manejar la interrupción de una recepción durante una comunicación sobre puerto serial.

Ejemplo

La utilización combinada de SEND VARIABLE, SEND RECORD, RECEIVE VARIABLE y RECEIVE RECORD es ideal para archivar datos o intercambiar datos entre bases monopuesto idénticas utilizada en diferentes lugares. Puede intercambiar datos entre bases 4D utilizando los comandos de importación/exportación como EXPORT TEXT y IMPORT TEXT. Sin embargo, si sus datos contienen gráficos, subtablas y/o tablas relacionadas, utilizar SEND RECORD y RECEIVE RECORD es mucho más conveniente.

Por ejemplo, la documentación que usted está leyendo ha sido creada utilizando 4D y 4D Write. Como varios escritores en diferentes lugares del mundo estaban trabajando en este proyecto, necesitábamos una forma simple de intercambiar datos entre las diferentes bases de datos. Esta es una vista simplificada de la estructura de la base:

La tabla [Commands] contiene la descripción de cada comando o sección. Las tablas [CM US Params] y [CM FR Params] contienen respectivamente los parámetros de cada comandos en Inglés y Francés. La tabla [CM See also] contiene los comandos indicados como referencias para cada comando o sección. El intercambio de la documentación entre las bases consiste en enviar los registros de [Commands] así como sus registros relacionados. Para hacerlo, utilizamos SEND RECORD y RECEIVE RECORD. Adicionalmente, utilizamos SEND VARIABLE y RECEIVE VARIABLE para marcar los documentos de importación/exportación con etiquetas.

Este es el método de proyecto (simplificado) para exportar la documentación:

      ` Método de proyecto CM_EXPORT_SEL
      ` Este método funciona con la selección actual de la tabla [Commands]

   SET CHANNEL(12;"") ` Permitimos al usuario crear y abrir un documento channel
   If (OK=1)
         ` Marcamos el documento con un variable que indique su contenido
         ` Nota: la variable de proceso BUILD_LANG indica si los datos US (Inglés) o FR (Francés) son enviados
      $vsTag:="4DV6COMMAND"+BUILD_LANG
        SEND VARIABLE($vsTag)
         ` Enviar una variable indicando cuántos [Commands] son enviados
        $vlNbCmd:=Records in selection([Commands])
        SEND VARIABLE($vlNbCmd)
        FIRST RECORD([Comandos])
         ` Para cada comando
      For ($vlCmd;1;$vlNbCmd)
            ` Enviar el registro [Commands]
         SEND RECORD([Commands])
            ` Selección de todos los registros seleccionados
         RELATE MANY([Commands])
            ` Dependiendo del lenguaje, enviar  una variable indicando
            ` el número de parámetros que sigue
         Case of 
            : (BUILD_LANG="US")
               $vlNbParm:=Records in selection([CM US Params])
            : (BUILD_LANG="FR")
               $vlNbParm:=Records in selection([CM FR Params])
         End case 
         SEND VARIABLE($vlNbParm)
            ` Enviar los registros de los parámetros (si hay)
         For ($vlParm;1;$vlNbParm)
            Case of 
               : (BUILD_LANG="US")
                  SEND RECORD([CM US Params])
                  NEXT RECORD([CM US Params])
               : (BUILD_LANG="FR")
                  SEND RECORD([CM FR Params])
                  NEXT RECORD([CM FR Params])
             End case 
         End for 
            ` Enviar una variable indicando cuántos "See Also" siguen
         $vlNbSee:=Records in selection([CM See Also])
         SEND VARIABLE($vlNbSee)
            ` Enviar los registros [See Also] (si hay)
         For ($vlSee;1;$vlNbSee)
            SEND RECORD([CM See Also])
            NEXT RECORD([CM See Also])
         End for 
            ` Ir al siguiente registro [Commands] y continuar la exportación
         NEXT RECORD([Commands])
      End for 
      SET CHANNEL(11) ` Cerrar el documento
   End if 

Este es el método de proyecto (simplificado) de importación de la documentación:

      ` Método de proyecto CM_IMPORT_SEL

   SET CHANNEL(10;"")   ` Permitimos al usuario abrir un documento existente
   If (OK=1) ` Si un documento estaba abierto
      RECEIVE VARIABLE($vsTag)   ` Tratamos de recibir la variable marcada esperada
      If ($vsTag="4DV6COMMAND@")   ` ¿Recibimos la etiqueta correcta?
         $CurLang:=Substring($vsTag;Length($vsTag)-1)   ` Extraemos el lenguaje de la etiqueta
         If (($CurLang="US") | ($CurLang="FR"))   ` ¿Recibimos un lenguaje válido
            RECEIVE VARIABLE($vlNbCmd)   ` ¿Cuántos comandos hay en este documento?
            If ($vlNbCmd>0)   ` Si hay al menos uno
               For ($vlCmd;1;$vlNbCmd)    ` Para cada registro [Commands] archivado
                     ` Recepción del registro
                  RECEIVE RECORD([Commands])
                     ` Llamar una subrutina que guarde el nuevo registro o copie sus valores
                     ` en un registro existente
                  CM_IMP_CMD ($CurLang)
                     ` Recibir el número de parámetros (si hay)
                  RECEIVE VARIABLE($vlNbParm)
                  If ($vlNbParm>=0)
                        ` Llamar una subrutina que llama RECEIVE RECORD luego guarda los nuevos registros
                        ` o los copia en registros existentes
                     CM_IMP_PARM ($vlNbParm;$CurLang)
                  End if
                     ` Recepción dle número de "See Also" (si hay)
                  RECEIVE VARIABLE($vlNbSee)
                  If ($vlNbSee>0)
                        ` Llamar una subrutina que llame RECEIVE RECORD luego guarde los nuevos registros
                        ` o los copies en registros existentes
                     CM_IMP_SEEA ($vlNbSee;$CurLang)
                  End if 
               End for 
            Else 
               ALERT("El número de comandos en este documento de exportación es inválido.")
            End if 
         Else
            ALERT("El lenguaje de este documento de exportación es desconocido.")
         End if
      Else
         ALERT("Este documento NO es un documento de exportación de comandos.")
      End if 
      SET CHANNEL(11)   ` Cerrar documento
   End if 

Note que no probamos la variable OK mientras recibimos los datos ni tratamos de interceptar los eventuales errores. Sin embargo, como almacenamos variables en el documento que describe el documento en sí mismo, si estas variables, una vez recibidas, tienen sentido, la probabilidad de error es muy baja. Si por ejemplo un usuario abre mal un documento, la primera prueba detiene la operación de inmediato.

Ver también

RECEIVE VARIABLE, SEND RECORD, SEND VARIABLE.

Variables o conjuntos sistema

La variable sistema OK toma el valor 1 si se recibe el registro. De lo contrario, toma el valor 0.


4D - Documentation   Français   English   German   Español   English   4D v11 SQL, Comandos por temas   4D v11 SQL, Lista alfabética de comandos   4D v11 SQL, Constantes por temas   Regresar   Anterior   Siguiente