Seleccionar página

Un ejemplo prA?ctico con la funciA?n de Filemaker 12 «ExecuteSQL»

Esta nueva funciA?n incorporada en Filemaker 12, permite realizar consultas SQL entre las propias tablas de nuestras aplicaciones.

Filemaker12-Nueva Funcion Executesql

Con un poco de prA?ctica, veremos que es una funciA?n realmente potente con mA?s posibilidades de aplicaciA?n de las que en principio nos puede parecer.

Desde que descubrimos su utilidad, nuestro equipo de desarrollo la usa siempre que es posible.

Al permitir realizar consultas entre tablas sin establecer relaciones, ahorramos muchos recursos.

Todos sabemos lo tedioso que puede ser esperar a que un campo de un tabla, tome el valor de un cA?lculo de otro campo en otra tabla, realizado mediante una relaciA?n.

El ejemplo que vamos a ver, tA�pico de estas fechas de inicio del aA�o, es el cA?lculo de todo lo que ha facturado cada cliente de nuestra aplicaciA?n de gestiA?n, para confeccionar la declaraciA?n del modelo 347.

En todas las aplicaciones de gestiA?n comercial, tenemos una tabla de «Clientes» en la que vamos guardando todos los datos propios de estos clientes.

TambiA�n tenemos otra tabla en la que guardamos todas las facturas que emitimos a nuestros clientes. A esta tabla la llamaremos «Facturas»

Se trata de saber de la forma mA?s cA?moda posible para el usuario (por ejemplo en la misma ficha del cliente), cuanto ha facturado cada uno de los clientes de la tabla «Clientes» en un determinado perA�odo de tiempo, por ejemplo en el aA�o 2012.

Si ya tenA�is desarrollado otro sistema para este cA?lculo en vuestras aplicaciones, podA�is probar esta funciA?n sin cambiar nada de lo ya desarrollado.

Aunque en nuestro ejemplo no usamos relaciones entre estas dos tablas, si las estA?is usando para otros cA?lculos, no es necesario deshacerlas.

Tenemos la siguiente estructura de tablas y campos.

Tabla Clientes:

Tabla Clientes

Click para agrandar imagen

En la que definiremos el siguiente cA?lculo en el campo Suma347:

 Calculo 347 - Filemaker 12

Click para agrandar imagen

Vamos a explicar cA?mo trabaja la funciA?n; aunque pueda parecer un lA�o, recomiendo leerlo y ver cA?mo trabaja en el fichero de ejemplo que se puede descargar al final de este resumen.

En este caso, el campo Suma347 de la TablaClientes tomarA? el valor de la suma del campo TotalFactura de los registros de la TablaFacturas en los que el valor del campo CodigoClienteFactura sea igual al valor del campo CodigoCliente de la TablaClientes y que la FechaFactura estA� entre los valores asignados a los campos FechaDesde y FechaHasta.

No olvidaremos marcar las opciones de indexaciA?n en la pestaA�a «Almacenamiento», ya que con esta funciA?n, al no usar una relaciA?n, este campo cA?lculo puede ser indexado.

-A� Tabla Facturas:

TablaFacturas - Filemaker 12

Click para agrandar imagen

En la tabla Facturas, el nombre del cliente lo «Autointroducimos» como un Valor Calculado como se indica en la imagen:

NombreClienteFactura - Filemaker12

Click para agrandar imagen

Otro ejemplo:

De nuevo vamos a explicar cA?mo trabaja la funciA?n; aunque pueda parecer un lA�o, recomiendo leerlo y ver cA?mo trabaja en el fichero de ejemplo que se puede descargar al final de este resumen.

Ahora, usamos la funciA?n para rellenar el campo NombreClienteFactura de laTablaFacturas con el valor que tenga el campo NombreCliente de la TablaClientes en el que coincidan los valores del campo CodigoCliente de la TablaClientes y el campo CodigoClienteFactura de la TablaFactura.

Esta serA? nuestra estructura de tablas.

Como vemos no es necesaria nigua relaciA?n entre estas tablas para el cA?lculo del 347

Estructura de tablas - filemaker 12

Click para agrandar imagen

VisualizaciA?n de los datos:

Datos - Filemaker 12

Click para agrandar imagen

En esta imagen vemos, detallado con diferentes colores, los clientes y las facturas asignadas.

Si en la TablaFacturas (lado derecho de la imagen) cambiamos el valor del campo CodigoClienteFactura por otro, TotalFactura se sumarA? al nuevo cliente, descontA?ndose al anterior, en la ventana de la izquierda.A�Recordad, que para que los campos cA?lculo se actualicen hay que usar la opciA?n «Refrescar Ventana» del menA? «Registros»

TambiA�n podemos cambiar las fechas en ambas ventanas para ver el efecto del cambio de los totales.

En la otra ventana (lado izquierdo) veremos el cambio en los totales por cliente. Recordad, que para que los campos cA?lculo se actualicen hay que usar la opciA?n «Refrescar Ventana» del menA? «Registros»

A�Consigue el fichero utilizado en el ejemplo.

Contacta con Nosotros

ActualizaciA?n

En respuesta a una consulta que hemos recibido respecto al uso de la funciA?n en comparaciA?n con el uso de las relaciones.

En el ejemplo que proponemos, podemos obtener un cA?lculo sin ninguna relaciA?n y sin movernos de la tabla o presentaciA?n en la que se ejecuta el cA?lculo con ExecuteSQL.

Para hacer este cA?lculo sin usar la funciA?n, tendrA�amos que realizar un relaciA?n con 3 campos: CodigoCliente, FechaDesde y FechaHasta.

Esta relaciA?n, ademA?s de necesitar campos indexados aumenta el tamaA�o de la base de datos y por lo tanto los recursos necesarios en el equipo en el que se ejecuta. Para desarrollos de Filemaker Go, la economA�a de recursos, es muy importante.

AdemA?s, el campo en el que se ejecuta ExecuteSQL, se puede indexar y crear a su vez otra relaciA?n son los valores obtenidos. Esto no es posible con un campo cA?lculo que obtiene los datos mediante una relaciA?n, ya que no se puede indexar.

Para buscar unos registros en un tabla, tambiA�n se podrA�a usar, pero es mA?s cA?mo establecer una relaciA?n y buscar los registros relacionados.

Esta funciA?n sirve para muchos otros casos en los que los resultados que necesitamos no se pueden obtener de otra forma o son necesarias relaciones y cA?lculos muy complejos.

ExecuteSQL no es para sustituir a las relaciones entre tablas en todos los casos, pero el uso de relaciones requiere de muchos recursos que con esta funciA?n se simplifican.

El prA?ximo dA�a 7 de febrero, en la Conferencia de Desarrolladores de Madrid veremos varios ejemplos de diferentes usos de esta funciA?n.

Share This