Paginar consulta a SqlServer con mssql

Joss_es10
28 de Julio del 2005
Hola a todos,
Necesito urgentemente paginar una consulta a SqlServer utilizando las funciones de mssql, he mirado por todas partes pero no he visto una solucion que funcione.
Muchas gracias de antemano.

tgp
28 de Julio del 2005
Esta paginacion es para mysql pero de igual forma solo cambias los parametros a los utilizados para sqlserver

pagina de criterio de busqueda

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Paginación con PHP</title>
</head>
<body>
<form action="paginacion.php" method="get">
Criterio de búsqueda:
<input type="text" name="criterio" size="22" maxlength="150">
<input type="submit" value="Buscar">
</form>
</body>
</html>

fin de la pagina de criterio de busqueda









inicio del script de busqueda y paginacion
//conecto con la base de datos
$conn = mysql_connect("localhost","user","pass");
mysql_select_db("DB",$conn);
//inicializo el criterio y recibo cualquier cadena que se desee buscar
$criterio = "";
if ($_GET["criterio"]!=""){
$txt_criterio = $_GET["criterio"];
$criterio = " where artista like '%" . $txt_criterio . "%'";
}
//Limito la busqueda
$TAMANO_PAGINA = 10;
//examino la página a mostrar y el inicio del registro a mostrar
$pagina = $_GET["pagina"];
if (!$pagina) {
$inicio = 0;
$pagina=1;
}
else {
$inicio = ($pagina - 1) * $TAMANO_PAGINA;
}
//miro a ver el número total de campos que hay en la tabla con esa búsqueda
$ssql = "select * from songs " . $criterio;
$rs = mysql_query($ssql,$conn);
$num_total_registros = mysql_num_rows($rs);
//calculo el total de páginas
$total_paginas = ceil($num_total_registros / $TAMANO_PAGINA);
//pongo el número de registros total, el tamaño de página y la página que se muestra
echo "Número de registros encontrados: " . $num_total_registros . "<br>";
echo "Se muestran páginas de " . $TAMANO_PAGINA . " registros cada una<br>";
if ($total_paginas > 0)
{
echo "Mostrando la página " . $pagina . " de " . $total_paginas . "<p>";
//construyo la sentencia SQL
$ssql = "select * from songs " . $criterio . " limit " . $inicio . "," . $TAMANO_PAGINA;
//echo $ssql . "<p>";
$rs = mysql_query($ssql);

// aqui se imprimen los resultados ///////////////////////////////////////////////
while ($fila = mysql_fetch_object($rs)){
echo $fila->campo . "<br>";
}
// aqui se imprimen los resultados ///////////////////////////////////////////////

mysql_free_result($rs);
mysql_close($conn);
echo "<p>";
//muestro los distintos índices de las páginas, si es que hay varias páginas
if ($total_paginas > 1){
for ($i=1;$i<=$total_paginas;$i++){
if ($pagina == $i)
//si muestro el índice de la página actual, no coloco enlace
echo $pagina . " ";
else
//si el índice no corresponde con la página mostrada actualmente, coloco el enlace para ir a esa página
echo "<a href='paginacion.php?pagina=" . $i . "&criterio=" . $txt_criterio . "'>" . $i . "</a> ";
}
}
}
else
{
echo "No se encontraron resultados con el criterio $txt_criterio";
}
//muestro un formulario para marcar el criterio


fin del script


salu2

Joss_es
28 de Julio del 2005
limit no funciona con sql server 2000 segun he podido comprobar.
Al final lo he solucionado con seek. muevo el puntero a la posicion de inicio, lo muestro y muevo el puntero otra posicion, y asi sucesivamente.
No es una solucion muy elegante, pero funciona.

Un saludo