Problemas actualización Datagrid en VB

Cada vez que introduzco un dato en una BD e intento que el datagrid muestre el cambio, no ocurre nada, te mando el código para ver si me puedes decir que esta mal.
Formulario 1:
Private Sub Command1_Click()
Set BaseDatos = New ADODB.Connection
BaseDatos.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\db.mdb;Mode=ReadWrite;Persist Security Info=False"
BaseDatos.Open
Form2.Show 1
' Adodc1.Refresh
DataGrid1.Refresh
End Sub
Formulario 2:
Private Sub Command1_Click()
Set Consulta = New ADODB.Recordset
Consulta.ActiveConnection = BaseDatos
SQL = "INSERT INTO tabla (texto) VALUES ('" & Text1.Text & "')"
BaseDatos.Execute SQL
Unload Form2
End Sub
Si dejo sin comentar Adodc1.Refresh, la actualización funciona pero la tabla pasa a mostrar el primer resultado de la tabla y no el ultimo, cosa que no quiero.
Gracias.
Respuesta
1
Si no me equivoco y a simple vista te diría que si pones FORM1. DATAGRID1. REFRESH antes del Unload Form2 debería de funcionar. El problema esta en que cuando llamas al Form2 puede que el control del programa no espere a que se realice todo el código del Form2. Así que continua, te realiza el refresh del grid pero aun no ha realizado en insert del Form2. De esta manera te aseguras que una vez realizado el insert actualice el grid situado en el form1.
Pruébalo y a ver que pasa.
Gracias por tu ayuda, pero he hecho lo que me dices y me sigue sin funcionar. Tienes razón en que debe ser un problema de tiempo, es decir, si en formulario 2 cierro la BD y la vuelvo a abrir, si que se actualiza, pero el datagrid al actualizarse se coloca en la primera posición, lo que no deseo, quiero que se mantenga en el ultimo registro introducido.
En parte el problema puede deberse al tiempo que se tarda en escribir en la BD, ya que al cerrarla y abrirla si que se ve, pero me parece muy poco 'fino'.
¿Alguna idea? Me parece que la solución tiene que ser mucho más sencilla que todo esto, pero no la veo...
Gracias y Felices Fiestas a ti también
Pues así a palo seco no se que decirte, tendría que probarlo con un proyecto a ver si veo algo raro.
Otra idea, prueba de poner un DoEvents antes del Refresh del grid. Si no funciona puede ser que verdaderamente no pueda hacerse automáticamente y tengas que realizar el refresh del Adodc1 y forzar que se sitúe en el registro que hayas entrado.

1 respuesta más de otro experto

Respuesta
1
Toda tu rutina está bien, salvo por la no inclusion de la actualizacion del Adodc; esta actualizacion permite cambiar los datos existentes en memoria hasta ese momento de tu tabla con uno actualizado o actual, por lo cual si deseas que un registro nuevo se vea va a ser imposible sin usar este comando a menos que se reinicie el programa;
Al hacer la actualización te muestra el primer registro - esto es por defecto -, para lo cual te sugeriría trabajar con un comando adicional después de la actualización:
Adodc1. Refresh
Adodc1.recordset.movelast
Éste ultimo te mueve el puntero del registro al ultimo ingresado, y listo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas