• Publicidad

Crear un reporte de MySQL a Excel

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Crear un reporte de MySQL a Excel

Notapor julesberns » 2011-05-27 15:09 @673

Hola, ¿qué tal? Estoy tratando de generar un archivo de Excel con la info de una tabla de una base de datos en MySQL. Estoy usando el módulo DBIx::Report::Excel, pero me arroja un error al final. ¿Alguna recomendación?

En la base de datos tengo la base test y la tabla foo; tiene un par de registros con los campos de name y de id.

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
mysql> SELECT * FROM foo;
+------+--------+
| id   | name   |
+------+--------+
|    1 | Oscar |
|    2 | Alan |
|    3 | Jaime |
+------+--------+
2 rows in set (0.00 sec)
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Este es el código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use DBI;
  4. use DBIx::Report::Excel;
  5.  
  6. my $report = DBIx::Report::Excel->new( "MySQL.xls" );
  7. $report->dbh(
  8.         DBI->connect("dbi:mysql:database=test;host=localhost",
  9.                         "jam",
  10.                         "yo#2jpa",
  11.                         {RaiseError => 1}
  12.                      )
  13.              );
  14. $report->sql(
  15.         qq {
  16. /*---
  17. title: People Names
  18. ---*/
  19. SELECT name as "First Name"
  20. FROM foo  
  21. });
  22.  
  23. $report->write();
  24.  
  25. $report->close();
  26. $report->dbh(DBI->disconnect());
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Y esto es lo que me arroja:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. [root@temp ~]# perl excelmysql.pl
  2. Can't use an undefined value as an ARRAY reference at /usr/local/share/perl5/DBIx/Report/Excel.pm line 291.
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Ojalá me puedan dar un consejo por dónde puedo estarme equivocando.

Saludos.
julesberns
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2011-05-27 14:49 @659

Publicidad

Re: Crear un reporte de MySQL a Excel

Notapor explorer » 2011-05-27 18:33 @814

Bienvenido a los foros de Perl en español, julesberns.

El problema está en la línea 291 de DBIx::Report::Excel:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.   if ( scalar @{$parser->structure->{'column_names'}} == scalar @{$self->{'data'}->[0]} ) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Resulta que el $parser (de la clase SQL::Parser), no tiene ninguna entrada que se llame 'column_names'.

Fue un cambio que se realizó en la versión 1.24 de SQL::Parser:
[Things that may break your code]
* SQL::Parser now didn't deliver a struct containing 'column_names',
'computed_columns' and 'set_functions' - it's combined into one member
'column_defs'.

Eso quiere decir que el autor del módulo DBIx::Report::Excel lo hizo con una versión antigua de SQL::Parser...

Solución...

1.- Editar el fichero /usr/lib/perl5/site_perl/5.12.3/DBIx/Report/Excel.pm (o donde lo tengas instalado) y vas a la famosa línea 291, y cambias 'column_names' por 'column_defs'

2.- Del programa tuyo, solo sobra la línea del disconnect(). Quítala entera.

Lo he probado, y funciona.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Crear un reporte de MySQL a Excel

Notapor julesberns » 2011-05-27 19:59 @874

¡¡Mil mil gracias!! ¡¡Funcionó de maravilla!! ¡¡Te lo mega agradezco!!

¡Saludos!
julesberns
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2011-05-27 14:49 @659


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 34 invitados