por Fernando D'Angelo
3. maio 2000 00:00
MaxRecords é mais uma das propriedades do objeto RecordSet que muitas vezes os programadores deixam de utilizar , às vezes por falta de hábito, outras vezes porque não sabem como ela pode simplificar a construção de um código e até mesmo otimizar uma consulta.
Esta propriedade limita a quantidade de registros que será retornada ao Recordset quando uma consulta é feita. Assim, se uma tabela de um determinado banco de dados tiver 2.000 registros e a propriedade MaxRecords estiver setada com o valor 10, então só os dez primeiros registros serão retornados, e o restante será ignorado.
Atenção: apesar de lembrar a propriedade CacheSize ( veja Tutorial ASPBrasil ) , a propriedade MaxRecords se comporta como uma espécie de "filtro" que retorna apenas os n primeiro registros da tabela, mesmo que existam outros registros que satisfaçam o critério da consulta feita. Já a propriedade CacheSize não limita o número de registros retornados; ela especifica a quantidade de registros que serão retornados a cada acesso à base de dados.
Para reforçar o entendimento desta propriedade, vamos analisar um exemplo prático.
Imagine que você está fazendo um site para uma empresa de turismo, e sua tarefa é mostrar ao internauta quais são os 10 hotéis mais caros que estão cadastrados.
Intuitivamente, pensamos em ordenar os hotéis em ordem descendente de diária ( iniciando do mais caro até chegar no mais barato ), e depois criar um laço com um contador que é incrementado a cada leitura de um novo registro e, quando o contador atingir o valor 10, quebramos o laço como no código abaixo:
<%
connstring = "dsn=banco;uid=usuario;pwd=senha"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open connstring
sql = "select * from hoteis order by diaria desc"
Set rstTemp = Conn.Execute(sql)
contador = 1
Do while not rstTemp.Eof
If contador = 10 then Exit
Response.Write(rstTemp("Hotel") & " - " & rstTemp("Diaria"))
contador = contador + 1
rstTemp.MoveNext
Loop
%>
Este código funciona, mas poderíamos melhorá-lo com o uso da propriedade MaxRecords.
Basta setá-la com o valor 10 antes de abrir o recordset e descartar o contador,
já que apenas dez registros serão retornados!
<%
connstring = "dsn=banco;uid=usuario;pwd=senha"
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open connString
sql = "select * from hoteis order by diaria desc"
Set rstTemp = Server.CreateObject("ADODB.RecordSet")
rstTemp.MaxRecords = 10
rstTemp.Open sql, connstring
Do while not rstTemp.Eof
Response.Write(rstTemp("Hotel") & " - " & rstTemp("Diaria"))
rstTemp.MoveNext
Loop
%>
Mas se você não se importa em criar um contador e acha que não há muita diferença
entre o primeiro e o segundo código, há uma grande razão para aderir ao uso da
propriedade MaxRecords: ela poupa recursos de sistema, uma vez que serão retornados
ao RecordSet somente 10 registros ao invés de todos os registros da tabela.
Observações:
1 ) Esta propriedade é somente-leitura enquanto o RecordSet estiver aberto.
2 ) Para desativar a propriedade MaxRecords, ou seja, para definir que
todos os registros deverão ser retornados, basta setar o seu valor para zero.