Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Falla en los Insert de ADO (https://www.clubdelphi.com/foros/showthread.php?t=43744)

Slash 18-05-2007 22:52:26

Falla en los Insert de ADO
 
Hola,
Les escribo para solicitar su ayuda, mi problema es el siguiente.
He desarrollado un equipo de biometria del cual leo las huellas que el mismo contiene. A medida que va llegando la informacion (huellas) las voy guardando en una DB Acces. A la misma accedo via ADO. Para hacer esto utilizo directamente el ActiveX provisto por Microsoft. El inconveniente surge a la hora de insertar el registro de las huellas en la tabla correspondiente. Abro el Recordset hago un AddNew le paso los datos de los campos, ejecuto un Update y por último cierro el Recordset. Grabo bien toda la data excepto el último registro el cual no genera error pero aveces se graba y aveces no. Es decir el Recordset no me devuelve ningun error al grabar este último registro pero, sin embargo, el registro no es agregado a la tabla.
Este es el codigo (utilizo VB6 y ADO 2.8):

Cita:

recHabilitados.Open "T_HuellasIN1_Temp", ActiveConn, adOpenForwardOnly, adLockOptimistic, adCmdTable
With recHabilitados
For Each Huella In Huellas
recHabilitados.AddNew
!hinID = mvarID
!hinPIN = mvarPIN
!hinIdentificacion = mvarIdentificacion
!hinSecurityLevel = mvarIdentificacion
!hinDedo = Huella.Dedo
!hinTemplate = Huella.Template
recHabilitados.AddNew
Next
End With
recHabilitados.Close
Set recHabilitados = Nothing

Muchas Gracias, cualquier ayuda me sera de utilidad.

poliburro 19-05-2007 01:08:26

Visual basic? Huacala.

Pero bueno, solo conozco Vba, que es parecido, y noto que no estas haciendo el Post

Veo en tu código que no haces el post de manera explicita, no será por eso que el último registro no se graba?,
los anteriores si son grabados por que al invocar AddNew, se hace un post ímplicito de la edición (si existe) previa.

Suerte

Slash 21-05-2007 23:06:10

Muchas Gracias por la respuesta y si... Vb Huacala debería ser el nombre de alguna version jajajaja.
Revise lo del post implicito y si bien es cierto, el Update que hago luego de pasar los campos debería hacer este trabajo. Lo que me parece mas raro es que si bien la falla es aleatoria cuando sucede no se me informa de ningun error. Lo he debugeado varias veces y el Update lo hace bien (al menos esto parece) pero el registro no es agregado a la tabla y no se me informa de nada.
Si a alguien se le ocurre algo le agradecería que lo posteara por mas insignificante que parezca ya que comienzo a pensar que el error es tan tonto que no lo estoy viendo.


Nuevamente Muchas Gracias.

Lepe 22-05-2007 11:28:34

El problema es que tienes 2 AddNew, uno al principio del bucle y otro al final.

El primero funciona bien, el último AddNew hay que quitarlo, ya que en la ejecución del bucle se llamará 2 veces y creará registros en blanco.

El último registro no se graba por un pequeño detalle. Cuando estas insertando y se ejecuta un movimiento de registro (AddNew forzará un cambio de registro) El motor de bases de datos guardará automáticamente ese registro en curso. Sin embargo, cuando se está en el último registro de rehabilitados, no se puede avanzar de registro (eof es true), y entonces se omite ese guardado que ocurre entre movimientos de registros.

Dos soluciones:
- antes del "next" asociado al "for" llamar a Post. Esto hace que se ejecute por cada registro del bucle.

- Sabiendo que el post es automático cada vez que se mueve de registro, fuera del bucle colocar un Rehabilitado.Post, ya que sabemos que al salir del bucle, ese último registro está en Edición y no se ha guardado.

Saludos

Slash 22-05-2007 17:14:30

Ante todo muchisimas gracias por la ayuda. Paso a contarles que paso y como lo solucione.
Primero que nada el segundo AddNew que aparece en realidad debería ser un Update (equivale a post), Gracias Lepe... Sin embargo el error persistía y lo que encontre fue que la conexion tenia una transaccion iniciada que nunca era cerrada lo cual hacía que algunos Update no se llevaran a cabo, ademas no se generaba error porque el recordset estaba haciendo bien su trabajo era la conexion la que no estaba mandando el Commit a la base.
Para solucionarlo, antes de empezar el ciclo inicie una transaccion y luego despues de terminada la carga realize un Commit.

Saludos a todos y otra vez Gracias.
Por cualquier prgunta no duden en mandarme mensajes.


La franja horaria es GMT +2. Ahora son las 17:43:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi