SET QUERY DESTINATION

4D - Documentation   Français   English   German   Español   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 11 (Modificado)


SET QUERY DESTINATION ({destinotipo}{; }{destinoObjeto})

ParámetroTipoDescripción
destinotipoNumérico0  selección actual
1  conjunto
2  selección temporal
3  variable
destinoObjetoCadena | VariableNombre del conjunto o
Nombre de la selección temporal o
variable

Descripción

SET QUERY DESTINATION le permite indicar a 4D donde colocar el resultado de todas las búsquedas posteriores para el proceso actual.

Especifique el tipo de destino en el parámetro destinoTipo. 4D ofrece las siguientes constantes predefinidas, que se encuentran en el tema "Queries":

ConstanteTipoValor
Into current selectionEntero largo0
Into setEntero largo1
Into named selectionEntero largo2
Into variableEntero largo3

Especifique el destino de la búsqueda en el parámetro opcional destinoObjeto de acuerdo a la siguiente tabla:

ParámetroParámetro
destinoTipodestinoObjeto
0 (selección actual)Omite el parámetro
1 (conjunto)Pasa el nombre de un conjunto (existente o a crear)
2 (selección temporal)Pasa el nombre de la selección temporal (existente o a crear)
3 (variable)Pasa una variable numérica (existente o a crear)

Con:

   SET QUERY DESTINATION(Into current selection)

Los registros encontrados por la búsqueda serán colocados en la selección actual de la tabla en la cual se efectúa la búsqueda.

Con:

   SET QUERY DESTINATION(Into set;"miConjunto")

Los registros encontrados por la búsqueda se ubicarán en el conjunto "miConjunto". La selección actual y el registro actual de la tabla en la cual realiza la búsqueda permanecen iguales.

Nota: en cliente/servidor, no puede utilizar como destino de búsqueda un conjunto local/cliente (nombre precedido por el símbolo $). Este tipo de conjunto se crea en equipos cliente cuando las búsquedas se efectúan en el servidor. Para mayor información sobre estos tipos de conjuntos, consulte la sección Conjuntos.

Con:

   SET QUERY DESTINATION(Into named selection;"miSeleccionTemporal")

Los registros encontrados por la búsqueda se ubicarán en la selección temporal "miSeleccionTemporal". La selección actual y el registro actual para la tabla en la que se efectúa la búsqueda permanecen iguales.

Nota: si la selección temporal no existe de antemano, se creará automáticamente al final de la búsqueda.

Con:

   SET QUERY DESTINATION(Into variable;$vlResult)

El número de registros encontrado por la búsqueda seubicará en la variable $vlResult. La selección actual y el registro actual para la tabla en la que se efectúa la búsqueda permanecen iguales.

Advertencia: SET QUERY DESTINATION afecta todas las búsquedas siguientes en el proceso actual. RECUERDE siempre compensar una llamada a SET QUERY DESTINATION (donde destinoTipe#0) con una llamada a SET QUERY DESTINATION(0) para restaurar el modo de búsqueda estándar.

SET QUERY DESTINATION cambia únicamente el comportamiento de los comandos de búsqueda, es decir:

QUERY

QUERY SELECTION

QUERY BY EXAMPLE

QUERY BY FORMULA

QUERY SELECTION BY FORMULA

QUERY WITH Array

Por otra parte, SET QUERY DESTINATION no afecta otros comandos que modifican la selección actual de la tabla como ALL RECORDS, RELATE MANY, etc.

Ejemplos

1. Usted crea un formulario que muestra los registros de la tabla [Libreta telefonica]. Usted crea un objeto de tipo pestaña llamado asRolodex (con una pestaña para cada letra del alfabeto) y un subformulario que muestra los registros de la tabla [Libreta telefonica]. Al elegir una pestaña, muestra los registros que corresponden a la letra.

En su aplicación, la tabla [Libreta telefonica] contiene un conjunto de de datos estáticos, de manera que no necesita realizar una búsqueda cada vez que selecciona una pestaña. De esta manera, puede ahorrar tiempo precioso al ejecutar las búsquedas.

Para hacer esto, puede redireccionar sus búsquedas en las selecciones temporales para reutilizarlas cuando sea necesario. Escriba el método de objeto de la pestaña asRolodex como se indica a continuación:

      ` Método de objeto asRolodex 
   Case of 
      : (Form event=On Load)
            ` Antes de que el formulario aparezca en la pantalla,
            ` inicializar el rolodex y el array de booleanos que 
            ` nos indica si una búsqueda para la letra correspondiente 
            ` ha sido realizada o no
         ARRAY STRING(1;asRolodex;26)
         ARRAY BOOLEAN(abBusqFin;26)
         For ($vlElem;1;26)
            asRolodex{$vlElem}:=Char(64+$vlElem)
            abBusqFin{$vlElem}:=False
         End for 
    
      : (Form event=On Clicked)
            ` Cuando un usuario hace clic en la pestaña, verificar si la búsqueda correspondiente
            ` ha sido realizada o no
         If (Not(abBusqFin{asRolodex}))
               ` Si no, redireccionar la próxima búsqueda a una selección temporal
            SET QUERY DESTINATION(Into named selection;"Rolodex"+asRolodex{asRolodex})
               ` Efectuar la búsqueda
            QUERY([Libreta telefonica];[Libreta telefonica]Apellido=asRolodex{asRolodex}+"@")
               ` Restaurar el modo de búsqueda estándar
            SET QUERY DESTINATION(Into current selection)
               ` La próxima vez que seleccionemos esta letra, no realizaremos la búsqueda nuevamente
            abBusqFin{asRolodex}:=True
         End if 
            ` Utilice la selección temporal para mostrar los registros correspondientes a la letra seleccionada
         USE NAMED SELECTION("Rolodex"+asRolodex{asRolodex})

      : (Form event=On Unload)
            ` Luego el formulario desaparece de la pantalla
            ` Borrar las selecciones temporales 
             For ($vlElem;1;26)
            If(abBusqFin{$vlElem})
               CLEAR NAMED SELECTION("Rolodex"+asRolodex{$vlElem})
            End if
         End for 
            ` Borrar los dos arrays que ya no necesitamos
         CLEAR VARIABLE(asRolodex)
         CLEAR VARIABLE(abBusqFin)
   End case 

2. El método de proyecto ValoresUnicos en este ejemplo le permite verificar si los valores son únicos para los campos en una tabla. El registro actual puede ser un registro existente o un registro nuevo.

` Método de proyecto ValoresUnicos
` ValoresUnicos ( Puntero ; Puntero { ; Puntero... } ) -> Booleano
` ValoresUnicos ( ->Tabla ; ->Campo { ; ->Campo2... } ) -> Yes o No
   C_BOOLEAN($0;$2)    C_POINTER(${1})    C_LONGINT($vlCampo;$vlNbCampos;$vlEncontrado;$vlRegistroActual)    $vlNbCampos:=Count parameters-1    $vlRegistroActual:=Record number($1->)    If ($vlNbCampos>0)       If ($vlRegistroActual#-1)          If ($vlRegistroActual<0)                ` El registro actual es un nuevo registro que no ha sido guardado (número de registro -3);                ` por lo tanto podemos detener la búsqueda tan pronto como se encuentre al menos un registro             SET QUERY LIMIT(1)          Else                ` El registro actual es un registro existente;                ` por lo tanto podemos detener la búsqueda tan pronto como se encuentren al menos dos registros.             SET QUERY LIMIT(2)          End if             ` La búsqueda devolverá su resultado en $vlFound             ` sin cambiar el registro actual ni la seleccióna actual          SET QUERY DESTINATION(Into variable;$vlFound)             ` Construir la búsqueda de acuerdo al número de campos especificados          Case of             : ($vlNbCampos=1)                QUERY($1->;$2->=$2->)             : ($vlNbCampos=2)                QUERY($1->;$2->=$2->;*)                QUERY($1->; & ;$3->=$3->)             Else                QUERY($1->;$2->=$2->;*)                For ($vlCampo;2;$vlNbCampos-1)                   QUERY($1->; & ;${1+$vlCampo}->=${1+$vlCampo}->;*)                End for                QUERY($1->; & ;${1+$vlNbCampos}->=${1+$vlNbCampos}->)          End case          SET QUERY DESTINATION(Into current selection) ` Restaurar el modo de búsqueda estándar          SET QUERY LIMIT(0) ` No hay límites de búsquedas             ` Procesar el resultado de la búsqueda          Case of             : ($vlEncontrado=0)                $0:=True ` No hay valores duplicados             : ($vlEncontrado=1)                If ($vlRegistroActual<0)                   $0:=False ` Se encontró un registro existente con los mismos valores que el nuevo registro                Else                   $0:=True ` No hay valores duplicado, encontramos el mismo registro                End if             : ($vlEncontrado=2)                $0:=False ` Cualquiera que sea el caso, los valores están duplicados          End case       Else          If (<>DebugOn) ` No tiene sentido; señálelo durante la versión de desarrollo             TRACE ` ¡ATENCIÓN! Este método es llamado sin registro actual          End if          $0:=False ` No es posible garantizar el resultado       End if    Else       If (<>DebugOn) ` No tiene sentido; señálelo si la versión de desarrollo          TRACE ` ¡ATENCIÓN! Este método es llamado sin condición de búsqueda       End if       $0:=False ` No puedo garantizar el resultado    End if

Después de implementar este método de proyecto en su aplicación, puede escribir:

      ` ...
   If (ValoresUnicos (->[Contactos];->[Contactos]Empresa;->[Contactos]Apellido;->[Contactos]Nombre))
         ` Realice acciones apropiadas para el registro que tiene valores únicos 
   Else
      ALERT("Ya existe un contacto con este nombre para esta empresa.")
   End if
      ` ...

Ver también

QUERY, QUERY BY EXAMPLE, QUERY BY FORMULA, QUERY BY SQL, QUERY SELECTION, QUERY SELECTION BY FORMULA, QUERY WITH ARRAY, SET QUERY LIMIT.


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