• Publicidad

rowspan dinámico

Discute todo acerca de JavaScript así como DHTML o la tecnología AJAX.

Re: rowspan dinámico

Notapor seafree » 2014-06-03 08:39 @402

Hola, explorer, estoy un poco obstruida con algunas modificaciones, te muestro el código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $sql_eventos:="SELECT id,descrip_comp,fecha_sale,fecha_entra,dispositivo,medidas,causa,id_causa,id_anexo FROM t_eventos te, c_tipo_componentes ctc, c_componentes cc WHERE te.subestacion='CIE' AND tipo_evento like 'D-C%' AND (fecha_sale BETWEEN '2013-01-01 00:00:00' AND '2013-12-31 23:59:59') AND indice='S' AND te.id_tipo_componente=ctc.id_tipo_componente AND ctc.id_componente=cc.id_componente GROUP BY id,descrip_comp,fecha_sale,fecha_entra,dispositivo,medidas,causa,id_causa,id_anexo ORDER BY fecha_sale,descrip_comp"
  2.  
  3. $sth= $dbh->prepare($sql_eventos) or die $DBI::errstr;
  4. $sth->execute();
  5. $fetchall_arrayref = $sth->fetchall_arrayref();
  6. $tuplas = $sth->rows;
  7. print "TUPLAS: -->$tuplas<-- <br>"; #Efectivamente trae 3 registros
  8. my $fetchall_arrayref = $sth->fetchall_arrayref();
  9. for my $i (0 .. $#$fetchall_arrayref) {
  10.     print "Registro $i\n";
  11.     my $registro_ref = $fetchall_arrayref->[$i];        # El elemento $i apuntado por $fechall_arrayref contiene una referencia a un array
  12.           for my $columna (@$registro_ref) {                  # Mostrar todos los registros
  13.               print "\t$columna\n";
  14.           }
  15. }
  16.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¿Me puedes apoyar, por favor, a encontrar cuál es el error? No doy con él y solo muestra:

SQL_EVENTO: SELECT id,descrip_comp,fecha_sale,fecha_entra,dispositivo,medidas,causa,id_causa,id_anexo FROM t_eventos te, c_tipo_componentes ctc, c_componentes cc WHERE te.subestacion='EDO' AND tipo_evento like 'DISPARO-RECIERRE%' AND (fecha_sale BETWEEN '2013-01-01 00:00:00' AND '2013-12-31 23:59:59') AND indice='S' AND te.id_tipo_componente=ctc.id_tipo_componente AND ctc.id_componente=cc.id_componente GROUP BY id,descrip_comp,fecha_sale,fecha_entra,dispositivo,medidas,causa,id_causa,id_anexo ORDER BY fecha_sale,descrip_comp
TUPLAS: -->3<--
seafree
Perlero nuevo
Perlero nuevo
 
Mensajes: 296
Registrado: 2012-08-10 11:26 @518

Publicidad

Re: rowspan dinámico

Notapor explorer » 2014-06-03 10:00 @458

Sobra un carácter ':' y falta un ';' al final de la línea 1.

Ejecutas dos veces la misma sentencia: en las líneas 5 y 8.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: rowspan dinámico

Notapor seafree » 2014-06-03 13:47 @616

