Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Lista de objetos (https://www.clubdelphi.com/foros/showthread.php?t=54367)

PabloZZZ 16-03-2008 19:20:49

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

Caral 16-03-2008 19:45:29

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

PabloZZZ 16-03-2008 19:48:49

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

Caral 16-03-2008 19:54:41

Hola
Cita:

Empezado por PabloZZZ (Mensaje 273639)
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.:rolleyes:
Por cierto no conozco el nuevo Firebird (caño!!), debe ser edición limitada
Saludos

PabloZZZ 16-03-2008 19:57:41

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

Caral 16-03-2008 20:34:23

Hola
Enviemos este hilo al principio para que algun maestro lo vea.
Saludos

Delphius 16-03-2008 22:48:16

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,

eduarcol 16-03-2008 23:12:21

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...

Caral 16-03-2008 23:14:41

Hola
:D:DEntonces, entre Argentinos se entienden??:confused:
La explicacion parece que esta Caño.:D:D:D:D
Saludos

Delphius 16-03-2008 23:29:59

Cita:

Empezado por eduarcol (Mensaje 273664)
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 (Mensaje 273665)
Hola
:D:DEntonces, entre Argentinos se entienden??:confused:
La explicacion parece que esta Caño.:D:D:D:D
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,

Caral 16-03-2008 23:37:28

Hola
Perdona Delphius, pero esta pregunta no la entiende nadie, solo un Argentino.:D:D
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.:D:D
Saludos

PabloZZZ 23-03-2008 00:17:34

Delphius! gracias por responder.

Cita:

Empezado por Delphius (Mensaje 273663)
1. PabloZZZ, ¿al final que és? Una clase o un record?

Va a ser un Record.

Cita:

Empezado por Delphius (Mensaje 273663)
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 (Mensaje 273663)
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!

PabloZZZ 23-03-2008 00:22:57

Cita:

Empezado por Delphius (Mensaje 273668)
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.

walito 23-03-2008 01:15:15

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

Lepe 23-03-2008 09:43:46

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

PabloZZZ 25-03-2008 18:35:31

Cita:

Empezado por walito (Mensaje 274663)
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

PabloZZZ 10-04-2008 20:01:11

Acá encontré algo que resumen y complementa todo lo discutido.
Saludos
Z


La franja horaria es GMT +2. Ahora son las 23:44:21.

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