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 </H1>
<td> <a href="javascript: history.back();"> Pág. Anterior</a> </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(1, min($actual-ceil($maxenlaces/2),$total_paginas-$maxenlaces)): 1;
$maximo = $maxenlaces ? min($total_paginas, max($actual+floor($maxenlaces/2),$maxenlaces)): $total_paginas;
if ($actual>1)
$texto = "<a href=\"$enlace$anterior\">«</a> ";
else
$texto = "<b>«</b> ";
//if ($minimo!=1) $texto.= "... ";
if ($minimo!=1) $texto = "<a href=\"$enlace\"1>|«</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\">» </a>";
else
$texto .= "<b>»</b>";
if ($maximo!=$total_paginas) $texto.= "<a href=\"$enlace$total_paginas\">»|</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>