Ver la Versión Completa : Actualizar un ListBox relacionado con una base de datos
Hola, tengo un ListBox que ataca a una BD de Oracle y ocurre que cuando hago un insert en la BD, no se me actualiza el ListBox. El codigo fuente que utilizo es el siguiente:
With MiListBox.BindingContext.Item[EcodomesticaDataSet, 'usuarios'] as CurrencyManager Do Refresh;
MiListBox.Refresh;
Previamente, he relacionado el ListBox con la BD:
With MiListBox Do
Begin
DataSource := EcodomesticaDataSet;
DisplayMember := 'usuarios.IDUSUARIO'; //Tabla.Campo
End;
¿Sabeis cuál puede ser el error?
Gracias.
Por cierto, el insert lo hago de la siguiente manera (por si pudiera causar algún error en el posterior refresco del listbox):
//Se entiende que el Adapter ya está activo y el dataset relacionado
Conexion.Open; // Conexión es del tipo Borland.Data.Provider.BdpConnection;
ComandoSQL := 'insert into usuarios (Campo1,Campo2) values ('Dato1','Dato2'); //ComandoSQL es un String;
ComandoInsertar.CommandText := ComandoSQL; //ComandoInsertar es una variable tipo Borland.Data.Provider.BdpCommand
Transaccion := EcodomesticaConexion.BeginTransaction; //Transaccion es del tipo Borland.Data.Provider.BdpTransaction
ComandoInsertar.ExecuteNonQuery;
Transaccion.Commit;
Conexion.Close;
Este código se abre en una ventana modal (dialog) que, al cerrarse, debe actualizar el listbox de otra ventana ya abierta, tal y como he puesto en el mensaje anterior, pero no funciona. Tampoco ha funcionado lo siguiente:
With MiListBox Do
Begin
DataSource := NIL;
DataSource := MiDataSet;
DataMember := Tabla.Columna;
Refresh;
End;
Hola, comentar que también he comprobado que en la base de datos sí se actualizan los nuevos datos pero no se reflejan en el ListBox.
También he probado el siguiente código tras realizar el insert:
MiAdaptador.Update(MiDataSet.Tables['usuarios']); MiDataset.AcceptChanges;
With BindingContext[MiDataSet, 'usuarios'] as CurrencyManager Do Refresh;
{MiListBox.DataSource := NIL;
MiLstBox.DataSource := MiDataSet;}
MiListBox.DisplayMember := 'usuarios.IDUSUARIO';
MiListBox.Refresh;
pero el ListBox no refleja los cambios (entiendo que el dataset está actualizado al llamar al metodo "update" del adaptador).
Un saludo.
No tengo el placer de conocer a Oracle, ni tampoco a ese Listbox, pero sin duda, el tema está en refrescar los items, vaciandolos y despues asignándole de nuevo el datasource.
MiListbox.Refresh, unicamente pintará de nuevo el listbox, pero no añade / cambia los elementos de la lista.
Siento no poder ayudarte más.
saludos
Gracias por la ayuda. También he probado MiListBox.Update. En teoría, si hagu un update del adaptador, al estar el listbox ligado a la base de datos (binding, datasource), el listbox debería actualizarse automaticamente, pero no lo hace.
Para quien le interese. Una solución puede ser esta:
MiAdaptador.SelectCommand.CommandText = "SELECT * FROM MiTabla ";
MidataSet.Clear;
MiAdaptador.Fill(dataSet1, "Books");
Se entiende que ya se la he hecho el "bind" a los controles que visulizan los datos de la base de datos.
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.