Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/03/2011, 05:46
Domsec
 
Fecha de Ingreso: febrero-2011
Mensajes: 7
Antigüedad: 13 años, 2 meses
Puntos: 0
Paginar resultados sin LIMIT odbc-access en php

Por si alguien le sirve: (a mi me toco guglear mucho)
Lo basico es:
$tamPag = 30;
$regUltimo = ($vPag-1) * $tamPag;
....
odbc_fetch_row( $rs,$regUltimo );
Necesito hacer 2 sql ($sql = "SELECT count(*) FROM Usuarios";) por que el odbc de access siempre responde -1 a odbc_num_rows().

Para mandar los registros a pantalla lo sacos en una <table> que con cuatro líneas me sirve para cualquier sql.
La function paginar() no es mía, pero creo que está muy bien y le he añadido algún detallito.
Código PHP:
<HTML>
<HEAD>
<TITLE>Detalle de Usuarios</TITLE>
<LINK rel="stylesheet" href="estilos.css" type="text/css">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=windows-1252">
</HEAD>
<TITLE>Detalle de Usuarios</TITLE>
<BODY>
<CENTER>
<table ><tr><td ><H1> Detalle de Usuarios&nbsp;&nbsp;&nbsp;&nbsp;</H1>
           <td> <a href="javascript: history.back();"> Pág. Anterior</a>&nbsp;&nbsp;&nbsp;&nbsp;</td>
           <td> <a href="BuscarEquipo.php">Nueva Búsqueda</a></td>
</tr></table>
<?php
$vPag
=$_REQUEST["pPag"];
if (empty(
$vPag)) $vPag 1// Por defecto, pagina 1
$tamPag 30;
$regUltimo = ($vPag-1) * $tamPag;

// ***Inicio Conexion Base de Datos
$db getcwd() . "\\Datos\\RegUsers.mdb"// Direccion de la bd
$cadenaconex "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=$db"// Se define la cadena de conexión
$conex = @odbc_connect$cadenaconex'''' ); // Se realiza la conexón con los datos anteriores
if (!$conex) { exit( "<br><br>Error al conectar: " $db);}
// ***Finalizo Conexion Base de Datos
// -----Para cualquier  consulta sacarla en tabla html
$sql "SELECT count(*) as Contador FROM Usuarios";
//echo "Hora antes del count: ".date('d/m/Y g:i:s:')."*". microtime()."*<br>";
$rs = @odbc_exec$conex$sql );
if ( !
$rs ) { exit( "Error en la consulta SQL" );}
if ( @
odbc_fetch_into($rs$dato)) {  //$dato=odbc_fetch_array($rs); $numReg = trim( $dato['Contador'] );
    
$totReg trim$dato[0] );
    
//$totReg =  $dato[0] ;
} else {
    exit( 
"Error en el volcado de datos" );
}
$sql "SELECT * FROM Usuarios";
$rs = @odbc_exec$conex$sql );
if ( !
$rs ) { exit( "Error en la consulta SQL" );}
//while ( odbc_fetch_row($rs) ) { $resultado=odbc_result($rs,"Usuario")."-".odbc_result($rs,"Nombre"); echo $resultado."<BR>"; }
$numCampos odbc_num_fields($rs);
print 
"<table border='1' width='60%'>";
// Cabedcera de tabla
    
for ($i=1$i <= $numCampos$i++){
         
printf("<th bgcolor='silver'>%s</th>"odbc_field_name$rs,$i)); }
// Datos de la tabla
    
$cuentaReg=0;
    
odbc_fetch_row$rs,$regUltimo );
    while( 
odbc_fetch_row$rs ) && $cuentaReg<$tamPag){
        
$cuentaReg++;
        echo 
"<tr>";
        for(
$i=1$i <= $numCampos$i++){
            
printf("<td nowrap>%s</td>"odbc_result$rs$i ) == "" "-" odbc_result$rs$i ));}
        echo 
"</tr>\n";
    }
echo 
"</table>";
odbc_close$conex ); // Se cierra la conexión
echo paginar($vPag,$totReg,$tamPag,"paginarUsuarios.php?pPag=",10);
exit();
///******************** FIN
function paginar($actual$total$por_pagina$enlace$maxenlaces=0) {
/******************************************************/
/* Funcion paginar
 * actual:          Pagina actual
 * total:           Total de registros
 * por_pagina:      Registros por pagina
 * enlace:          Texto del enlace
 * maxenlaces:      El máximo de enlaces a presentar simultáneamente (opcional)
 * Devuelve un texto que representa la paginacion
 */
  
$total_paginas ceil($total/$por_pagina);
  
$anterior $actual 1;
  
$posterior $actual 1;
  
$minimo $maxenlaces max(1min($actual-ceil($maxenlaces/2),$total_paginas-$maxenlaces)): 1;
  
$maximo $maxenlaces min($total_paginasmax($actual+floor($maxenlaces/2),$maxenlaces)): $total_paginas;
  if (
$actual>1)
    
$texto "<a href=\"$enlace$anterior\">&laquo;</a> ";
  else
    
$texto "<b>&laquo;</b> ";
  
//if ($minimo!=1) $texto.= "... ";
  
if ($minimo!=1$texto "<a href=\"$enlace\"1>|&laquo;</a> ".$texto."... ";
  for (
$i=$minimo$i<$actual$i++)
    
$texto .= "<a href=\"$enlace$i\">$i</a> ";
  
$texto .= "<b>$actual</b> ";
  for (
$i=$actual+1$i<=$maximo$i++)
    
$texto .= "<a href=\"$enlace$i\">$i</a> ";
  if (
$maximo!=$total_paginas$texto.= "... ";
  if (
$actual<$total_paginas)
    
$texto .= "<a href=\"$enlace$posterior\">&raquo; </a>";
  else
    
$texto .= "<b>&raquo;</b>";
  if (
$maximo!=$total_paginas$texto.= "<a href=\"$enlace$total_paginas\">&raquo;|</a> ";
  
$texto.="<br> Mostrando registros del ".(($actual*$por_pagina)-$por_pagina+1)." al ";
  
$texto.=($actual*$por_pagina)>$total?$total:($actual*$por_pagina);
  
$texto.= " (de un total de $total). Página $actual de $total_paginas.";
  return 
$texto;
}
?>
</CENTER>
</BODY>
</HTML>

Última edición por Domsec; 25/03/2011 a las 07:25