Consultas SQL sobre tablas temporales
En ocasiones se necesita mostrar la información de las líneas de albaranes o facturas agrupada u ordenada por algún criterio que exige utilizar una sentencia SQL.
Si utilizamos como ejemplo el formato de facturas de venta (ffv) la forma más efectiva (o sea, de ejecución más rápida) y sencilla sería utilizar el mismo fichero Lineas que se pasa al generar el informe. Sin embargo hay un pequeño problema : el nombre de la tabla es cambiante (es una tabla vitual y su nombre debe cambiar cada vez que se emite una factura).
Por ejemplo, una sentencia como la siguiente no funcionaría :
Select * From Lineas_2883771 Where NroOperacion=:NroOperacion Order By Cantidad |
Una forma se evitar este problema es utilizar código. Se podría, por ejemplo, utilizar el evento OnStartReport para hacer algo parecido a esto :
procedure Report1OnStartReport(Sender: TfrxComponent); begin Consulta.SQL.Strings[ 1 ] := 'From ' + Lineas.TableName; end |
De esta forma la segunda línea de la sentencia SQL se modifica cada vez que se ejecuta el informe, poniendo en su lugar el nombre de tabla correcto. Aunque es factible es algo engorroso. Si se modifica la sentencia se tiene que ajustar el código y, además, siempre es poco legible utilizar código para estas tareas.
En la versión 10.3 se ha introducido una solución más adecuada. Se pueden utilizar expresiones en las sentencias SQL. Basta con enmarcarlas entre corchetes cuadrados para que antes de utilizarse la sentencia se sustituyan por sus valores. Por ejemplo :
Select * From [Lineas.TableName] Where NroOperacion=:NroOperacion Order By Cantidad |
Cuando se ejecute la sentencia se sustituirá [Lineas.Tablename] por su valor (por ejemplo Lineas_726355). Esta solución es más efectiva, y permite otros usos además del indicado. Las expresiones pueden ser de cualquier tipo, y se puede utilizar cualquier variable o campo que exista en el informe. Incluso fórmulas y funciones.
- Actualizado el .