PDA

Ver la Versión Completa : pasar item del combobox a un listbox


exequielmatias1
14-06-2014, 23:35:01
Quiero Seleccionar un item del combobox (el cual se carga desde una tabla de una bd) y al hacer click, pase ese dato a un listbox. Luego al presionar guardar, guarde esos datos con su respectivo ID a otra tabla de la misma bd.
La carga al combobox la hago de esta forma:

//CARGA COMBOBOX EJECUTIVO
Form1.qryDestinos.SQL.Text := 'Select DESTINOS From Destinos order by Destinos asc';
Form1.qryDestinos.Active := True;
While not Form1.qryDestinos.Eof do
begin
Combobox1.Items.Add(Form1.qryDestinos.Fields[0].Text);
Form1.qryDestinos.Next;


Es decir si selecciono varios ítems del combobox se van a ir mostrando en el listbox. Luego presiono el boton guardar, cada ítems del listbox se guardara en un registro de una tabla diferente con el id de la tabla original

ecfisa
15-06-2014, 08:21:20
Hola exequielmatias.
Quiero Seleccionar un item del combobox (el cual se carga desde una tabla de una bd) y al hacer click, pase ese dato a un listbox. Luego al presionar guardar, guarde esos datos con su respectivo ID a otra tabla de la misma bd.
...

Si deseas pasar el item visible mas su respectivo ID desde el ListBox a otra tabla, la carga no puede ser de ese modo ya que no tenes manera de obtener el ID desde el ComboBox...

Según lo que entendí de tu consulta, sería:

...
// Cargar el combo con los campos DESTINO e ID
procedure TForm1.btnCargarCombo(Sender: TObject);
begin
ComboBox1.Items.Clear;
with qryDestinos do
begin
Close
Text := 'Select ID, DESTINOS From Destinos order by Destinos asc'
Open;
while not Eof do
begin
ComboBox1.AddItem(FieldByName('DESTINOS').AsString,
TObject(FieldByName('ID').AsInteger));
Next;
end;
end;
end;

// Pasar items del combo al listbox
procedure TForm1.ComboBox1Click(Sender: TObject);
begin
with ComboBox1 do
if ItemIndex <> -1 then
ListBox1.AddItem(Items[ItemIndex], Items.Objects[ItemIndex]);
end;

// Guardar en la otra tabla los items del listbox
procedure TForm1.btnSaveClick(Sender: TObject);
var
i: Integer;
begin
with qryDestinos do
begin
Close;
SQL.Text:= 'INSERT INTO TU_OTRA_TABLA(ID, DESTINOS) VALUES(:PID, :DES)';
Prepare;
for i:= 0 to ListBox1.Items.Count-1 do
begin
ParamByName('PID').AsInteger:= Integer(ListBox1.Items.Objects[i]);
ParamByName('DES').AsString:= ListBox1.Items[i];
ExecSQL;
end;
end;
end;

Lógicamente en la última sentencia SQL tendrás que cambiar "TU_OTRA_TABLA" y los nombres de campos de dicha tabla por los que hayas definido. No tengo Delphi en este momento pero creo que el código debería funcionar.

Saludos :)