PDA

Ver la Versión Completa : Actualizar un ListBox relacionado con una base de datos


SMTZ
12-11-2005, 10:00:44
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.

SMTZ
12-11-2005, 11:37:44
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;

SMTZ
13-11-2005, 08:50:51
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.

Lepe
13-11-2005, 10:34:35
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

SMTZ
13-11-2005, 10:39:56
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.

SMTZ
14-11-2005, 17:50:51
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.