Stored procedures con cantidad de parámetros variables

5 comentarios

En ocasiones necesitamos escribir un stored procedure que recibirá varios parámetros de entrada pero cuando llamamos a ese stored procedure la cantidad de parámetros que le enviamos puede variar, no es siempre la misma cantidad y ni siquiera sabemos de antemano cuales y cuantos parámetros necesitaremos.

¿Podemos escribir un stored procedure que acepte una cantidad variable de parámetros, existe una forma de hacerlo?

Ejemplo: Necesitamos consultar a una tabla de VENDEDORES pero a veces el dato que conocemos es su Identificador, a veces es el Nombre, y a veces es la Fecha de Nacimiento.

SP01

Captura 1. Si haces clic en la imagen la verás más grande

Listado 1.

CREATE PROCEDURE SP_CONSULTAR_VENDEDORES (
   tnParam1 SMALLINT,
   tcParam2 VARCHAR(40),
   tdParam3 DATE)
RETURNS(
   ftnIdenti TYPE OF COLUMN VENDEDORES.VEN_IDENTI,
   ftcNombre TYPE OF COLUMN VENDEDORES.VEN_NOMBRE,
   ftdFecNac TYPE OF COLUMN VENDEDORES.VEN_FECNAC)
AS
   DECLARE VARIABLE lnValor1 SMALLINT;
   DECLARE VARIABLE lcValor2 VARCHAR(40);
   DECLARE VARIABLE ldValor3 DATE;
BEGIN

   FOR SELECT
      VEN_IDENTI,
      VEN_NOMBRE,
      VEN_FECNAC
   FROM
      VENDEDORES
   WHERE
      VEN_IDENTI = COALESCE(:tnParam1, VEN_IDENTI) AND
      VEN_NOMBRE = COALESCE(:tcParam2, VEN_NOMBRE) AND
      VEN_FECNAC = COALESCE(:tdParam3, VEN_FECNAC)
   INTO
      :lnValor1,
      :lcValor2,
      :ldValor3
   DO BEGIN
      ftnIdenti = lnValor1;
      ftcNombre = lcValor2;
      ftdFecNac = ldValor3;
      SUSPEND;
   END

END;

En este caso se trata de un stored procedure seleccionable pero exactamente la misma lógica usaríamos si se tratara de un stored procedure ejecutable. OBSERVACIÓN: en un stored procedure tan simple como este no es necesario usar variables locales, podríamos haber usado solamente los parámetros de salida, pero se muestra el caso general que puede ser más útil.

Entonces, podríamos escribir algo como:

Listado 2.

SELECT
   *
FROM
   SP_CONSULTAR_VENDEDORES(NULL, 'CLAUDIA', NULL)


Y obtendríamos lo siguiente:

SP02

Captura 2. Si haces clic en la imagen la verás más grande

Y si escribimos algo como:

Listado 3.

SELECT
   *
FROM
   SP_CONSULTAR_VENDEDORES(NULL, NULL, CAST('30/OCT/1994' AS DATE))

entonces obtendríamos lo siguiente:

SP03

Captura 3. Si haces clic en la imagen la verás más grande

Como ves, los parámetros desconocidos o innecesarios completamos con NULL, porque este stored procedure debe recibir sí o sí 3 parámetros de entrada.

Conclusión:

Si necesitamos varios stored procedures que son muy similares y la única diferencia entre ellos está en los parámetros de entrada entonces lo más conveniente es escribir un solo stored procedure y al llamarlo hacerlo con el parámetro o los parámetros adecuados en ese momento.

El truco está en usar la función COALESCE() para saber si un parámetro de entrada es NULL o tiene un valor distinto que NULL. Así sabremos si se le asignó un valor, o no.

Artículos relacionados:

La función COALESCE()

El índice del blog Firebird21

El foro del blog Firebird21

Firebird 2.5.6 ha sido liberado

Deja un comentario

La última versión de la serie 2.5 de Firebird ya se encuentra disponible para ser descargada y utilizada.

Descargar Firebird 2.5.6

Un archivo .PDF con las notas correspondientes a esa versión se puede descargar desde:

Firebird 2.5 Release Notes

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21

 

Firebird 3: software de 32 bits y de 64 bits

8 comentarios

Si nuestro Servidor es Firebird 3, debemos recordar lo siguiente:

  1. Si la aplicación que deseamos ejecutar fue compilada en 32 bits (nuestra propia aplicación, IBExpert, FlameRobin, etc.) entonces se requiere el archivo FBCLIENT.DLL de 32 bits, aún cuando el Servidor del Firebird 3 sea de 64 bits. Si es nuestra aplicación la que fue compilada en 32 bits entonces lo aconsejable es que el archivo FBCLIENT.DLL de 32 bits se encuentre en la misma carpeta en la cual se encuentra nuestro .EXE, así evitamos confusiones con otros archivos FBCLIENT.DLL que pudieran encontrarse en la misma computadora.
  2. Un Servidor Firebird 3 de 64 bits puede aceptar conexiones de un FBCLIENT.DLL de 32 bits o de 64 bits, indistintamente. Un Servidor Firebird 3 de 32 bits solamente puede aceptar conexiones de un FBCLIENT.DLL de 32 bits.
  3. La ODS (On Disk Structure) de una Base de Datos creada con Firebird 3 es exactamente la misma, sea que esa Base de Datos haya sido creada con la versión de 32 bits o con la versión de 64 bits.
  4. No se debe permitir la conexión a una Base de Datos con el Servidor de 32 bits y con el Servidor de 64 bits al mismo tiempo. O con el uno, o con el otro, pero no con ambos a la vez porque eso corromperá a la Base de Datos.

Artículos relacionados:

¿Qué es la versión de ODS?

Firebird 3: usando bases de datos anteriores

El índice del blog Firebird21

El foro del blog Firebird21

 

 

 

Como decir NO diciendo SÍ

4 comentarios

A veces un cliente te pide que hagas un trabajo que tú no quieres hacer pero tampoco quieres quedar mal con tu cliente respondiéndole que no harás lo que te pide.

Cuando una persona pide algo siempre quiere escuchar un «Sí» por respuesta, nadie quiere escuchar un «No» por respuesta.

Entonces ¿cómo le decimos «NO» pero diciéndole «SÍ»?

El truco es:

  1. Decirle que por «a» o «b» motivo, no será fácil ni rápido hacer lo que te pide
  2. Decirle que le costará bastante dinero

Entonces, tu respuesta podría ser algo como: «Sí, puedo hacer eso, no hay problema, pero no será rápido porque tengo que cambiar primero la estructura de la Base de Datos, crear índices, verificar que las Foreign Keys sean las adecuadas y que no exista conflicto con ningún stored procedure, también tengo que revisar los triggers por las dudas. Creo que podría terminar en unos 15 días, y te costará 1.000 dólares, la mitad me das ahora y la mitad cuando termine tu pedido. ¿Quieres que empiece ahora mismo?»

Cuando le pidas 1.000 dólares (por un trabajo que tú sabes que como máximo vale 20 dólares) pueden ocurrir dos cosas:

  1. El cliente te dirá que lo pensó mejor y que realmente no necesitaba eso que te está pidiendo. Esto te ocurrirá en el 99,99% de los casos.
  2. Te dirá que empieces nomás, porque realmente necesita lo que te pide.

Como de lejos lo más probable es que suceda la primera alternativa, habrás conseguido tu objetivo: no hacer lo que te pide. Pero con el valor agregado de que le dijiste que sí lo querías hacer.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21

 

 

DSN de archivo con EXCEL

Deja un comentario

En los ejemplos vistos hasta aquí, para enviar el contenido de las tablas o de las vistas de una Base de Datos del Firebird a Excel usábamos un DSN de usuario previamente definido. Funcionaba bien, pero nos obligaba a definir previamente ese DSN.

DSN01

Captura 1. Si haces clic en la imagen la verás más grande

Ahora veremos una alternativa que en muchos casos nos resultará mucho mejor: crear un DSN de archivo.

Creando un archivo .DSN

Los datos que el Excel necesita para conectarse a una Base de Datos del Firebird podemos colocarlos en un archivo de texto. Las características de ese archivo de texto son:

  1. El nombre puede ser cualquiera
  2. La extensión debe ser .DSN
  3. La primera línea debe ser [ODBC]
  4. En las siguientes líneas deben colocarse los parámetros de conexión

DSN02

Captura 2. Si haces clic en la imagen la verás más grande

Como podemos ver en la Captura 2., en nuestro archivo de texto llamado CONSULTA-EXCEL.DSN hemos especificado todos los parámetros que Excel necesitará saber para poder conectarse a nuestra Base de Datos del Firebird.

Usando el archivo .DSN en Excel

Estando en Excel, hacemos clic en Datos | De otras fuentes | Desde Microsoft Query

DSN03

Captura 3. Si haces clic en la imagen la verás más grande

Y en el cuadro de diálogo «Elegir origen de datos» hacemos clic sobre el botón «Examinar…», como vemos en la Captura 4.

DSN04

Captura 4. Si haces clic en la imagen la verás más grande

DSN05

Captura 5. Si haces clic en la imagen la verás más grande

Y buscamos en nuestro disco duro el archivo .DSN que nos interesa.

Si el Excel no puede localizar al archivo GDS32.DLL o al archivo FBCLIENT.DLL, entonces verás la ventanita mostrada en la Captura 6.

DSN06

Captura 6. Si haces clic en la imagen la verás más grande

¿La solución?

Copiar el archivo FBCLIENT.DLL en la misma carpeta en donde guardamos a nuestro archivo .DSN, o guardar nuestro archivo .DSN en la carpeta donde se encuentra el archivo FBCLIENT.DLL

En Windows se aconseja que tengas al archivo FBCLIENT.DLL en la misma carpeta en donde tienes a tu archivo .EXE

Y por lo tanto, a tu archivo .DSN también lo guardarás en esa carpeta.

A partir de aquí, se continúa como habíamos visto en los artículos:

Planillas EXCEL dinámicas con Firebird (1)

Planillas EXCEL dinámicas con Firebird (2)

Ventaja de usar un DSN de archivo

La ventaja es que ese DSN de archivo (que es un simple archivo de texto) puedes crearlo con tu aplicación, y eso es muy útil cuando la cantidad de bases de datos es grande o es variable.

Si tu usuario siempre se conectará a la misma Base de Datos, entonces podrías crear un DSN de usuario y listo, asunto solucionado. Pero si puede conectarse a muchas bases de datos o si se irán creando nuevas bases de datos lo conveniente es crear un DSN de archivo desde tu aplicación. Este caso puede darse, por ejemplo, si tienes una aplicación contable y para cada cliente del estudio contable se crea una Base de Datos. Un estudio contable puede tener decenas o centenas de bases de datos.

Artículos relacionados:

Usando EXCEL para leer bases de datos de Firebird

Planillas EXCEL dinámicas con Firebird (1)

Planillas EXCEL dinámicas con Firebird (2)

Enviando una consulta a EXCEL

El índice del blog Firebird21

El foro del blog Firebird21

Enviando una consulta a EXCEL

2 comentarios

Hay muchas formas de enviar el resultado de una consulta a una planilla Excel, aquí veremos una de esas formas.

NOTA: el código fuente está basado en Visual FoxPro pero puede ser fácilmente adaptado a otros lenguajes de programación.

La ventaja de este método es que nos resultará muy fácil enviar la consulta que queremos, al libro Excel que queremos, a la hoja Excel que queremos, en el rango que queremos mostraremos la consulta, y esa consulta puede estar basada en cualquier tabla o en cualquier vista de nuestra Base de Datos del Firebird.

Primero, creamos la función que se encargará de realizar la tarea.

Listado 1.