No había encontrado tu respuesta, lo siento, pero ya avancé. Te muestro:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $sql_eventos
  2.     = "SELECT id,descrip_comp,fecha_sale,fecha_entra,dispositivo,medidas,causa,id_causa,id_anexo FROM t_eventos te, c_tipo_componentes ctc, c_componentes cc WHERE te.subestacion='INI' AND tipo_evento like 'D-R%' AND (fecha_sale BETWEEN '2013-01-01 00:00:00' AND '2013-12-31 23:59:59') AND indice='S' AND te.id_tipo_componente=ctc.id_tipo_componente AND ctc.id_componente=cc.id_componente GROUP BY id,descrip_comp,fecha_sale,fecha_entra,dispositivo,medidas,causa,id_causa,id_anexo ORDER BY fecha_sale,descrip_comp";
  3.  
  4. $sth = $dbh->prepare($sql_eventos) or die $DBI::errstr;
  5. $sth->execute();
  6. $fetchall_arrayref = $sth->fetchall_arrayref();
  7. $tuplas            = $sth->rows;       # Muestra 3 tuplas
  8. print start_table( { -border => 3 } );
  9. for my $i ( 0 .. $#$fetchall_arrayref ) {
  10.     my $rowspan = 1;
  11.     my $reg     = $fetchall_arrayref->[$i];
  12.     my $id           = ${$reg}[0];     # UTILICÉ ESTA SENTENCIA PORQUE $id=$reg->{'id'} no la acepta (postgres V5.8.8)
  13.     my $descrip_comp = ${$reg}[1];
  14.     my $fecha_sale   = ${$reg}[2];
  15.     my $fecha_entra  = ${$reg}[3];
  16.     my $dispositivo  = ${$reg}[4];
  17.     my $medidas      = ${$reg}[5];
  18.     my $causa        = ${$reg}[6];
  19.     my $id_causa     = ${$reg}[7];
  20.     my $id_anexo     = ${$reg}[8];
  21.     print
  22.         "ID: $id - DESCRIP_COMP: $descrip_comp - FECHA_SALE: $fecha_sale - FECHA_ENTRA: $fecha_entra - DISPOSITIVO: $dispositivo - MEDIDAS: $medidas - ID_ANEXO: $id_anexo<br><br>";
  23.  
  24.     # SOLO VISUALIZO HASTA ESTA LÍNEA DE CÓDIGO PORQUE DE OTRA MANERA NO EJECUTA LO SIGUIENTE:
  25.  
  26.     if ($descrip_comp) {                                        # buscar campo diferente en el resto de líneas
  27.         my $j;
  28.         for ( $j = $i + 1; $j <= $#$fetchall_arrayref; $j++ ) { # recorremos desde la siguiente línea, hasta el final
  29.             last
  30.                 if $fetchall_arrayref->[$j]->{'descrip_comp'}
  31.                 ne $descrip_comp;                               # salimos si hemos encontrado una celda distinta
  32.  
  33.             $fetchall_arrayref->[$j]->{'descrip_comp'} = '';    # la celda es igual, así que la limpiamos
  34.         }
  35.         $rowspan = $j - $i;                     # tamaño del rowspan
  36.     }
  37.     my $celda_descrip;
  38.     if ( $rowspan == 1 ) {                      # puede que sea celda normal, o abreviada
  39.         if ($descrip_comp) {
  40.             $celda_descrip = td($descrip_comp); # celda normal
  41.         }
  42.         else {
  43.             $celda_descrip = '';                # abreviada: no hay celda
  44.         }
  45.     }
  46.     else {                                      # demás casos: rowspan
  47.         $celda_descrip = td( { -rowspan => $rowspan }, $descrip_comp );
  48.     }
  49.     print " <tr><td>$i $celda_descrip, <td>$fecha_sale-$medidas-$causa-$id_causa";
  50. }
  51. print end_table;
  52. print end_html;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¿Qué omití, explorer?
seafree
Perlero nuevo
Perlero nuevo
 
Mensajes: 296
Registrado: 2012-08-10 11:26 @518

Re: rowspan dinámico

Notapor explorer » 2014-06-03 15:35 @691

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $fetchall_arrayref = $sth->fetchall_arrayref();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Cuando se llama a fetchall_arrayref() así, sin indicar ningún argumento, es lo mismo que se llamara así: fetchall_arrayref([]) Es decir: es como si le pasáramos una referencia a un array vacío. En ese caso, el resultado es una referencia a un array en que cada elemento es una referencia a otro array, que guarda los datos de cada fila del resultado de la consulta.

Esta es la razón por la cual no te funciona, en la línea 12, la expresión $id = $reg->{'id'}. No se ha creado un hash en esa fila, sino un array, así que estás obligada a poner índices numéricos (${$reg}[0]).

Y por esa razón, también, no te funcionan las líneas 26 y siguientes. Estás intentando acceder a elementos de un hash, pero no lo hay. Es un array.

La solución es llamar a fetchall_arrayref() pero con una referencia a un hash vacío.

