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 16-03-2008
PabloZZZ PabloZZZ is offline
Miembro
 
Registrado: mar 2008
Posts: 20
Poder: 0
PabloZZZ Va por buen camino
Lista de objetos

Hola Amigos!

Este es mi primer mensaje, felicitaciones por este excelente web.

Voy con mi duda.
Tengo un objeto (o record) y quiero convertirlo en una lista donde pueda agregar y borrar elementos, y luego presentarla en una grilla. Nunca lo hice, quisiera saber qué componentes me recomiendan utilizar.

Los campos a guardar son:
Descripcion, cantidad, importe, iva, impuestos.
De los cuales, solo quiero mostrar en mi grilla los 3 primeros. (pero el objeto tiene más atributos)

Saludos
Responder Con Cita
  #2  
Antiguo 16-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Bienvenido al club
Que base de datos usas?.
O
Vas a sacar los datos de un archivo text?.
De donde vas a sacar los datos?.
Saludos
Responder Con Cita
  #3  
Antiguo 16-03-2008
PabloZZZ PabloZZZ is offline
Miembro
 
Registrado: mar 2008
Posts: 20
Poder: 0
PabloZZZ Va por buen camino
Hola. Estoy trabajando con Firebird (caño!!) pero no es importante...
Yo lo que quiero hacer es:

TLista.Add( sDescrip, nCant, nTotal.... )

E ir representandolo en pantalla...

Poder acceder al renglón seleccionado (por si quiero hacer alguna operación sobre el objeto ya creado), etc.

Z
Responder Con Cita
  #4  
Antiguo 16-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Cita:
Empezado por PabloZZZ Ver Mensaje
Hola. Estoy trabajando con Firebird (caño!!) pero no es importante...
Yo lo que quiero hacer es:

TLista.Add( sDescrip, nCant, nTotal.... )

E ir representandolo en pantalla...

Poder acceder al renglón seleccionado (por si quiero hacer alguna operación sobre el objeto ya creado), etc.

Z
Bueno si dices que no es importante, entonces no lo es.
Por cierto no conozco el nuevo Firebird (caño!!), debe ser edición limitada
Saludos
Responder Con Cita
  #5  
Antiguo 16-03-2008
PabloZZZ PabloZZZ is offline
Miembro
 
Registrado: mar 2008
Posts: 20
Poder: 0
PabloZZZ Va por buen camino
Jajaja.... "caño" es una expresión Argentina.. que significa... MUY BUENO...

Ahora.. pensandolo bien... hay algun componente que maneje una tabla en memoria? el TClientDataSet hace eso? No se como usarlo...
Porque estoy pensando que lo que quiero es manejar una tabla.. en memoria.. seleccionar los campos que quiero ver.. y que la tabla tenga más campos... Cómo lo puedo hacer? Dónde aprendo a manejar el TClientDataSet (si es que se ajusta a lo que necesito)

Gracias!!!
Z
Responder Con Cita
  #6  
Antiguo 16-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Enviemos este hilo al principio para que algun maestro lo vea.
Saludos
Responder Con Cita
  #7  
Antiguo 16-03-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Bueno, no soy un maestro pero creo que puedo ayudar en algo:

1. PabloZZZ, ¿al final que és? Una clase o un record? Debes especificar concretamente lo que es, pues dependiendo de ello se hará más o menos fácil lo que buscas... o simplemente traducido: "más o menos código"

Esto te pregunto porque dices:

Cita:
Tengo un objeto (o record)
Bueno, esto me lleva a segundo punto:
Cita:
y quiero convertirlo en una lista donde pueda agregar y borrar elementos
Código Delphi [-]
TLista.Add( sDescrip, nCant, nTotal.... )

Veamos... ¿Que es sDescrip, nCant, etc?

Lo que deseas hacer se puede conseguir con un TObjectList, TList, TStrings, entre otros... cada uno te hará dificil o fácil la tarea.

Y aquí hablamos de algo que influye mucho. Y como dije.. hay muchas manera de resolverlo. A mi de entrada se me ocurren dos:

A. Un TObjetList (por ejemplo) que guarda la lista de tus objetos.
Código Delphi [-]
ObjList1.Add(TTuObjeto);

B. Un clase propia que ofrece los métodos necesarios, ofreciendo un adaptador que mantiene la lista.

Código Delphi [-]
TUnaClase = class
private
  Lista: TObjectList;
...
end;

De modo que se consigue por ejemplo:

Código Delphi [-]
UnaClase.AgregarAlgo(Algo: TAlgo);

Y su implementación podría ser algo como:

Código Delphi [-]
function TUnaClase.AgregarAlgo(Algo: TAlgo): integer;
begin
  // ...
  result := Lista.Add(Algo);
  // ...
end;