FUNCTION ENVIAR_EXCEL_CON_DSN
LParameters tcDSN, tcUsuario, tcPassword, tcConsulta, tcRango
Local lcMensajeError, lcConsulta, loExcel, loLibro, loHoja, loTabla, lcConexion, lcBaseDatos

  lcMensajeError = ""

  tcRango = iif(VarType(tcRango) <> "C", "A1", tcRango)    && Si no se definió donde colocar la tabla, se la coloca en la celda A1

  *-- Tratamos de crear un objeto Excel
  if Empty(lcMensajeError)
    loExcel = CreateObject("Excel.Application")
    lcMensajeError = iif(VarType(loExcel) <> "O", "No se pudo crear el objeto EXCEL, verifica si está instaldo EXCEL", lcMensajeError)
  endif

  *-- Si todo OK, tratamos de crear un libro Excel
  if Empty(lcMensajeError)
    loLibro = loExcel.Workbooks.Add
    lcMensajeError = iif(VarType(loLibro) <> "O", "No se pudo crear el libro de EXCEL", lcMensajeError)
  endif

  *-- Si todo OK, tratamos de crear una hoja en el libro Excel
  if Empty(lcMensajeError)
    loHoja = loLibro.Worksheets(1)
    lcMensajeError = iif(VarType(loHoja) <> "O", "No se pudo crear la hoja en el libro EXCEL", lcMensajeError)
  endif

  *-- Si todo OK, creamos el string de conexión a la Base de Datos del Firebird, usando el DSN de esa Base de Datos
  if Empty(lcMensajeError)
    lcConexion = "ODBC;DSN=" + tcDSN + ";USER=" + tcUsuario + ";PASSWORD=" + tcPassword
  endif

  *-- Si todo OK, tratamos de conectarnos a la Base de Datos del Firebird
  if Empty(lcMensajeError)
    loTabla = loHoja.QueryTables.Add(lcConexion, loHoja.Range(tcRango), tcConsulta)
    lcMensajeError = iif(VarType(loTabla) <> "O", "No se pudo crear la tabla de consulta en la planilla Excel", lcMensajeError)
  endif

  *-- Si todo OK, insertamos la tabla en la planilal Excel
  if Empty(lcMensajeError)
    #DEFINE xlInsertEntireRows 2
    loTabla.RefreshStyle = xlInsertEntireRows
    loTabla.Refresh
  endif

  *-- Si todoOK, mostramos la planilla Excel
  if Empty(lcMensajeError)
    loExcel.Visible = .T.
  endif

  *-- Liberamos de la memoria los objetos que habíamos creado
  loTabla = .NULL.
  loHoja  = .NULL.
  loLibro = .NULL.
  loExcel = .NULL.

Return(lcMensajeError)
*
*

Y después llamamos a esa función, con los parámetros que deseemos usar.

Listado 2.

Local lcDSN, lcUsuario, lcPassword, lcConsulta, lcMensajeError, lcRango

  lcDSN = "AUTOMUNDO-FIREBIRD"

  lcUsuario = "SYSDBA"
  lcPassword = "masterkey"

   lcConsulta = "SELECT " ;
              + "   ASC_ANOEJE, " ;
              + "   ASC_CODSUC, " ;
              + "   ASC_FECHAX, " ;
              + "   ASC_NUMERO " ;
              + "FROM " ;
              + "   V_CONTA_ABM_ASIENTOS " ;
              + "WHERE " ;
              + "   ASC_NUMERO >= 100 AND " ;
              + "   ASC_NUMERO <= 120"

  lcRango = "B5"

  lcMensajeError = ENVIAR_EXCEL_CON_DSN(lcDSN, lcUsuario, lcPassword, lcConsulta, lcRango)

  *-- Si ocurrió algún error, mostramos un mensaje al usuario
  if !Empty(lcMensajeError)
    #DEFINE MSG_ICONO_ERROR 16
    #DEFINE MSG_BOTON_ACEPTAR 0
    =MessageBox(lcMensajeError, MSG_ICONO_ERROR + MSG_BOTON_ACEPTAR, "Hay un problema...")
  endif

Return
*
*

Y así obtendremos una planilla similar a la siguiente:

EXCEL01

Captura 1. Si haces clic en la imagen la verás más grande

Por lo tanto, nos resultará muy sencillo crear una planilla Excel con los datos que el usuario pueda necesitar. Inclusive podríamos tener en nuestra aplicación una opción que le muestre todas las vistas disponibles y que le permita crear consultas personalizadas, a su gusto y paladar. Ya depende de la creatividad de cada uno hacer algo así.

Artículos relacionados:

Usando EXCEL para leer bases de datos de Firebird

Planillas EXCEL dinámicas con Firebird (1)

Planillas EXCEL dinámicas con Firebird (2)

El índice del blog Firebird21

El foro del blog Firebird21

 

Planillas EXCEL dinámicas con Firebird (2)

15 comentarios

Si consultar desde Excel los datos de una tabla o de una vista perteneciente a una Base de Datos del Firebird resultó útil, que al cambiar el valor de algunas celdas en la planilla Excel esa planilla se actualice puede ser aún más útil.

Veamos como hacerlo.

Primero, creamos una nueva planilla y definimos las celdas que se usarán como parámetros de la consulta, y colocamos el cursor donde queremos insertar la tabla.

EXCEL01

Captura 1. Si haces clic en la imagen la verás más  grande

En este ejemplo, las celdas B1, B2, y B3 contendrán los parámetros y la tabla que crearemos se insertará a partir de la celda A5.

Luego vamos a: Datos | De otras fuentes | Desde Microsoft Query

EXCEL02

Captura 2. Si haces clic en la imagen la verás más  grande

Luego, elegimos el origen de datos. Ya habíamos visto como crear un origen de datos en el artículo:

Planillas EXCEL dinámicas con Firebird (1)

Puedes referirte a ese artículo del blog si no recuerdas como crear un origen de datos.

EXCEL03

Captura 3. Si haces clic en la imagen la verás más  grande

Al elegir como origen de datos a nuestra Base de Datos del Firebird nos mostrará todas las tablas y/o vistas que tengamos en esa Base de Datos.

EXCEL04

Captura 4. Si haces clic en la imagen la verás más  grande

Si lo deseamos, a continuación podemos Filtrar datos y elegir un Criterio de ordenación.

 EXCEL05

Captura 5. Si haces clic en la imagen la verás más  grande

En este último cuadro de diálogo elegimos la opción «Ver datos o modificar consulta en Microsoft Query»

 EXCEL06Captura 6. Si haces clic en la imagen la verás más  grande

Microsoft Query nos mostrará el resultado de consultar a nuestra tabla o a nuestra vista del Firebird. Ahora debemos decirle que queremos parametrizar esa consulta, para ello debemos hacer clic en el botón «Ocultar o mostrar los criterios».

EXCEL07

Captura 7. Si haces clic en la imagen la verás más  grande

A continuación, en los «Campos de criterios» debemos poner los nombres de las columnas (campos) de nuestra tabla o vista que usaremos para parametrizar. Y en valor debemos escribir cualquier nombre que queremos darle a las celdas donde se encuentran esos parámetros. Esos nombres deberán estar rodeados por corchetes para que sean reconocidos como variables. Por ejemplo: [moneda], [fechaini], [fechafin], etc.

 EXCEL08

Captura 8. Si haces clic en la imagen la verás más  grande

Al hacer clic sobre la esquina superior derecha de una celda de «Campos de criterios» nos muestra un menú contextual con los nombres de todas las columnas de nuestra tabla o vista del Firebird. Debemos elegir alguna de esas columnas.

 EXCEL09

Captura 9. Si haces clic en la imagen la verás más  grande

Como podemos ver en la Captura 9., aquí se eligió la columna ASC_MONEDA y se definió una variable llamada [moneda]. El nombre de la variable puede ser cualquiera, ese es sólo un ejemplo. Al salir de la celda apareció una ventanita de diálogo preguntando por el valor de la variable [moneda]. Debemos ignorarlo y dejarlo en blanco, simplemente hacemos clic sobre el botón «Aceptar» y continuamos.

 EXCEL10

Captura 10. Si haces clic en la imagen la verás más  grande

En la Captura 10. vemos que elegimos otra columna más para el criterio, en este caso la columna es ASC_FECHAX y como queremos un rango de fechas entonces escribimos: «Entre [fechaini] y [fechafin]». Como ya sabes, tanto [fechaini] como [fechafin] son variables.

Aún no le hemos dicho a Microsoft Query de donde debe obtener los valores de las variables [moneda], [fechaini] y [fechafin], eso lo haremos dentro de poco. Y recuerda que esos nombres de variables (o de parámetros) son de ejemplo, tú puedes elegir cualquier nombre que prefieras.

 EXCEL11

Captura 11. Si haces clic en la imagen la verás más  grande

Después de haber elegido todos los criterios que deseamos debemos salir de Microsoft Query, para eso hacemos clic en el botón «Devolver datos», tal como se muestra en la Captura 11.

EXCEL12

Captura 12. Si haces clic en la imagen la verás más  grande

Todavía no le hemos dicho de que celdas debe obtener los valores de las variables [moneda], [fechaini], y [fechafin], eso lo haremos ahora. En el cuadro de diálogo «Importar datos» debemos hacer clic sobre el botón «Propiedades…», como se muestra en la Captura 12.

EXCEL13

Captura 13. Si haces clic en la imagen la verás más  grande

Luego hacemos clic en la pestaña «Definición» y en el botón «Parámetros…», como se muestra en la Captura 13.

EXCEL14

Captura 14. Si haces clic en la imagen la verás más  grande

¡¡¡Y allí están los nombres de todos los parámetros que habíamos definido!!!

EXCEL15

Captura 15. Si haces clic en la imagen la verás más  grande

Como lo que queremos es que el valor de esos parámetros se tome de celdas, entonces debemos hacer clic sobre el botón de radio «Tomar el valor de la siguiente celda:» (1), luego clic en el campo de texto para que el cursor se quede ahí (2), luego hacemos clic sobre la celda que corresponde al parámetro [moneda] (3) y finalmente, para que la planilla Excel se actualice automáticamente al cambiar el valor de la celda marcamos la casilla de verificación «Actualizar automáticamente cuando cambie el valor de las celdas» (4).

EXCEL16

Captura 16. Si haces clic en la imagen la verás más  grande

En el campo de texto, el valor: =Hoja1!$B$1 fue puesto por el Excel al hacer clic en la celda B1.

Lo mismo que se hizo para el parámetro [moneda] hay que hacer para los parámetros [fechaini] y [fechafin]. O sea, repetir desde la Captura 13.

EXCEL17

Captura 17. Si haces clic en la imagen la verás más  grande

Una vez que ya le hemos indicado que los valores de los parámetros [moneda], [fechaini], y [fechafin] debe obtener de las celdas B1, B2, y B3, en el cuadro de diálogo «Importar datos» hacemos clic en el botón «Aceptar», como se muestra en la Captura 17.

EXCEL18

Captura 18. Si haces clic en la imagen la verás más  grande

¡¡¡Y listo!!!

Pero lo más interesante de todo viene ahora, si se cambia el valor de las celdas B1, B2, o B3, el contenido de la planilla Excel … ¡¡¡también cambia!!!

EXCEL19

Captura 19. Si haces clic en la imagen la verás más  grande

 EXCEL20Captura 20. Si haces clic en la imagen la verás más  grande

Al cambiar el valor de cualquiera de las celdas: B1, B2, o B3, la planilla Excel cambia acordemente. ¿Verdad que está muy bueno eso?

Conclusión:

Con lo visto en el artículo anterior, más lo visto en este artículo, ya conocemos como darle un muy alto valor agregado a nuestras aplicaciones, porque podemos enviar el contenido de nuestras tablas y de nuestras vistas de una Base de Datos del Firebird a una planilla Excel y tener a esos datos actualizados. Y Excel es la herramienta administrativa más usada en todo el mundo.

Por supuesto que esto no termina aquí, hay aún muchísimo por aprender pero con estos dos artículos ya tienes más que suficiente para empezar. En Internet hay muchísimo material y deberías aprovechar eso.

Artículos relacionados:

Usando EXCEL para leer Bases de Datos de Firebird

Planillas EXCEL dinámicas con Firebird (1)

El índice del blog Firebird21

El foro del blog Firebird21

Planillas EXCEL dinámicas con Firebird (1)

Deja un comentario

Si queremos darle un muy alto valor agregado a nuestras aplicaciones entonces podemos proveerles de planillas Excel dinámicas. A nuestros clientes les encantará eso.

¿Qué es una planilla Excel dinámica?

Una planilla cuyos datos no fueron introducidos a mano sino que provienen de una fuente externa, en nuestro caso de una Base de Datos de Firebird.

Pero lo interesante aquí es que si cambian los datos de nuestra Base de Datos, también cambia la planilla Excel, automáticamente. Y si cambiamos el valor de algunas celdas en nuestra planilla Excel, entonces obtendremos una planilla Excel actualizada.

Muy interesante ¿verdad?

