ASP RecordCount = -1
Que doideira de título, para postagem em um blog, é esse? Caso você não saiba, pode não se interessar, já que este post é para comentar um erro que vem sendo comum para programadores em ASP. Não conhece? Pule esse post!
Eu costumava usar ASP com ACCESS, até que migrei tudo para o MySQL. Então passei a ter problemas com o ASP para retornar o número de registros em um requisição do banco de dados e até para criar uma paginação. Isso porque a propriedade RecordCount do RecordSet só trazia o valor “-1″ e não o número de registros retornado. E percebi que isto não só acontece com o MySQL, pois vem acontecendo com outros banco de dados.
Muita gente resolve o problema de contagem de registros, usando a função COUNT do próprio SQL (“select count(*) as totalRegistros from tabela”). Isso até que resolve, mais acabamos criando uma consulta a mais. Para fazer a paginação, no caso do MySQL, podemos, e é até aconselhável, utilizar pelo próprio SQL usando a função LIMIT (“select campos from tabela limit 1,20″).
Uma solução definitiva, mais rápida e só utilizando uma requisição seria definir corretamente o CursorLocation. Pois podemos e até devemos, definir tipos de cursor numa requisição, assim como também o local e tipo de trava. Isso nos ajuda em desempenho nos programas que estaremos criando.
No padrão e geralmente, o CursorLocation é utilizado com o valor 2 (adUseServer), ao qual utiliza a requisição no lado do servidor. Este cursor é aconselhável mais para requisições onde fazemos alguma alteração (criar, apagar, deletar, atualizar). E para o RecordCount funcionar perfeitamente em qualquer banco de dados, devemos utilizar o CursorLocation com valor 3 (adUseClient), ao qual utiliza a requisição no lado do cliente. Este cursor é aconselhável mais para requisições estáticas que só trazem informações de leituras e sem alteração e é mais rápido do que o do lado do servidor.
Então vejamos agora um código de consulta, usando o cursor correto e o RecordCount funcionando perfeitamente para qualquer banco suportado:
'Declarando e Criando objetos para o Banco de Dados em ASP
dim adoBD, rsBD
set adoBD = server.createObject("ADODB.Connection")
set rsBD = server.createObject("ADODB.Recordset")
'configurando o recordset rsBD.CursorType = 0 'o mais rápido e somente para leitura para frente, sem retornar rsBD.CursorLocation = 3 'mais rápido e permiti recordCount rsBD.LockType = 1 'tipo de trava mais usada e rápida
'abrindo conexão e requisição adoBD.open = "String de Conexão" 'alterar para sua string rsBD.activeConnection = adoBD rsBD.source = "Comando SQL" 'alterar pelo comando sql desejável rsBD.open
'a partir de agora só recuperar as informações e registros response.write rsBD.recordCount 'retorna o número de registros rsBD.pageSize = 10 'define paginação em 10 em 10 registros response.write rsBD.pageCount 'retorna o número de paginas
'Fechando e destruindo objetos do Banco rsBD.close adoBD.close set rsBD = nothing set adoBD = nothing
Então acima, vimos como é feito o código para fazer uma simples consulta funcionando o RecordCount e entre outras propriedades do RecordSet.
Creio que agora já tenho dado uma boa dica ou pelo menos uma luz, no final do túnel. Pois eu mesmo fiquei anos procurando essas informações, e só fui achar a solução a pouco tempo, em um dos meus testes e pesquisas.
Ass.: Dj Mib B-)