El programa quedaría así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $sql_eventos = "
  2.         SELECT
  3.                 id, descrip_comp, fecha_sale, fecha_entra, dispositivo, medidas, causa, id_causa, id_anexo
  4.         FROM
  5.                 t_eventos te, c_tipo_componentes ctc, c_componentes cc
  6.         WHERE
  7.                         te.subestacion ='INI'
  8.                 AND
  9.                         tipo_evento like 'D-R%'
  10.                 AND
  11.                         (fecha_sale BETWEEN '2013-01-01 00:00:00' AND '2013-12-31 23:59:59')
  12.                 AND
  13.                         indice = 'S'
  14.                 AND
  15.                         te.id_tipo_componente = ctc.id_tipo_componente
  16.                 AND
  17.                         ctc.id_componente = cc.id_componente
  18.         GROUP BY
  19.                 id, descrip_comp, fecha_sale, fecha_entra, dispositivo, medidas, causa, id_causa, id_anexo
  20.         ORDER BY
  21.                 fecha_sale, descrip_comp
  22. ";
  23.  
  24. my $sth = $dbh->prepare($sql_eventos) or die $DBI::errstr;
  25.  
  26. $sth->execute();
  27.  
  28. my $fetchall_arrayref = $sth->fetchall_arrayref({});    # <= cambio
  29.  
  30. my $tuplas = $sth->rows;
  31.  
  32. print start_table( { -border => 3 } );
  33.  
  34. for my $i ( 0 .. $#$fetchall_arrayref ) {
  35.     my $rowspan = 1;
  36.  
  37.     my $reg             = $fetchall_arrayref->[$i];
  38.  
  39.     my $id              = $reg->{'id'           };
  40.     my $descrip_comp    = $reg->{'descrip_comp' };
  41.     my $fecha_sale      = $reg->{'fecha_sale'   };
  42.     my $fecha_entra     = $reg->{'fecha_entra'  };
  43.     my $dispositivo     = $reg->{'dispositivo'  };
  44.     my $medidas         = $reg->{'medidas'      };
  45.     my $causa           = $reg->{'causa'        };
  46.     my $id_causa        = $reg->{'id_causa'     };
  47.     my $id_anexo        = $reg->{'id_anexo'     };
  48.  
  49.     if ($descrip_comp) {                                        # buscar campo diferente en el resto de líneas
  50.         my $j;
  51.         for ( $j = $i+1; $j <= $#$fetchall_arrayref; $j++ ) {   # recorremos desde la siguiente línea, hasta el final
  52.  
  53.                                                                 # salimos si hemos encontrado una celda distinta
  54.             last
  55.                 if $fetchall_arrayref->[$j]->{'descrip_comp'}
  56.                 ne $descrip_comp;
  57.  
  58.             $fetchall_arrayref->[$j]->{'descrip_comp'} = '';    # la celda es igual, así que la limpiamos
  59.         }
  60.  
  61.         $rowspan = $j - $i;                                     # tamaño del rowspan
  62.     }
  63.  
  64.     my $celda_descrip;
  65.  
  66.     if ($rowspan == 1) {                                        # puede que sea celda normal, o abreviada
  67.         if ($descrip_comp) {
  68.             $celda_descrip = td($descrip_comp);                 # celda normal
  69.         }
  70.         else {
  71.             $celda_descrip = '';                                # abreviada: no hay celda
  72.         }
  73.     }
  74.     else {                                                      # demás casos: rowspan
  75.         $celda_descrip = td( { -rowspan => $rowspan }, $descrip_comp );
  76.     }
  77.  
  78.     print " <tr><td>$i $celda_descrip, <td>$fecha_sale-$medidas-$causa-$id_causa";
  79. }
  80.  
  81. print end_table;
  82. print end_html;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
seafree escribiste:¿Qué omití, explorer?
Quizás leer el manual de DBI. :)

Una cosa... estás haciendo consulta de cosas que luego no muestras, como por ejemplo el valor de 'id'. Así que podrías hacerla un poco más simple.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: rowspan dinámico

Notapor seafree » 2014-06-04 12:31 @563

Gracias, explorer, y sí voy a leer el manual de DBI.
seafree
Perlero nuevo
Perlero nuevo
 
Mensajes: 296
Registrado: 2012-08-10 11:26 @518

Anterior

Volver a JavaScript

¿Quién está conectado?

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