Problema con último registro tabla Visual Basic 6.0

Ahora me ha resultado un problema con la lectura del último registro, de una tabla en Access. Te explico:

Cuando yo inicio mi programa, en el Load del formulario principal, puse este código:

if record_repor_ven.Recordcount > 0 Then

record_repor_ven.Requery

record_repor_ven.MoveLast

no_ticket = Cdbl (record_repor_ven.fields.Item (0))

Label6.Caption = Str (no_ticket + 1)

End if

Las primeras veces que cierro y ejecuto el programa, me asigna el último registro de una tabla llamada "Reporte venta", al Label6. El problema me surge cuando pasan unas 4 veces que cierro y ejecuto el programa y, supongamos que el último registro, de la tabla "Reporte de venta", en su Item (0), que es el número de ticket de la venta, en esa tabla, va en el número 26, cuando lo vuelvo a ejecutar, se pone en el 20.

Y no encuentro una explicación para eso, pues se supone que con record_repor_ven. MoveLast no debe producirse algún problema, ya que se está yendo al último registro de esa tabla, ¿cierto?.

Ya he borrado la base de datos y la he vuelto a hacer, más de 1 vez, hasta ya hice la misma tabla "Reporte venta" quién sabe cuántas veces y así es como me vuelve a funcionar, pues copio los registros y los pego en la tabla nueva.

Mi pregunta es, ¿qué está mal en esta instrucción de record_repor_ven. MoveLast?, ¿Por qué me está comiendo tantos registros?, ¿Qué explicación pudieras darme para eso?

1 Respuesta

Respuesta
1

Movelast efectivamente te lleva al ultimo registro de un tabla... pero... el ultimo registro de una tabla, no siempre es el último correlativo generado, puesto que la base tiene sus propios indices, si el ultimo correlativo es 26, no necesariamente ese es el ultimo...

Antes de saltar al ultimo registro prueba a indexar la tabla, por el campo correlativo, si es que estas queriendo tomar el ultimo numero ingresado,

Veo que estas generando correlativos, mediante fields. Item(), estas contando el total de registros y aumentando en 1 para el sgte... ¿y qué pasa si necesitas eliminar un registro de la tabla?.

Una solucion sencilla es crear una tabla con un solo campo al cual le pasas el ultimo correlativo generado, luego cuando deseas generar un nuevo correlativo solo vas tomas el valor de ese campo y aumentas en 1, luego actualizas ese campo con el nuevo ultimo correlativo ( ademas de ingreasar el registro generado), asi nunca tendras saltos en correlativos, puesto no consideras el total de registros "fisicos" de la tabla sino el ultimo correlativo como numero.

Hola de nuevo experto, agradezco muchísimo el que me contestes. Me faltó explicarte esta parte del código:

no_ticket = Cdbl (record_repor_ven.fields.Item (0))
Label6.Caption = Str (no_ticket + 1)

La variable "no_ticket", la he declarado así, en la parte general del load del formulario:

Public no_ticket as double

En esa variable, simplemente estoy asignado el último registro de la tabla "Reporte venta" y en el label6.caption, le estoy diciendo que me sume el valor de lo que hay en ese campo más el 1.

En otras palabras, y por ejemplo, internamente en la tabla "Reporte venta" iría el número 20 y uno visualizaría en el formulario, en el label6 el número 21, así que por ese lado no me genera problemas, ya he eliminado registros¿me explico?, es decir, mi programa no inicia con ticket 0, sino con el 1, cuando está completamente vacía. Entonces, internamente está en el 0 y las personas en el formulario ven el 1, no estoy incrementando registros, sólo incremento el valor de la variable.

Por otro lado, mi tabla "Reporte venta" contiene:

No_ticket

hora

fecha

clave_cajero

etcétera....

Como es la tabla principal, ¿cómo yo puedo hacer eso de correlativo con otra tabla?, ¿o hay otra instrucción para que se vaya al último registro directamente, evitando lo de la indexación y cambiar esto de fields.Item (0) por otra cosa? La verdad, no me queda muy claro.

Sigo agradeciendo tu atención, experto. Gracias..

Lo mejor que puedes hacer es ordenar los registros consultados en el recordset utilizando order by

Ejemplo:

recordset.Open "SELECT * FROM LA_TABLA order by correlativo desc;", Conexion, adOpenStatic, adLockOptimistic

Asi no necesitas utilizas movelast, pues el recordset estara ordenado segun correlativo en forma descendente.

Asi todo radica en el la apertura de la tabla mediante el sql apropiado

Muchísimas gracias!!! Me ha funcionado a la perfección. Agradezco el que me contestes oportunamente. Dios te Bendiga!!!

Gracias!!, Gracias!!, Gracias!!!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas