Problema con recordset en Access

ISAILOVIC

Resulta que he hize una pequeña aplicacion en mi trabajo...Pues ahora me ha dado un error que la verdad no lo entiendo muy bien.

Me conecto a la base de datos de esta manera, cargo el recordset etc etc

Set db = CurrentDb()
Set rs = db.OpenRecordset("HojasTaller")



If rs.RecordCount = 0 Then
    num = 1
Else
    rs.MoveLast
    num1 = rs.Fields("Codigo") //Puesto para comprobar
    num = rs.Fields("Codigo") + 1
End If

Total, que al hacer el rs.Movelast, cuyo resultado (ahora en este ejemplo) tenia que ser num1=877, me da como resultado 876, como que se me posiciona en el penultimo...

EDIT: Lo curioso y gracioso es que si borro registros de la base de datos me lo vuelve a hacer bien...estoy perdido :(

EDIT2: he comprobado que aunque meta registros "a pelo" siempre se me queda clavado en el 876 :s

¿Que hago mal? ¿O debido a que puede ser esto?

B

Set db = CurrentDb()
Set rs = db.OpenRecordset("HojasTaller")

If rs.RecordCount = 0 Then
num = 1
Else
rs.MoveLast
num1 = rs.Fields("Codigo") //Puesto para comprobar
num = rs.Fields("Codigo") + 1
End If

Entiendo que lo que quieres es obtener el siguiente Codigo no?

Yo utilizo la siguiente sentencia select:

select TOP("Codigo") From HojasDeTaller --> te devuelve el Codigo mas alto, lo pasas a int StrToInt() y le sumas 1. Si no hay registros te devuelve un 0, asi que un If Else que te ahorras :D

sino utiliza:
integer SiguienteCodigo = rs.recordcount +1

ISAILOVIC

#2 Gracias...lo probare el lunes cuando llegue al trabajo

La de rs.recordcount+1 no la puedo usar porque puede que algun registro de la tabla HojasTaller se haya borrado

Soltrac

Piensa una cosa....abrir una tabla entera solo para ver el último campo....es una exageración.

Haz lo q te dice 2, mira el TOP que lo que te devuelve la consulta SELECT es un único registro.

Quizás ahora no lo notes, pero cuando tengas una tabla con 1 millón de registros...lo notarás xDDD

orzuelo

Dim codigo as long

Set db = CurrentDb()
Set rs = db.OpenRecordset("select max(codigo) as maxid from tabla")
if not isnull(dynasel!maxid) then
codigo=val(dynasel!maxid)+1
else
codigo=1
endif
rs.close
db.close

ISAILOVIC

Ya esta solucionado con el TOP :D

Lo que no se es porque no me funcionaba de la otra manera

Gracias a todos

orzuelo

Si no recuerdo mal, el recordcount en access no funciona si no has realizado previamente un movelast ( comprobando que haya registros primero)

Saludos, y suerte con el access, la necesitaras.

Usuarios habituales