En este primer artículo de la serie veremos como obtener datos de las tablas y de las vistas que tenemos en nuestra Base de Datos de Firebird. En el siguiente artículo veremos algo quizás más interesante: cambiar el valor de una celda en la planilla Excel y que la planilla se actualice automáticamente.

EXCEL01

Diagrama 1. Si haces clic en la imagen la verás más grande

El Diagrama 1. nos muestra el proceso.

  1. Es nuestra Base de Datos creada con Firebird
  2. Usamos OLEDB u ODBC para enviar los datos
  3. Un archivo de conexión define  toda la información que se necesita para acceder y recuperar los datos de nuestra Base de Datos
  4. La información de la conexión es copiada desde el archivo de conexión hacia la planilla Excel
  5. Los datos son copiados dentro de la planilla Excel y ya pueden ser usados como si hubieran sido introducidos manualmente

Usando ODBC para la conexión

  1. El driver ODBC de Firebird debe estar instalado en la computadora donde se encuentra la Base de Datos
  2. Hay que definir un DSN (Data Source Name) para que la conexión pueda realizarse: Inicio | Panel de Control | Herramientas administrativas | Orígenes de datos ODBC | DSN de usuario | Agregar … | Firebird/Interbase driver | completar los datos pedidos

EXCEL02

Captura 1. Si haces clic en la imagen la verás más grande

Para verificar que la conexión puede realizarse exitosamente es aconsejable hacer clic sobre el botón «Probar conexión». Si todo está ok veremos algo así:

EXCEL03

Captura 2. Si haces clic en la imagen la verás más grande

Conectando la planilla Excel a la Base de Datos de Firebird

  1. Abrir Excel
  2. Crear una nueva planilla
  3. Datos | De otras fuentes | Desde Microsoft Query | elegimos el DSN de nuestra Base de Datos

EXCEL04

Captura 3. Si haces clic en la imagen la verás más grande

EXCEL05

Captura 4. Si haces clic en la imagen la verás más grande

 EXCEL06Captura 5. Si haces clic en la imagen la verás más grande

Como podemos ver en la Captura 5., el Excel nos muestra los nombres de todas las tablas y de todas las vistas que se encuentran en nuestra Base de Datos. Para ver solamente tablas o solamente vistas, podemos hacer clic en Opciones, como vemos a continuación:

EXCEL19

Captura 6. Si haces clic en la imagen la verás más grande

y si hacemos clic sobre el signo + que se encuentra a la izquierda de las tablas y de las vistas, veremos los nombres de las columnas pertenecientes a la tabla o a la vista elegida.

EXCEL07

Captura 7. Si haces clic en la imagen la verás más grande

Para elegir cuales de esas columnas queremos ver en nuestra planilla Excel, la seleccionamos y luego hacemos clic en el botón que la trasladará a «Columnas en la consulta:»

EXCEL08

Captura 8. Si haces clic en la imagen la verás más grande

A continuación podemos Filtrar los datos y elegir el Criterio de ordenación y pedirle que muestre los datos en una planilla Excel.

EXCEL09

Captura 9. Si haces clic en la imagen la verás más grande

EXCEL10

Captura 10. Si haces clic en la imagen la verás más grande

Y ahora viene lo más interesante de todo, si elegimos «Informe de tabla dinámica» o si elegimos «Informe de gráfico y tabla dinámicos» entonces cada vez que se cambien los datos de nuestra Base de Datos también se cambiarán en la planilla Excel.

Algunos puntos a considerar

a) Los datos en la tabla dinámica están resumidos, o agrupados por filas. Varias filas de los datos originales ocuparán una sola fila en la planilla Excel

EXCEL11

Captura 11. Si haces clic en la imagen la verás más grande

EXCEL12

Captura 12. Si haces clic en la imagen la verás más grande

En la Captura 11. podemos ver los datos originales que tenemos en la tabla de nuestra Base de Datos. En la Captura 12. vemos la planilla Excel que fue creada a partir de esos datos. Como puedes ver, las filas se agruparon por fechas, y en las columnas numéricas se muestran las sumas de dichas columnas. Eso muchas veces no tiene sentido (como sumar los años en la columna ASC_ANOEJE, año del ejercicio contable, por ejemplo) pero es lo que hace Excel.

