Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: NemeSys en 14 Noviembre 2006, 10:04 am



Título: Retraso con el metodo AddNew y mala recuperacion de datos. Porque?
Publicado por: NemeSys en 14 Noviembre 2006, 10:04 am
Hola a todos,

estoy desarrollando un programa en VB que utiliza una BD en Access linkada con el motor jet 4.0.

Los accesos los hago a través de Recordset abiertos con la instruccion SQL que toca.

Pero si cuando uso el metodo Addnew, y despues del update,
recupero los datos de toda la tabla o parte de ella, los datos recien añadidos no se me recuperan, con lo que no puedo refrescar los controles que deberian refrescarse con los datos nuevos.

Para paliar esto estoy usando, como chapuza, la funcion API sleep, pero a medida que la tabla crece esta solucion deja de ser efectiva a menos que no ponga un sleep bastante grande. Cosa que hace que los updateos a la BD sean bastante mas lentos de lo que deberian.

Cuando debugo esto casi no sucede, pero si ejecuto, si. Supongo que es porque a la base de datos no le da tiempo a updatearse antes de ejecutar la select que viene a continuacion al updateo.

En resumen:

VB -> addnew -> BD (dato nuevo)
VB -> query -> BD (datos viejos)

Tal vez, seria mejor hacer un insert a pelo con SQL, al hacer open en el recordset?

Saludos y Gracias.


Título: Re: Retraso con el metodo AddNew y mala recuperacion de datos. Porque?
Publicado por: Ironhorse en 14 Noviembre 2006, 19:45 pm
Proba usando la misma conexión (sin cerrarla y volverla a abrir) para actualizar y recuperar despues los datos.

Saludos


Título: Re: Retraso con el metodo AddNew y mala recuperacion de datos. Porque?
Publicado por: CeLaYa en 14 Noviembre 2006, 22:22 pm
recuerda que cuando usas una tabla estas trabajando sobre los datos que se cargaron en memoria, lo que tienes que hacer es actualizar la tabla antes de poder sacarle datos, es decir despues del Addnew, el registro nuevo se agrego en la tabla que esta cargada en memora aplica un Update para que grabe el registro fisicamente y luego ya podras hacerle lo que quieras

dim tb as recordset

' Agregas el registro
tb.AddNew
tb!Campo1 = X
tb!Campo2 = y
'Actualizas la tabla
tb.Update


yo lo he usado asi y funciona muy bien

la otra manera de agregar registros es haciendolo por medio de la consulta SQL "INSERT INTO"

dim Db as Database

Db.Execute "INSERT INTO Tabla " & _
                       "(campo1, Campo2) VALUES " & _
                       "('" & Valor1 & "', '" & Valor2 & "');", dbFailOnError
If Err Then fError Err.Number, Err.Description



Título: Re: Retraso con el metodo AddNew y mala recuperacion de datos. Porque?
Publicado por: NemeSys en 14 Noviembre 2006, 23:00 pm
Gracias por las respuestas,

Ironhorse,

El problema es que la conexión a la BD no la cierro hasta el final del proceso.

En cambio el Recordset debo cerrarlo porque primero ejecuto una instrucción add, y luego debo cerrarla para poder refrescar el Recordset con un open cuyo source es una instrucción SQL.

Si despues de hacer update reabro el recordset con una SQL me da error 3005. Accion no permitida si el objeto esta abierto.

CeLaYa,

el algoritmo que propones, ya lo utilizo, invoco el addnew, inserto los campos e invoco el update.

Luego lo reabro con el Open haciendo un Select * from tabla; y es entonces cuando recupera los registros de la tabla excepto el ultimo insertado.

La BD tiene pocos registros y ya me pasa esto, pensaba al principio que pudiese ser problema de performance debido al tamaño, pero el caso es que en BD's de menos de diez registros por tabla ya me pasa.

Auque lo que propones del insert, lo prové en un programa anterior (de hace mucho tiempo y creo que este problema no lo tuve). Gracias por recordarmelo :)

Provaré con el insert SQL a pelo a ver que pasa.

Saludos


Título: Re: Retraso con el metodo AddNew y mala recuperacion de datos. Porque?
Publicado por: Hans el Topo en 15 Noviembre 2006, 22:33 pm
esto me ocurrió ayer xD

aplicaba un filtro  luego añadia y no me refrescaba los datos,
lo tienes que hacer manual

Código:
'despues del update
rs.refresh    'si has usado la propiedad/método filter para el filtro éste se resetea
'si el filtro es una consulta no hay problemas, tu nuevo registro se encontrará correcto


Título: Re: Retraso con el metodo AddNew y mala recuperacion de datos. Porque?
Publicado por: ranslsad en 21 Noviembre 2006, 00:33 am
Hola, me q equivocado, porfavor borren el post...

Salu2

Ranslsad


Título: Re: Retraso con el metodo AddNew y mala recuperacion de datos. Porque?
Publicado por: Ironhorse en 21 Noviembre 2006, 21:15 pm
Citar
Si despues de hacer update reabro el recordset con una SQL me da error 3005. Accion no permitida si el objeto esta abierto.


si queres hacer otra consulta con el mismo recordset tenes que cerrarlo primero:

Código:
rs.close