Siendo en este caso TAlgo aquella clase que tienes... pero claro... si en realidad es un record... esto habría que modificar...

Sugiero una correcta leída de la ayuda de Dephi, del uso del buscador de los foros y una explicación precisa de tus necesidades/problemas/dudas.

Y con respecto al tema del TDataSet, si es una "tabla en memoria". Nuevamente invito a hacer una búsqueda en los foros. Ya se ha hablado bastante sobre el tema.

Espero que se me haya entendido.
Los maestros podrán explicar mejor y dar otras alternativas.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 16-03-2008 a las 22:53:46.
Responder Con Cita
  #8  
Antiguo 16-03-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
si logre entender la mejor opcion que puedes tener es la tabla en memoria, yo utilizo TKBMemTable, faciles de utilizar y no debes perder tanto tiempo reinventando la rueda...
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #9  
Antiguo 16-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Entonces, entre Argentinos se entienden??
La explicacion parece que esta Caño.
Saludos
Responder Con Cita
  #10  
Antiguo 16-03-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por eduarcol Ver Mensaje
si logre entender la mejor opcion que puedes tener es la tabla en memoria, yo utilizo TKBMemTable, faciles de utilizar y no debes perder tanto tiempo reinventando la rueda...
Muy cierto Eduardo, con tener un TDataSet bastaría.
Ambos sabemos que añadir clases puede conducirnos a reinventar la rueda, y añade más ruido al sistema.
PabloZZZ debe examinar bien que es lo que debe hacer, si es solo un "ABM" de los datos tenemos muchas alternativas, que con poco código se consigue hacer las cosas.

Si el uso de las clases permiten reducir el impacto del ruido y aportan mayor utilidad (funcionalidad) para abordar los requisitos consideraría su uso.

En fin, creo que mi ejemplo demuestra parte de la reinvencion de la rueda.
PabloZZZ debes hacer un mayor análisis.

Cita:
Empezado por Caral Ver Mensaje
Hola
Entonces, entre Argentinos se entienden??
La explicacion parece que esta Caño.
Saludos
Cuando leí esa palabra dije, este es Argentino. Y si, nosotros sólos nos entendemos.. jeje... (aunque a veces no).
No se si será un Caño, pero como dije antes: demuestra muchas cosas:
1. La falta de análisis del problema.
2. El grave peligro de hacer más de la cuenta, o incluso... hacer menos de la cuenta.

PabloZZZ no es que haya sido malo, es que con tan escasos datos que aportas, mucho no podemos ayudar.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #11  
Antiguo 16-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Perdona Delphius, pero esta pregunta no la entiende nadie, solo un Argentino.
Para mi no tiene ni pies ni cabeza, esta falta de informacion y no especifica practicamente nada, por eso me parece que tu respuesta debe de estar Caño, por que si no quien Coño, lo entiende.
Saludos
Responder Con Cita
  #12  
Antiguo 23-03-2008
PabloZZZ PabloZZZ is offline
Miembro
 
Registrado: mar 2008
Posts: 20
Poder: 0
PabloZZZ Va por buen camino
Delphius! gracias por responder.

Cita:
Empezado por Delphius Ver Mensaje
1. PabloZZZ, ¿al final que és? Una clase o un record?
Va a ser un Record.

Cita:
Empezado por Delphius Ver Mensaje
De modo que se consigue por ejemplo:UnaClase.AgregarAlgo(Algo: TAlgo);Siendo en este caso TAlgo aquella clase que tienes... pero claro... si en realidad es un record... esto habría que modificar...
Si.. eso es lo que quiero hacer.. qué tengo que modificar?

Cita:
Empezado por Delphius Ver Mensaje
Sugiero una correcta leída de la ayuda de Dephi, del uso del buscador de los foros y una explicación precisa de tus necesidades/problemas/dudas.
Ok! sisis.. ya por lo menos se que tengo que leer sobre TObjectList.

Gracias!
Responder Con Cita
  #13  
Antiguo 23-03-2008
PabloZZZ PabloZZZ is offline
Miembro
 
Registrado: mar 2008
Posts: 20
Poder: 0
PabloZZZ Va por buen camino
Cita:
Empezado por Delphius Ver Mensaje
En fin, creo que mi ejemplo demuestra parte de la reinvencion de la rueda.
PabloZZZ debes hacer un mayor análisis.

PabloZZZ no es que haya sido malo, es que con tan escasos datos que aportas, mucho no podemos ayudar.

Saludos,
Si.. lo que pasa es que mi análisis lo hago en base a los pocos componentes que conozco. Intenté utilizar las DevExpress que dicen que son buenisimas, pero a mi se me complica... pero es otro tema. Por favor, tené en cuenta que trabajo solo y mi unica ayuda son las listas de correo y los foros!

