Andei pesquisando pela internet, procurando uma solução pronta para o meu problema: Substituir o LIMIT, usado em MySQL, por algo que funcione em SQL Server com PHP. Encontrei vários códigos, várias dicas, mas nada funcionava do jeito que queria. Então resolvi pegar um pouco de cada e montar um código fácil. Na verdade, adaptei o artigo do colunista Carlos Silva, publicado aqui em 2006. Segue então uma paginação legal, com numeração de páginas e até pesquisa por palavra no banco. Obrigado.
<?php
//Aqui é feita a conexão com o banco.
//Nome do seu computador
$servidor_conexao = 'info';
//Nome do seu banco
$banco_conexao = 'Produtos';
//Usuário do banco
$usuario_conexao = 'sa' ;
//Senha do banco
$senha_conexao = '';
//conecta-se ao servidor
$msg="<p>Não foi possível conectar ao <b>servidor de banco de dados</b>. Verifique o erro acima e contacte o suporte</p>";
$GLOBALS['conexao'] = mssql_pconnect
($servidor_conexao,
$usuario_conexao,
$senha_conexao) or
die($msg);
//seleciona o banco
mssql_select_db
($banco_conexao,
$GLOBALS['conexao']) or
die($msg);
// TRANSFORMA AS INFORMAÇÕES DO BANCO EM FORMATO PORTUGUES COM ACENTO.
header("Content-Type: text/html; charset=ISO-8859-1",
true);
//inicio o critério e recebo qualquer cadeia que se deseje procurar
$criterio = "";
if ($_GET["criterio"]!=""){
$txt_criterio = $_GET["criterio"];
$criterio = " where descricao like '%" . $txt_criterio . "%'";
}
//Número máximo de links a serem exibidos
$numero_links = "11";
//Número de registros por página
$total_reg = "40";
if(!$pagina) {
$pc = "1";
} else {
$pc = $pagina;
}
// intevalo revebe o valor da variavel numero_links
$intervalo = $numero_links;
// inicio recebe pc - 1 para montamos o sql
//$inicio = $pc-1;
$inicio = $pc*$total_reg;
//Aqui eu mostro o total de registros encontrados
$sql = mssql_query("SELECT * FROM tbl_produto ".$criterio);
$tr = mssql_num_rows($sql);
//Aqui vai o código que substitui o famoso LIMIT do MySql. Adaptado para SQL Server.
$sql2=mssql_query("
select * from (
select top $total_reg * from (
select top $inicio * from tbl_produto ".$criterio."
order by descricao asc
) as newtbl order by descricao desc
) as newtbl2 order by descricao asc");
// recebemos o valor do total de paginas
$tp =
ceil($tr/
$total_reg);
// listamos os dados de acordo com os parametros da sql2
echo "<font size='1' face='Verdana'>";
echo "Página $pc de $tp<br> Total de registros encontrados: $tr<br>";
if($txt_criterio) {
echo "Buscando por: <b>$txt_criterio</b><br>";
}
while($dados=mssql_fetch_array($sql2)) {
$id = $dados["id_produto"];
$nome = $dados["descricao"];
echo "<span class='texto'>$id - $nome</span><br>";
}
// A variavel aux recebe o valor do total de paginas/intervalo
$aux = $tp/$intervalo;
$aux1 = $pc/$intervalo;
$pi = $aux1 * $intervalo;
if ($pi == "0") {
$pi = "1";
}
$pf = $pi + $intervalo -1;
$anterior = $pi-$intervalo;
if($pc<=$intervalo) {
$anterior = 1;
}
$aux2 = $pi + 1;
if($pi>1) {
$aux = $pi - 1;
$aux2 = $pi + 1;
// Começa a listar a paginação
echo "<a href='paginacao.php?pagina=$aux&criterio=$txt_criterio'><<<b> Anterior </b></a> ";
}
else
{
echo "<font size='1' face='Verdana'>";
echo "<< Anterior ";
}
// Monta os links da parte central da paginação
for ($pi;$pi<$pf;$pi++)
{
if($pi<=$tp) {
if($pc==$pi) {
echo "<strong><font size='1' face='Verdana'>";
echo "<b>[" .
$pi .
"]</b> ";
} else {
echo "<a href='paginacao.php?pagina=" .
$pi .
"&criterio=" .
$txt_criterio .
"'>" .
$pi .
"</a> ";
}
}
}
// faz verificação pra incluir ou não link na palavra próximo
if($pc != $tp){
echo "<strong><font size='1' face='Verdana'>";
echo "<a href='paginacao.php?pagina=$aux2&criterio=$txt_criterio'><b> Próximo</b> >></a>";
}
else
{
echo "<font size='1' face='Verdana'>";
echo " Próximo >>";
}
?>
<html>
<head>