Para ver las filas originales, no agrupadas, podemos hacer clic sobre una de las filas de la planilla, clic con el botón derecho, y luego elegir la opción «Mostrar detalles».

EXCEL13

Captura 13. Si haces clic en la imagen la verás más grande

En este caso, como el cursor está sobre la fila que tiene fecha 03/01/2014, las filas de esa fecha que tenemos en nuestra tabla original serán las mostradas.

 EXCEL14

Captura 14. Si haces clic en la imagen la verás más grande

b) Los resultados se crean en una nueva hoja. Un detalle a notar, es que el resultado de esa consulta fue creado en una nueva hoja de la planilla, no en la hoja que estábamos usando.

c) Se puede ver el detalle de todas las filas importadas. Para conseguirlo, arrastramos los nombres de las columnas que se encuentran en «Etiquetas de fila» hacia «Etiquetas de columna».

EXCEL17

Captura 15. Si haces clic en la imagen la verás más grande

EXCEL18

Captura 16. Si haces clic en la imagen la verás más grande

y luego continuamos igual que en la Captura 13.

Actualizando la planilla Excel

Por defecto, el contenido de la tabla dinámica que creamos en Excel no se actualiza cuando cambian los datos en el origen (o sea, en nuestra Base de Datos del Firebird)

Si el contenido de nuestra tabla en la Base de Datos de Firebird cambió, podemos mostrar los datos actualizados en la planilla Excel. Tenemos tres opciones:

a) Actualización manual. Colocamos el mouse en cualquier celda de la tabla que insertamos y luego clic con el botón derecho y elegimos la opción Actualizar

EXCEL15

Captura 17. Si haces clic en la imagen la verás más grande

Si después de hacer clic en Actualizar volvemos a pedirle que nos muestre los detalles, como ya vimos en la Captura 13., entonces nuestra planilla Excel mostrará los datos actualizados.

EXCEL16

Captura 18. Si haces clic en la imagen la verás más grande

EXCEL23

Captura 19. Si haces clic en la imagen la verás más grande

También se puede actualizar manualmente la planilla Excel haciendo clic sobre cualquier celda de la tabla dinámica, luego en Opciones | Actualizar | Actualizar o Actualizar todo

b) Actualización automática. También podemos conseguir que la planilla Excel se actualice automáticamente, para ello hacemos clic en cualquier celda de la tabla dinámica creada, luego Opciones | Cambiar origen de datos | Propiedades de conexión … | elegimos el tiempo deseado

EXCEL20

Captura 20. Si haces clic en la imagen la verás más grande

En la Captura 20. se pide que la planilla Excel sea actualizada cada 1 minuto, desde luego que tú puedes elegir otro tiempo, esto es sólo un ejemplo.

IMPORTANTE: La hoja creada con «Mostrar detalles», tal como vimos en la Captura 13. no cambiará, solamente cambia la hoja original.

EXCEL21

Captura 21. Si haces clic en la imagen la verás más grande

EXCEL22

Captura 22. Si haces clic en la imagen la verás más grande

En la Captura 21. vemos el contenido original de la tabla, se cambió un valor en la columna ASC_COTIZA en la Base de Datos del Firebird y un minuto después vemos que la planilla Excel se actualizó automáticamente, tal como podemos observar en la Captura 22.

c) Actualizar al abrir la planilla Excel. Si queremos que cada vez que se abra la planilla Excel muestre a sus datos actualizados, debemos marcar la casilla «Actualizar al abrir el archivo» que se muestra en la Captura 20.

Conclusión:

Poder enviar el resultado de consultar a nuestras tablas y a nuestras vistas de una Base de Datos del Firebird a una planilla Excel les resultará muy útil a nuestros clientes. Las tablas dinámicas muestran los datos agrupados y permiten que esos datos se actualicen cuando la tabla subyacente del Firebird se actualice. Eso es muy bueno para poder tomar buenas decisiones empresariales.

Hay muchísimo más que aprender sobre las tablas dinámicas de Excel. Es muy aconsejable que busques información en Internet sobre ellas, te resultará muy útil para que tus aplicaciones se destaquen sobre la competencia.

Artículos relacionados:

Tablas dinámicas en Excel

El índice del blog Firebird21

El foro del blog Firebird21