Es mi primer post, voy a tratar de mejorar.

Saludos.
Responder Con Cita
  #14  
Antiguo 23-03-2008
Avatar de walito
walito walito is offline
Miembro
 
Registrado: jun 2005
Posts: 121
Poder: 19
walito Va por buen camino
Si sabes usar record entonces no debe ser dificil.

Ejemplo de un record:
Código Delphi [-]
  TPersona = record
    edad: integer;
    nombre: string;            
    appelido: string;            
    direccion: string;
    telefono: string;
  end;

Ahora necesitarias un SETer y un GETer como para cargar y obtener datos.

Ejemplo de una clase.
Código Delphi [-]
unit MiClase;

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type  
  TPersona = record
    edad: integer;
    nombre: string;           
    apellido: string;           
    direccion: string;
    telefono: string;
  end;  
  
  TListaPersonas = array of TPersona;  
  
type
  TMiClase = class(TObject)
  private
    contPersonas: Integer;
    listaPersonas: TListaPersonas;
  public
    constructor Create;
    destructor Destroy; override;
    procedure AddPersona(const edad: Integer; const nombre, apellido, direccion, telefono: string);
    function GetPersona(const position: Integer);
    procedure DelPersona(const position: Integer);
  end;


implementation

{
******************************** TMiClase *********************************
}
constructor TMiClase.Create;
begin
    inherited Create;
end;

destructor TMiClase.Destroy;
begin
    inherited Destroy;
end;

procedure TMiClase.AddPersona(const edad: Integer; const nombre, apellido, direccion, telefono: string);
begin
    Inc(contPersonas);

    SetLength(listaPersonas, contPersonas);

    listaPersonas[High(listaPersonas)].edad := edad;
    listaPersonas[High(listaPersonas)].nombre := nombre;
    listaPersonas[High(listaPersonas)].apellido := apellido;
    listaPersonas[High(listaPersonas)].direccion := direccion;
    listaPersonas[High(listaPersonas)].telefono := telefono;
end;

function TMiClase.GetPersona(const position: Integer): TPersona;
begin
  if (position >= Low(listaPersonas)) and (position <= High(listaPersonas)) then
  begin
      Result := listaPersonas[position];
  end;
end;

procedure TMiClase.DelPersona(const position: Integer);
begin

end;

end.

Te dejo para vos el DelPersona.

Espero te sirba mi clase improvisada y pido perdon por algun errror.

Saludos
Responder Con Cita
  #15  
Antiguo 23-03-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
No entiendo por qué debe ser un "record". ¿Por qué no una clase? Si tienes Firebird, es mejor clases que registros.

TListaPersonas es precisamente un TObjectList. Siempre se ha usado los arrays dinámicos, pero ya que tenemos la clase mencionada, hagamos uso de ella.

Yo al menos usaría la clase TPersona así:
Código Delphi [-]
type TPersona = Class(TObject)

public
  edad: Integer;
  Nombre :string; 
  apellido, direccion, telefono: string;
end;

var Lista :TObjectList;
  p:TPersona;
begin 
   lista := TObjectlist.create(True);
   p := Tpersona.create;
   for i:= 0 to 20 do
   begin
      p:= Tpersona.create;
      p.edad := i;
      lista.Add(p); 
   end;
end;

En el foro hay mucho sobre Tobjectlist.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #16  
Antiguo 25-03-2008
PabloZZZ PabloZZZ is offline
Miembro
 
Registrado: mar 2008
Posts: 20
Poder: 0
PabloZZZ Va por buen camino
Cita:
Empezado por walito Ver Mensaje
Si sabes usar record entonces no debe ser dificil.

Ejemplo de un record:
Te dejo para vos el DelPersona.

Espero te sirba mi clase improvisada y pido perdon por algun errror.

Saludos


Bueniiiiiiiiiiisimo! mil gracias! ya está todo funcionando de maravilla.
Gracias a todos!

Z
Responder Con Cita
  #17  
Antiguo 10-04-2008
PabloZZZ PabloZZZ is offline
Miembro
 
Registrado: mar 2008
Posts: 20
Poder: 0
PabloZZZ Va por buen camino
Acá encontré algo que resumen y complementa todo lo discutido.
Saludos
Z
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
Objetos C# Cheswar .NET 1 10-03-2008 16:13:27
Persistir una lista de objetos miguel_e Varios 6 08-02-2007 22:29:13
¿Mejor heredar de una Lista o mejor introducir la Lista en un campo? Jome OOP 8 24-11-2005 17:11:16
Una lista de Objetos en .NET bustio .NET 1 11-10-2004 15:23:08
Objetos jfontane Varios 1 04-07-2003 15:39:04


La franja horaria es GMT +2. Ahora son las 17:27:30.


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