> Faqs > Recuperación de datos completos de SQL Server, usando PHP, no consigo visualizar en HTML ni y fpdf

Recuperación de datos completos de SQL Server, usando PHP, no consigo visualizar en HTML ni y fpdf

Hola expertos:

Por favor requiero de su experiencia: He cargado una tabla en SQL luego de hacer varios procesos con php y tablas combinadas, pero al momento de mostrar en pantalla con HTML y PHP los resultados, solo me muestra un 10% de los registros y los demás no carga.

He revisado la tabla SQL y está perfecta alli estan todos los registros procesados de forma correcta, pero no muestra ni en la pantalla con HTML y PHP y tampoco en un reporte que tengo creado con FPDF, en éste ocurre lo mismo.

Por favor su valiosa ayuda. De antemano gracias. Solo carga unos 150 registros de un total de 1.800

este es el codigo en php para presentar en pantalla el resultado pero solo aparecen 100 registros de los 8.000 que estan en la DB:

// MUESTRA EN PANTALLA DEL RESULTADO DE LA TABLA ACUMULA
$tabla=sqlsrv_query($conn, "SELECT TOP 800000 acumula.id_per, acumula.fecha,acumula.hora1, acumula.hora2,
                                   acumula.hora3, acumula.hora4, acumula.total_dia, personal.nombre
                              FROM [DINAHACCESS].[dbo].[acumula], [DINAHACCESS].[dbo].[personal]
                              WHERE acumula.fecha BETWEEN '$fi' AND '$ff' and acumula.id_per=personal.id_per
                              ORDER BY personal.nombre, acumula.fecha ");

while ($row = sqlsrv_fetch_array($tabla))
{
?>
  <tr>
    <td class="codigo"><?php echo $row['id_per'] ?></td>
    <td class="nombre"><?php echo $row['nombre'] ?></td>
    <td class="fecha"><?php echo $row['fecha']->format('d-m-Y') ?></td>
    <td class="horas"><?php if (null !==$row['hora1']){
                              echo $row['hora1']->format('H:i');
                            }
                      ?></td>
    <td class="horas"><?php if (null !==$row['hora2']){
                              echo $row['hora2']->format('H:i');
                            }
                      ?></td>
    <td class="horas"><?php if (null !==$row['hora3']){
                              echo $row['hora3']->format('H:i');
                            }
                      ?></td>
    <td class="horas"><?php if (null !==$row['hora4']){
                              echo $row['hora4']->format('H:i');
                            }
                      ?></td>
    <td class="horas"><?php echo $row["total_dia"] ?></td>
  </tr>
<?php
}
?>

y este es el codigo para generar un PDF, pero tambien salen solo 100 registros de los 8.000 que estan en la base de datos:

<?php
$per = " ";
$are = 0;
$suc = 0;
$emp = " ";

$per = $_POST['empleado'];
$are = $_POST['area'];
$suc = $_POST['sucursal'];
$emp = $_POST['todos'];
//$tod = $_POST['todos'];
//$ciu = $_POST['ciudad'];


require('fpdf.php');

class PDF extends FPDF
{
// Cabecera de página
function Header()
{
    // Logo
    //$this->Image('/img/logo_P.jpeg',10,8,33);
    // Arial bold 15
    $this->SetFont('Arial','',12);
    // Movernos a la derecha
    $this->Cell(80);
    // Título
    $this->Cell(150,8,'REPORTE INDIVIDUAL CONSOLIDADO DE ASISTENCIA',1,0,'C');
    $this->Write(8,'           Pagina '.$this->PageNo().'/{nb}',0,1,'R');
    // Salto de línea
    $this->Ln(10);
}

// Pie de página
function Footer()
{
    // Posición: a 1,5 cm del final
//    $this->SetY(-15);
    // Arial italic 8
//    $this->SetFont('Arial','I',8);
    // Movernos a la derecha
//    $this->Cell(100);
}
}

//  lamamos a la BD en SQL

include('conexion_sql.php');

if ($per<>" ")
{
  $consulta1 = "SELECT acumula.id_per,acumula.fecha,acumula.dia,acumula.num_dia,acumula.ent,acumula.sal,
  		                acumula.hora1,acumula.hora2,acumula.hora3,acumula.hora4,acumula.total_dia,acumula.total,
                      acumula.acumulado,acumula.lunch,acumula.acu_lunch,acumula.atraso,acumula.acu_atra,
                      acumula.faltas,acumula.faltas_h,acumula.acu_fal_h,
                      acumula.permisos,acumula.vacaciones,acumula.acu_y_perm,acumula.detalle,
  		                acumula.e_25,acumula.e_50,acumula.e_100,acumula.acu_25,acumula.acu_50,acumula.acu_100,
                      acumula.ultimo,
  		                personal.nombre,personal.estado,
  		                sucursales.nombre_suc,
  		                areas.nombre_are
              FROM [DINAHACCESS].[dbo].[acumula],[DINAHACCESS].[dbo].[personal],[DINAHACCESS].[dbo].[sucursales],
                   [DINAHACCESS].[dbo].[areas]
              WHERE acumula.id_per=personal.id_per and acumula.id_per='$per' and personal.estado='A' and
                    personal.id_suc=sucursales.id_suc and personal.id_are=areas.id_are
              ORDER BY personal.nombre, acumula.fecha";
  $resultado = sqlsrv_query($conn, $consulta1);
}
if($are>0)
{
  $consulta2 = "SELECT acumula.id_per,acumula.fecha,acumula.dia,acumula.num_dia,acumula.ent,acumula.sal,
  		                acumula.hora1,acumula.hora2,acumula.hora3,acumula.hora4,acumula.total_dia,acumula.total,
                      acumula.acumulado,acumula.lunch,acumula.acu_lunch,acumula.atraso,acumula.acu_atra,
                      acumula.faltas,acumula.faltas_h,acumula.acu_fal_h,
                      acumula.permisos,acumula.vacaciones,acumula.acu_y_perm,acumula.detalle,
  		                acumula.e_25,acumula.e_50,acumula.e_100,acumula.acu_25,acumula.acu_50,acumula.acu_100,
                      acumula.ultimo,
  		                personal.nombre,personal.estado,
  		                sucursales.nombre_suc,
  		                areas.nombre_are
              FROM [DINAHACCESS].[dbo].[acumula],[DINAHACCESS].[dbo].[personal],[DINAHACCESS].[dbo].[sucursales],
                   [DINAHACCESS].[dbo].[areas]
              WHERE acumula.id_per=personal.id_per and acumula.id_are='$are' and personal.estado='A' and
                    personal.id_suc=sucursales.id_suc and personal.id_are=areas.id_are
              ORDER BY personal.nombre, acumula.fecha";
  $resultado = sqlsrv_query($conn, $consulta2);
}
if ($suc>0)
{
  $consulta3 = "SELECT acumula.id_per,acumula.fecha,acumula.dia,acumula.num_dia,acumula.ent,acumula.sal,
  		                acumula.hora1,acumula.hora2,acumula.hora3,acumula.hora4,acumula.total_dia,acumula.total,
                      acumula.acumulado,acumula.lunch,acumula.acu_lunch,acumula.atraso,acumula.acu_atra,
                      acumula.faltas,acumula.faltas_h,acumula.acu_fal_h,
                      acumula.permisos,acumula.vacaciones,acumula.acu_y_perm,acumula.detalle,
  		                acumula.e_25,acumula.e_50,acumula.e_100,acumula.acu_25,acumula.acu_50,acumula.acu_100,
                      acumula.ultimo,
  		                personal.nombre,personal.estado,
  		                sucursales.nombre_suc,
  		                areas.nombre_are
              FROM [DINAHACCESS].[dbo].[acumula],[DINAHACCESS].[dbo].[personal],[DINAHACCESS].[dbo].[sucursales],
                   [DINAHACCESS].[dbo].[areas]
              WHERE acumula.id_per=personal.id_per and acumula.id_suc='$suc' and personal.estado='A' and
                    personal.id_suc=sucursales.id_suc and personal.id_are=areas.id_are
              ORDER BY personal.nombre, acumula.fecha";
  $resultado = sqlsrv_query($conn, $consulta3);
}
if ($emp=='SI') {
$consulta = "SELECT TOP 800000
	                    acumula.id_per,acumula.fecha,acumula.dia,acumula.num_dia,acumula.ent,acumula.sal,
  		                acumula.hora1,acumula.hora2,acumula.hora3,acumula.hora4,acumula.total_dia,acumula.total,
                      acumula.acumulado,acumula.lunch,acumula.acu_lunch,acumula.atraso,acumula.acu_atra,
                      acumula.faltas,acumula.faltas_h,acumula.acu_fal_h,
                      acumula.permisos,acumula.vacaciones,acumula.acu_y_perm,acumula.detalle,
  		                acumula.e_25,acumula.e_50,acumula.e_100,acumula.acu_25,acumula.acu_50,acumula.acu_100,
                      acumula.ultimo,
  		                personal.nombre,personal.estado,
  		                sucursales.nombre_suc,
  		                areas.nombre_are
              FROM [DINAHACCESS].[dbo].[acumula],[DINAHACCESS].[dbo].[personal],[DINAHACCESS].[dbo].[sucursales],
                   [DINAHACCESS].[dbo].[areas]
              WHERE acumula.id_per=personal.id_per and personal.estado='A' and
                    personal.id_suc=sucursales.id_suc and personal.id_are=areas.id_are
              ORDER BY personal.nombre, acumula.fecha";
$resultado = sqlsrv_query($conn, $consulta);
}

$pdf = new PDF();
$pdf->AliasNbPages();  //permite poner las paginas totales
$pdf->AddPage('L');

$cue = 0;
while($row=sqlsrv_fetch_array($resultado))
{
  $ult = $row['ultimo'];
  if ($cue==0)
  {
    $pdf->SetFont('Arial','B',10);
    $pdf->Cell(50,4, $row['id_per'].utf8_decode($row['nombre']), 0, 1,'L',0);
    $pdf->SetFont('Arial','',8);
    $pdf->Cell(100,4, "SUCURSAL: ".$row['nombre_suc']);
    $pdf->Write(4,"AREA: ". $row['nombre_are']);
    $pdf->Ln();
    // Cabecera de las filas
    $pdf->SetFont('Arial','B',10);
    $pdf->Cell(18,7,'Horario', 1, 0,'C',0);
    $pdf->Cell(18,7,'Fecha', 1, 0,'C',0);
    $pdf->Cell(15,7,'Dia', 1, 0,'C',0);
    $pdf->Cell(18,7,'Entra', 1, 0,'C',0);
    $pdf->Cell(18,7,'Sale', 1, 0,'C',0);
    $pdf->Cell(18,7,'Entra', 1, 0,'C',0);
    $pdf->Cell(18,7,'Sale', 1, 0,'C',0);
    $pdf->Cell(18,7,'Labor', 1, 0,'C',0);
    $pdf->Cell(18,7,'Lunch', 1, 0,'C',0);
    $pdf->Cell(18,7,'Atraso', 1, 0,'C',0);
    $pdf->Cell(18,7,'Falta', 1, 0,'C',0);
    $pdf->Cell(40,7,'Perm.', 1, 0,'C',0);
    $pdf->Cell(18,7,'25%', 1, 0,'C',0);
    $pdf->Cell(18,7,'50%', 1, 0,'C',0);
    $pdf->Cell(18,7,'100%', 1, 1,'C',0);
    $cue = $cue+1;
  }
    $pdf->SetFont('Arial','',8);
    if (null!==$row['ent'] && null!==$row['ent']) {
      $pdf->Cell(18,5, $row['ent']->format('H:i')."-".$row['sal']->format('H:i'), 1, 0,'C',0);
    }else {
      $pdf->Cell(18,5, (" "), 1, 0,'C',0);
    }
    $pdf->Cell(18,5, $row['fecha']->format('d-m-Y'), 1, 0,'L',0);
    $pdf->Cell(15,5, $row['dia'], 1, 0,'C',0);
    $pdf->Cell(18,5, $row['hora1']->format('H:i'), 1, 0,'C',0);
    if (null!==$row['hora2']) {
      $pdf->Cell(18,5, $row['hora2']->format('H:i'), 1, 0,'C',0);
    }else {
      $pdf->Cell(18,5, (" "), 1, 0,'C',0);
    }
    if (null!==$row['hora3']) {
      $pdf->Cell(18,5, $row['hora3']->format('H:i'), 1, 0,'C',0);
    }else {
      $pdf->Cell(18,5, (" "), 1, 0,'C',0);
    }
    if (null!==$row['hora4']) {
      $pdf->Cell(18,5, $row['hora4']->format('H:i'), 1, 0,'C',0);
    }else {
      $pdf->Cell(18,5, (" "), 1, 0,'C',0);
    }
    if (null!==$row['total_dia']) {
      $pdf->SetFillColor(118,215,196);
      $pdf->Cell(18,5, $row['total_dia'], 1, 0,'C',1);
    }else {
      $pdf->Cell(18,5, (" "), 1, 0,'C',0);
    }
    if (null!==$row['lunch']) {
      $pdf->SetFillColor(232,232,232);
      $pdf->Cell(18,5, $row['lunch'], 1, 0,'C',1);
    }else {
      $pdf->Cell(18,5, (" "), 1, 0,'C',0);
    }
    if (null!==$row['atraso']) {
      $pdf->SetFillColor(245,183,177);
      $pdf->Cell(18,5, $row['atraso'], 1, 0,'C',1);
    }else {
      $pdf->Cell(18,5, (" "), 1, 0,'C',0);
    }
    if (null!==$row['faltas_h']) {
      $pdf->SetFillColor(113,125,126);
      $pdf->Cell(18,5, $row['faltas_h'], 1, 0,'C',1);
    }else {
      $pdf->Cell(18,5, (" "), 1, 0,'C',0);
    }
    $pdf->Cell(40,5, $row['permisos']." ".$row['detalle'], 1, 0,'L',0);
    if (null!==$row['e_25']) {
      $pdf->SetFillColor(232,218,239);
      $pdf->Cell(18,5, $row['e_25'], 1, 0,'C',1);
    }else {
      $pdf->Cell(18,5, (" "), 1, 0,'C',0);
    }
    if (null!==$row['e_50']) {
      $pdf->SetFillColor(208,236,231);
      $pdf->Cell(18,5, $row['e_50'], 1, 0,'C',1);
    }else {
      $pdf->Cell(18,5, (" "), 1, 0,'C',0);
    }
    if (null!==$row['e_100']) {
      $pdf->SetFillColor(237,187,153);
      $pdf->Cell(18,5, $row['e_100'], 1, 1,'C',1);
    }else {
      $pdf->Cell(18,5, (" "), 1, 1,'C',0);
    }

    if ($row['ultimo']==='*')
    {
      $pdf->SetFont('Arial','B',9);
      $pdf->SetY(-27);
      // Movernos a la derecha
      $pdf->Cell(100);
      $pdf->Cell(23,6, "TOTALES: ", 1, 0,'C',0);
      $pdf->SetFillColor(118,215,196);
      $pdf->Cell(18,6, $row['acumulado'], 1, 0,'R',1);
      $pdf->SetFillColor(232,232,232);
      if (null==$row['acu_lunch']) {
        $pdf->Cell(18,6, " ", 1, 0,'C',0);
      }else {
        $pdf->Cell(18,6, $row['acu_lunch'], 1, 0,'R',1);
      }
      $pdf->SetFillColor(245,183,177);
      if (null==$row['acu_atra']) {
        $pdf->Cell(18,6, " ", 1, 0,'C',0);
      }else {
        $pdf->Cell(18,6, $row['acu_atra'], 1, 0,'R',1);
      }
      $pdf->SetFillColor(113,125,126);
      if (null==$row['acu_fal_h']) {
        $pdf->Cell(18,6, " ", 1, 0,'C',0);
      }else {
        $pdf->Cell(18,6, $row['acu_fal_h'], 1, 0,'R',1);
      }
      if (null==$row['acu_y_perm']) {
        $pdf->Cell(18,6, " ", 1, 0,'C',0);
      }else {
        $pdf->Cell(18,6, $row['acu_y_perm'], 1, 0,'R',0);
      }
      if (null==$row['acu_y_perm']) {
        $pdf->Cell(18,6, " ", 1, 0,'C',0);
      }else {
        $pdf->Cell(18,6, $row['acu_y_perm'], 1, 0,'R',0);
      }
      $pdf->SetFillColor(232,218,239);
      if (null==$row['acu_25']) {
        $pdf->Cell(18,6, " ", 1, 0,'C',0);
      }else {
        $pdf->Cell(18,6, $row['acu_25'], 1, 0,'R',1);
      }
      $pdf->SetFillColor(208,236,231);
      if (null==$row['acu_50']) {
        $pdf->Cell(18,6, " ", 1, 0,'C',0);
      }else {
        $pdf->Cell(18,6, $row['acu_50'], 1, 0,'R',1);
      }
      $pdf->SetFillColor(237,187,153);
      if (null==$row['acu_100']) {
        $pdf->Cell(18,6, " ", 1, 0,'C',0);
      }else {
        $pdf->Cell(18,6, $row['acu_100'], 1, 0,'R',1);
      }
      $cue = 0;
      $pdf->AddPage('L');
      $pdf->SetFont('Arial','',8);
    }
}

$pdf->Output();  // con la 'D' me hace la descarga directo y automatico
?>
¿Cuál es la sentencia que estás ejecutando? ¿Cuál es tu código PHP? ¿Has preguntado a PHP el número de registros que tienes antes de presentarlos por pantalla? $tabla=sqlsrv_query($conn, "SELECT acumula.id_per, acumula.fecha,acumula.hora1, acumula.hora2,acumula.hora3, acumula.hora4, acumula.total_dia, personal.nombre FROM [DINAHACCESS].[dbo].[acumula], [DINAHACCESS].[dbo].[personal] WHERE acumula.fecha BETWEEN '$fi' AND '$ff' and acumula.id_per=personal.id_per"); No estoy consultando el numero de registros antes de presentar en pantalla while ($row = sqlsrv_fetch_array($tabla)){ ?> No coloques código en estos comentarios que se lee muy mal. Por favor, edita tu pregunta para que esté completa y se pueda entender bien lo que preguntas, con el código necesario.

Respuestas

Yo lo que suelo hacer para depurar las sentencias, cuando escribo SQL que ya es algo poco habitual porque muchas veces acabo trabajando con un ORM que genera las consultas automáticamente, es ejecutarlas sobre el mismo gestor de la base de datos.

Es decir, usas el programa de acceso a base de datos por interfaz gráfica de SQL Server, o en su defecto la misma línea de comandos y lanzas las sentencias que estás componiendo vía PHP.

  1. Compones la sentencia en una variable
  2. Haces un "echo" de esa variable
  3. Copias la sentencia que has compuesto mediante PHP
  4. La pegas en el programa de interfaz gráfica que usas para conectarte con el sistema gestor de la base de datos y la ejecutas.

Entonces analizas los resultados y miras lo que el motor de base de datos te devuelve. Así puedes descartar que el problema venga de PHP y de cómo se muestran los datos. Además, así puedes modificar directamente la SQL en crudo y tratar de componerla de manera que los datos devueltos sean los que necesitas.

Una vez que tienes clara la sentencia, pues ya vuelves a PHP.

Estaría bien saber si haciendo este proceso te entrega correctamente los datos el sistema gestor. Yo me inclino a pensar que el where te está filtrando los datos de respuesta. Si no es así, entonces tienes que analizar con calma el código que tienes a continuación, viendo por qué no se muestran los datos. Quizás alguno de esos condicionales que tienes provocan que muchos registros no se estén mostrando.

Victor
259 7 18 11