Visual Basic - No siempre actualiza la BD

Life is soft - evento anual de software empresarial
 
Vista:

No siempre actualiza la BD

Publicado por Krator (71 intervenciones) el 12/09/2005 12:38:02
Hola, me voy a volver loco con este problema.

Tengo un formulario tipico de relleno de datos, este tiene un combo relleno por otro formulario.Imaginaos, una factura tiene sus clientes...pero ¿y si el cliente aun no existe? Bueno, tengo un botoncito para llamar al otro formulario, agrege, borre o lo que quiera y vuelva. Entonces actualizo el combo de "clientes". El problema viene, que no siempre en el combo aparece el que acabo de añadir, he buscado pauta...pero no la he encontrado. Bueno, os detallo algo del codigo por si os sirve.

Esta es mi conexion de la BD, está en 1 modulo que se carga al iniciar el programa.
cadenaConexion = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\moviles.mdb;Persist Security Info=False"

En el formulario la llamo así:
dim db as connection
Set db = New Connection
db.CursorLocation = adUseClient
db.Open cadenaConexion

Así cargo el recordset:
Set rsMoviles = New Recordset
rsMoviles.Open "select * from moviles", db, adOpenStatic, adLockOptimistic

Este es el boton que llama al otro formulario:
Private Sub cmdModelos_Click()
Dim f As New frmModelosMov
Me.Hide
f.Show 1
rsMoviles.Requery
rsMoviles.MoveFirst
Call cargarCmbMovil
Me.Show
End Sub

Y esta la funcion que carga el combo:
Private Sub cargarCmbMovil()
Dim rsMov As Recordset
Set rsMov = New Recordset
rsMov.Open "select * from moviles", db, adOpenStatic, adLockOptimistic
rsMov.MoveFirst
cmbMoviles.Clear
Do Until rsMov.EOF
cmbMoviles.AddItem rsMov("Nombre_Movil")
cmbMoviles.ItemData(cmbMoviles.NewIndex) = rsMov("Id_movil")
rsMov.MoveNext
Loop
cmbMoviles.Refresh
Set rsMov = Nothing
End Sub

Otros eventos relacionados con el combo:
Private Sub cmbMoviles_Click()
If cmbMoviles.ListIndex <> -1 Then
txtModelo.Text = cmbMoviles.ItemData(cmbMoviles.ListIndex)
End If
End Sub

Private Sub cmbMoviles_GotFocus()
Call cargarCmbMovil
End Sub

A ver quien me ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:No siempre actualiza la BD

Publicado por ivan (463 intervenciones) el 12/09/2005 18:09:34
Algo raro lo que sucede... pero

¿te has asegurado que cuando te sales del otro formulario donde agregas, borras y todo eso realmente quede grabado en la Base de Datos?

Uan forma de ir viendo es ejecutando el programa por líneas, y cuando se ejecute donde grabas en la Base de Datos... o sea cuando pase el UPDATE en la tabla "moviles", te vayas a abrir la tabla esa desde Access y veas que realmente se haya grabado....

Otra...

Cuando haces esto...
Do Until rsMov.EOF
cmbMoviles.AddItem rsMov("Nombre_Movil")
cmbMoviles.ItemData(cmbMoviles.NewIndex) = rsMov("Id_movil")
rsMov.MoveNext
Loop

No entiendo que haces aquí...
cmbMoviles.ItemData(cmbMoviles.NewIndex) = rsMov("Id_movil")

Pero eso no importa....

Asegúrate que realmente se agrege el último.... esto te lo digo porque no recuerdo bien como funciona el Do Until .... Loop

Espero puedas solucionar tu problema...
SALUDOS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No siempre actualiza la BD

Publicado por Krator (71 intervenciones) el 12/09/2005 20:34:43
Si, si que se agrega en la BD, sin embargo no se refleja en el programa en ese instante, porque si cierras el formulario inicial y lo vuelves a abrir del tirón, en el combo aparecerá estupendamente.

cmbMoviles.ItemData(cmbMoviles.NewIndex) = rsMov("Id_movil")
Esto de ahi arriba sirve para asociar un número a ese elemento de la lista. Este numero es rsMov("Id_movil"), es decir, el identificador del móvil, con lo que en todo momento sabré que móvil a escogido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No siempre actualiza la BD

Publicado por Krator (71 intervenciones) el 13/09/2005 13:12:14
Pues probando y probando os puedo decir algo más.

Declaré una variable global y la coloque en el unload del 2 formulario(donde se agrega,borra y demás). En ella guardé el ultimo registro introducido.

Luego en el formulario 1, despues de llamar al 2º. Fui a buscarlo, para ello:
rsMoviles.MoveFirst
rsMoviles.Find "Id_Movil=" & ultReg '(variable global)

Cuando ejecuté el programa me dijo q ese ultimo (ultReg)...no existía en la BD, pero al abrir la BD...SI ESTABA. Es como si no se actualizara por mucho
rsMoviles.Requery
que le ponga.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No siempre actualiza la BD

Publicado por ivan (463 intervenciones) el 13/09/2005 20:02:34
Si al momento de grabar... si se graba realmente.. entonces tu problema puede estar en el momento en que le asignas los valores al combo...

Dices que si cierras el formulario inicial y lo vuelves abrir... sí se vé reflejado en el combo el último valor...??

Si acaso esto es cierto, entonces fíjate cómo abres la tabla y cómo le asignas los valores al combo... en el formulario inicial... y ese código cópialo justo cuando agregas un nuevo registro...

Tambien como comentario... La variable global "ultReg"...

Cuando haces esto..

rsMoviles.Find "Id_Movil=" & ultReg '(variable global)

Asegúrate que realmente tenga ese valor, puede que no capte bien el valor cuando se lo asignas.... y si no te funciona el Requery... entonces cierra el recordset y vuélvelo a abrir...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No siempre actualiza la BD

Publicado por Krator (71 intervenciones) el 15/09/2005 00:13:55
Si, si se cierra y vuelves a abrir el formulario siempre aparece correctamente, incluido el ultimo valor.

Cuando dices "fíjate cómo abres la tabla y cómo le asignas los valores al combo... en el formulario inicial...", te refieres a la conexion de la BD y mi funcion cargarcmbMovil ? No te entendí muy bien esta parte, por favor detallame más.

Cuando hago lo del ultReg, si que tiene el valor preciso, recorre todo el recodset, pero al no encontrarlo me dice que ya está en EOF, sin hallarle.

Lo de cerrar y abrir el recordset, no funcionó.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No siempre actualiza la BD

Publicado por ivan (463 intervenciones) el 17/09/2005 18:22:10
Cuando dices... "porque si cierras el formulario inicial y lo vuelves a abrir del tirón, en el combo aparecerá estupendamente", supongo que en este paso, el combo queda con todos los registros cargados....

Es cuando digo que te fijes cómo abres el RecordSet en ese formulario inicial para que copies el mismo código a la parte donde grabas...

Para que cuando grabes... cierres el recorset.. limpies el combo... y vuelvas a abrir el recorset tal y como lo abres en el formulario inicial (que es cuando si funciona...) y vuelvas a llenar el RecordSet..

Aunque creo que eso es lo que haces...

Espero que alguien más te ayude a resolver esto.... Si acaso le encontraste a esto ponlo aquí para saberlo yo también.... uno nunca sabe cuando pueda atorarse en algo....

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar