COMO LEO EL ULTIMO REGISTRO

VIRFEL
11 de Octubre del 2003
SEORES HABER SI ALGUIEN ME PUEDE AYUDAR:

COMO LEO EL ULTIMO REGITRO DE UNA BASE DE DATOS, ES DECIR TENGO UNA VARIABLE LE CUAL LLEVA EL NUMERO CONSECUTIVO DE MATERIALES INGRESADOS, EN ESTE CASO EL NUMERO DE MATERIALES VA DEL 1 AL 20 Y YO QUIERO CAPTURAR EL ULTIMO VALOR EN ESTE CASO 20.

ESTOY USANDO LA SIGUIENTE INSTRUCCION

VARIABLE=CInt(Tabla.RecordCount)
PERO EN VES DE DARME EL NUMERO 20 ME DA -1.
QUE PASA????.


LEO
11 de Octubre del 2003
primer paso es hacer la consulta SQL, esta consulta SQL da como producto un recordset, el segundo pasa es utilizar la instruccion movelast del objeto recordset y ahi esta el registro que buscas

Eduardo
11 de Octubre del 2003
Hay algunas BD que su ODBC no permite o no tienen implementadas muchas funciones que normalmente tiene un recordset, no obstante un mtodo sencillo puede ser:
Siendo AdoQConta el recordset,

M_registros = AdoQConta.GetRows
AdoQConta.MoveFirst()
cant_registros = UBound(M_registros,2) + 1

Saludos

frayin
11 de Octubre del 2003
Piensa que la propiedad RecordCount no se corresponde con el ndice, es decir, si recuperas 5 registros, el ndice de los valores recuperados empieza en 0 y acaba en 4.
El correspondiente al ltimo registro ser el 19

VIRFEL
11 de Octubre del 2003
EFECTIVAMENTE FRAYIN PERO AL REFERIRME QUE
variable=Cint(tabla.recordcount)
se supone que me deberia dar el numero 20 y no por el indice sino que debe contar el numero de registros y me debe dar 20.
al referirme anteriormente a que en vez de imprimirme 20 imprime -1 no quiere decir que me imprime 19 sino que me imprime el numero (-1) como lo se??? pues simplemente hago esto.


simplemente imprimo en la pagina <%=varible%>
y esto me escribe -1.

Ahora estoy intendando con

variable=rs.field("id"), donde id es el numero consecutivo, pero me la "pele" porque no me da nada, ademas esto me daria el primer valor y no el ultimo.

saludos.


frayin
11 de Octubre del 2003
Vale. Si la consulta la realizas desde un servicio o dll, intenta volcar los valores de la misma a un array. Si directamente realizas la consulta desde cdigo ASP mira a ver si de alguna manera puedes insertarlos igualmente en un array.
En principio, cuando tengo que realizar bucles para chequear los registros de una consulta, el bucle lo llevo desde 0 hasta recordset.recordCount-1, y lo voy insertando en el array. Crate un servicio en VB. ASP no es tan flexible como VB. Adems, los errores los controlas mejor en VB. El hecho de que te devueva -1 puede provenir de un error de base de datos no controlado por el motor de ASP.
Un saludo

VIRFEL
11 de Octubre del 2003
Pues no me lo vas a creer Fraying pero esta es la respuesta.

esto es lo que hice
<%
' BEGIN CONSTANT DEFINITION

%>
<!-- #INCLUDE FILE="adovbs.inc" -->
<%


DB_CONNSTRING = "Provider=SQLOLEDB;Data Source=100.201.10.27;" _
& "Initial Catalog=pubs;User Id=verx;Password=x;" _
& "Connect Timeout=15;Network Library=dbmssocn;"


Set rsCount = Server.CreateObject("ADODB.Recordset")
rsCount.Open "contador",DB_CONNSTRING,adOpenStatic, adLockReadOnly
dim X
X=rsCount.RecordCount
%>

ahora imprimo <%=X%> y me da el numero de registros de la BD. QUITA adOpenStatic, adLockReadOnly del recorset(rsCount) y te manda el numero -1.

gracias y ahi esta la solucion.



Javi
11 de Octubre del 2003
Hola;
Creo Que os liais demasiado, solo dos cosas, creo que estas abriendo el Recordset tipo Forward o sea solo hacia adelante por lo que cuando leas el ultimo registro no podras ir hacia atras y la propiedad recordcount no funciona en ADODB, haz la clausula select order by "NUMERO" y despues haz un movelast pero abre el recordset dinamico si tienes que volver a usarlo.
Saludos

chrisgarc
11 de Octubre del 2003
Por que no mejor utilizas un query que genereel ultimo numero registrado?

select max(noConsecutivo)
from tabla_materiales