Hola amigos, este es mi seguno tema, espero ke este no me lo redirijan..jejeje
bueno el caso es el siguiente, me tope con un problema al diseñar una pagina web, en una consulta a mi bd me regresaba un numero de registros muy grande, por lo cual la mejor opcion es paginar, pero el problema fueron varios:
El primero es que mi base de datos esta en MS SQL Server, y los paginadores que encontre y a los que me mandaban desde ester foro estaban orientados a MySQL
En segundo lugar me dije, ps modificamos el paginador de mysql para usarlo con mssql, pero estos paginadores se basaban en el uso de sentencias Select y en mi caso uso procedimientos almacenados por lo cual descarte esa opcion
Y en tercer lugar desconosco mucho sobre procedimientos almacenados y ademas no puedo modificar el que estaba usando(por diversos motivos).
Asi que la opcion ke me kedaba o la opcion por la que opte fue la manipulacion del mssql_query. asi que cree una funcion la cual manipula, muy precariamente a este resultado.
bueno, basicamente funciona asi
el metodo recibe dos parametros, el segundo es de menor importcia, lo uso para definir a que if entrara el programa, pero el primer parametro es el numero de pagina actual.
function paginar($pagina,$reporte)
luego dentro del metodo, declaro algunas variables
$porPagina=0; // es una variable que me ayuda a definir cuando se completo el numero de registros por pagina (por fefault 20)
$desde=($pagina*20)-20; // para saber desde que registro empesare a desplegar
$link=conectarse(); // para conexion
aqui es donde se pone un poco inutil mi funcion, ya que ejecuta un query sobre la base de datos
$sql="exec spr_AuxiliarClientes ".$_SESSION['sucursal'].",'".$_SESSION['cliente']."',0,0,'".$_SESSION['del']."','".$_SESSION['al']."','n','sa',0,0,0";
$_SESSION['query']=mssql_query($sql);
despues, dependiendo de las variables anteriores, ejecuto un for para pocicionarme en el registro en el cual debe de iniciar a mostrar los registros para la pagina actual
for ($i=0;$i<$desde;$i++)
$row=mssql_fetch_row($_SESSION['query']);
simplemente el for va ignorando los registros.
despues de esto el siguiente valor que me regrese la variable query sera el primer valor a mostrar en mi pagina y es cuando ya empieso a mostrar los valores
while(($row=mssql_fetch_row($_SESSION['query'])) && $porPagina<=19)
{
/////////
$porPagina++;
}
y simplemente mando a llamar a la funcion desde donde quiero que se visualicen las paginas con
paginar($pagina,'auxiliar clientes');
como ven, es algo infuncional la funcion, debido a que cada que mande a llamar al metodo hace el query y si se esta paginando es obviamente por que son demaciados registros, por lo cual es una carga grande para el servidor
pero me funciona, y ps si alguien tiene alguna idea son bienvenidas
la idea original que yo tenia(y se puede ver el em metodo) era guardar el resultado del query en una variable global, y evitarme el estar ejecutando el query
aqui el codigo completo
Código:
function paginar($pagina,$reporte)
{
$porPagina=0; // es una variable que me ayuda a definir cuando se completo el numero de registros por pagina (por fefault 20)
$desde=($pagina*20)-20; // para saber desde que registro empesare a desplegar
$link=conectarse(); // para conexion
if ($reporte=='auxiliar clientes')
{
$sql="exec spr_AuxiliarClientes ".$_SESSION['sucursal'].",'".$_SESSION['cliente']."',0,0,'".$_SESSION['del']."','".$_SESSION['al']."','n','sa',0,0,0";
$_SESSION['query']=mssql_query($sql);
for ($i=0;$i<$desde;$i++)
$row=mssql_fetch_row($_SESSION['query']);
while(($row=mssql_fetch_row($_SESSION['query'])) && $porPagina<=19)
{
//Manupulacion de los registros
$porPagina++;
}
}
}
bueno esta es una idea que a mi me funciono, si aguien tiene alguna idea de mejorarlo adelante.
PD: espero haverme explicado bien :p, si no, aqui estoy para cualquier aclaracion