Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   .NET (https://www.clubdelphi.com/foros/forumdisplay.php?f=17)
-   -   Actualizar un ListBox relacionado con una base de datos (https://www.clubdelphi.com/foros/showthread.php?t=27128)

SMTZ 12-11-2005 10:00:44

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:

Código:

With MiListBox.BindingContext.Item[EcodomesticaDataSet, 'usuarios'] as CurrencyManager Do Refresh;
MiListBox.Refresh;

Previamente, he relacionado el ListBox con la BD:

Código:

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

Insert
 
Por cierto, el insert lo hago de la siguiente manera (por si pudiera causar algún error en el posterior refresco del listbox):

Código:


//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:

Código:


With MiListBox Do
Begin

  DataSource := NIL;
  DataSource := MiDataSet;
  DataMember := Tabla.Columna;
  Refresh;

End;


SMTZ 13-11-2005 08:50:51

La BD si se actualiza el ListBox no
 
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:

Código:

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

He probado otras cosas
 
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

Solución
 
Para quien le interese. Una solución puede ser esta:


Código:

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.


La franja horaria es GMT +2. Ahora son las 18:00:14.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi