Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-03-2016
Ramsay Ramsay is offline
Miembro
NULL
 
Registrado: ene 2016
Posts: 104
Poder: 9
Ramsay Va por buen camino
ID como primera columna en tabla

Hola , tengo una duda sobre como organizar una tabla , tengo un listview con columnas de una tabla de la base de datos , como primera columna tengo el ID , el tema es que puede ser un dato que el usuario no necesite pero si no pongo ese ID no puedo saber que fila de la BD es cuando se selecciona un item de la tabla , eh visto en varios programas y muchos dejan el codigo del producto o el ID como primera columna , ¿ es correcto dejar el id como primera columna o esta mal hacer esto ?
Responder Con Cita
  #2  
Antiguo 20-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Que version de Delphi estas usando? Dispones de Livebindings?
Responder Con Cita
  #3  
Antiguo 21-03-2016
Ramsay Ramsay is offline
Miembro
NULL
 
Registrado: ene 2016
Posts: 104
Poder: 9
Ramsay Va por buen camino
Hola AgustinOrtu , gracias por responder , en realidad solo quiero saber si es correcto o no , porque muchos programas que eh visto hacen lo mismo.
Responder Con Cita
  #4  
Antiguo 21-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Esta bien que un listview o cualquier control presente datos
Esta mal pedirle datos al listview para hacer x cosa

EJ: Listar productos en un listview. De donde vienen los productos? Puede ser un TList, o un TDataSet, para el caso es lo mismo

Ahora, se usa el listview para presentar al usuarios los productos, seleccione uno y luego con ese seleccionado hacer x (aumentar stock, cambiar precio, etc)

Si necesitas tener la columna ID en el listview para saber cual es el producto seleccionado está mal. Esa informacion la tenes en el DataSet/TList. Por eso la pregunta del LiveBindings. LiveBindings te permite crear una clase que se encarga de sincronizar los controles con objetos (desde listas a datasets), asi que cada vez que te mueves en el control el dataset tambien se actualiza y se mueve al mismo registro (tal y como funciona el DBGrid por ejemplo)
Responder Con Cita
  #5  
Antiguo 21-03-2016
Ramsay Ramsay is offline
Miembro
NULL
 
Registrado: ene 2016
Posts: 104
Poder: 9
Ramsay Va por buen camino
ok , gracias por dar tu opinion.
Responder Con Cita
  #6  
Antiguo 21-03-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Ramsay.

Visualizar el código del producto podría o no ser relevante para el cliente... Pero en cuanto a mostrar el identificador único (ID) al usuario, opino igual que Agustín, no le veo sentido alguno.

Si estas trabajando con una versión de Delphi que no soporta LiveBindings, el identificador único lo podes guardar en la propiedad Data de cada TListItem.

Un ejemplo básico de como podrías hacerlo:
Código Delphi [-]
// guardar valores
procedure TForm1.FormCreate(Sender: TObject);
var
  it : TListItem;
begin
  DataSet.Open;
  while not DataSet.Eof do
  begin
    it := ListView1.Items.Add;
    it.Caption := DataSet.FieldByName('NOMBRE').AsString;
    it.Data    := Pointer(DataSet.FieldByName('ID').AsInteger);
    DataSet.Next;
  end;
end;

// mostrar
procedure TForm1.Button1Click(Sender: TObject);
var
  lv: TListView;
begin
  lv := ListView1;
  if lv.ItemIndex <> -1 then
    ShowMessage(Format('Nombre: %s, ID: %d',
      [lv.Items[lv.Selected.Index].Caption,          // NOMBRE
      Integer(lv.Items[lv.Selected.Index].Data)]));  // ID
end;


Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 26-03-2016
Ramsay Ramsay is offline
Miembro
NULL
 
Registrado: ene 2016
Posts: 104
Poder: 9
Ramsay Va por buen camino
gracias por responder ecfisa , me has dejado con una duda , ¿ en los combobox tambien se puede almacenar el id como me mostraste en listview ? , te lo pregunto porque veo que se hace algo asi :

Código Delphi [-]
ComboBox.AddItem(TPerson(PersonList[i]).Name, PersonList[i]);

No me queda claro como se extraeria el id seleccionado en este caso.
Responder Con Cita
  #8  
Antiguo 26-03-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Ramsay.
Cita:
Empezado por Ramsay Ver Mensaje
gracias por responder ecfisa , me has dejado con una duda , ¿ en los combobox tambien se puede almacenar el id como me mostraste en listview ? , te lo pregunto porque veo que se hace algo asi :

Código Delphi [-]
ComboBox.AddItem(TPerson(PersonList[i]).Name, PersonList[i]);

No me queda claro como se extraeria el id seleccionado en este caso.
Ejemplo:
Código Delphi [-]
...
// guardar columnas NOMBRE e ID en el combo
procedure TForm.FormCreate(Sender: TObject);
begin
  TuQuery.Close;
  TuQuery.SQL.Text := 'SELECT ID, NOMBRE FROM TU_TABLA';
  TuQuery.Open;
  while not TuQuery.Eof do
  begin
    ComboBox1.AddItem( TuQuery.FieldByName('NOMBRE').AsString,
      TObject(TuQuery.FieldByName('ID').AsInteger) );
    TuQuery.Next;
  end;
end;

// extraer los datos NOMBRE e ID del combo
procedure TForm.ComboBox1Change(Sender: TObject);
var
  nombre: string;
  id: Integer;
begin
  if ComboBox1.ItemIndex  <> -1 then
  begin
    nombre := ComboBox1.Items[ComboBox1.ItemIndex];
    id     := Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
    ShowMessage(Format('%s %d',[nombre, id]));
  end;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 26-03-2016
Ramsay Ramsay is offline
Miembro
NULL
 
Registrado: ene 2016
Posts: 104
Poder: 9
Ramsay Va por buen camino
Listo , gracias por la ayuda a los dos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como seleccionar datos de una columna en base a un dato de otra de la misma Tabla Cristhor1982 MS SQL Server 21 04-12-2014 09:50:06
Poner una columna de un DBGrid como columna Fija rgstuamigo OOP 4 04-03-2009 21:54:38
Primera columna y fila de un StringGrid gironella OOP 3 01-10-2008 09:42:30
Como meto en un ComboBox todos los valores de una columna de una tabla gorsan Conexión con bases de datos 4 09-07-2007 11:37:50
Tabla con varios lookups a otras. Y otra tabla con un lookup a la primera. En SQL Wonni Conexión con bases de datos 5 26-06-2007 00:15:49


La franja horaria es GMT +2. Ahora son las 23:58:12.


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
Copyright 1996-2007 Club Delphi