PDA

Ver la Versión Completa : Leer informacion de un objeto creado


edorantes
09-04-2013, 02:05:41
Hola amigos estoy creando un objeto para guardar los datos de un usuario pero lo que no se es como leerlos es decir una vez que los guarde ¿Como los extraigo? me dicen que tengo que hacer un metodo para leerlo pero no se como aqui mi codigo de guardado


procedure Tusuarios.add (id : Integer; nombre : String;supConDer : Currency ; supSinDer:Currency; cultivo:String);
begin
idU[ap] := id;
nombreU.Add(nombre);
supCder[ap] := supConDer;
supSder[ap] := supSinDer;
cultivoU.Add(cultivo);

end;

Lo que no se como hacer es el metodo para mostrar la informacion espero me puedan ayudar

ecfisa
09-04-2013, 02:35:58
Hola edorantes.

Das muy poca información para darte una respuesta concreta.

Habría que ver la declaracion de Tusuarios y también los tipos y entornos de idU, nombreU, supCder, supSder, cultivoU y el índice ap.

Cuando indicas que necesitas leerlos, a que te refieres ¿ A mostrarlos ?, ¿ A devolver el objeto indicado ?.
Que tipo de valor utilizará el método para buscar el objeto ¿El identificador, de tipo entero, o el nombre de tipo string ?, ¿?, ...

Saludos.:)

edorantes
09-04-2013, 17:05:38
Este es el codigo de mi unidad

unit uUsuarios;

interface

uses classes, Types, SysUtils;

type

//Aqui defino mis propios tipos de variables
TIntArray = array[0..200] of shortint;
TSingleArray = array[0..200] of currency;

Tusuarios = class(TObject)
Constructor Create;

private
idU,cuentaU,subcU : TIntArray;
supCder, supSder : TSingleArray;
nombreU, cultivoU : TStrings;
ap : shortint; {Apuntador, lleva el numero de recibos en el cobro actual}
public

procedure inicializa();

procedure add(id : Integer; nombre : String;
supConDer : Currency ; supSinDer:Currency; cultivo:String) ;



end;

implementation

constructor Tusuarios.create;
begin
nombreU := Tstringlist.create;
cultivoU := Tstringlist.create;


end;

procedure Tusuarios.inicializa;
begin
ap := 0; //inicializamos ap que es el apuntador

end;

procedure Tusuarios.add (id : Integer; nombre : String;supConDer : Currency ; supSinDer:Currency; cultivo:String);]//Aqui guardo //los datos de el usuario
begin
idU[ap] := id;
nombreU.Add(nombre);
supCder[ap] := supConDer;
supSder[ap] := supSinDer;
cultivoU.Add(cultivo);

end;

procedure Tusuarios.get (indice : Shortint);// Este seria el de mostrar los datos guardados anteriores el cual no se como hacerlo
begin


end;

end.

Bueno en mi ojeto guardo la informacion de los usuarios pero no se como hacer el de mostrar

ecfisa
09-04-2013, 17:53:24
Hola.

A grandes rasgos, como para darte una idea, primero tendrías que incrementar el índice ap en el método add:

procedure Tusuarios.add(id: Integer; nombre: string; supConDer,
supSinDer: Currency; cultivo: string);
begin
idU[ap]:= id;
nombreU.Add(nombre);
supCder[ap] := supConDer;
supSder[ap] := supSinDer;
cultivoU.Add(cultivo);
Inc(ap); // <- Aquí
end;


Y un ejemplo para mostrar el contenido:

procedure Tusuarios.Show(Indice: Integer);
begin
if (Indice < 0)or(Indice > ap-1) then
raise Exception.Create('Indice fuera de rango');
ShowMessage(Format('%d %s %f %f %s',
[idU[Indice],nombreU[Indice],supCder[Indice],supSder[Indice],CultivoU[Indice]]))
end;


Saludos.

edorantes
09-04-2013, 20:59:00
Bueno amigo hay te va lo que tengo que hacer, lo que pasa es que desde mi clase no puedo usar nada visual lo que tengo que hacer es que una vez que guarde la informacion de los usuarios, despues la pueda visualizar en una tabla desde mi form pricipal
Ejemplo

var
InformacionU : Tusuarios;

InformacionU.Create;
InformacionU.add(idU,nombreU,GsupCder,ed_superficie.Value,
cbox_clave.Items.Text);// Aqui meto la cantidad que quiera de informacion accediendo a mi objeto NOTA enstoy en mi Form NO en mi clase


//Lo que quiero es que desde aqui pueda y sacar la informacion necesaria solo enviandole el numero de apuntador
y agregarlo a una tabla o listview yo primero lo hacia mostrando directamente los datos en la tabla
asi

with ListView.Items.Add do
begin
Caption:= '1';
SubItems.Add( '35' );
SubItems.Add( 'Eduardo' );
end;

pero me dijeron que no que me creara un objeto y mediante eso muestre elmine y agregue


//como viste he tratado de hacerlo el de agregar que es ADD me falta el de mostrar y eliminar si ves que tengo errores ayudame
//Espero me hayas entendido

edorantes
09-04-2013, 21:04:11
Bueno amigo hay te va lo que tengo que hacer,
lo que pasa es que desde mi clase no puedo usar nada visual
lo que tengo que hacer es que una vez que guarde la informacion de los usuarios, despues la pueda visualizar en una tabla desde mi form pricipal
Ejemplo

var
InformacionU : Tusuarios;

InformacionU.Create;
InformacionU.add(idU,nombreU,GsupCder,ed_superficie.Value,
cbox_clave.Items.Text);// Aqui meto la cantidad que quiera de informacion accediendo a mi objeto NOTA enstoy en mi Form NO en mi clase


//Lo que quiero es que desde aqui pueda y sacar la informacion necesaria solo enviandole el numero de apuntador y agregarlo a una tabla o listview
yo primero lo hacia mostrando directamente los datos en la tabla pero me dijeron que no que me creara un objeto y mediante eso muestre elmine y agregue
//como viste he tratado de hacerlo el de agregar que es ADD me falta el de mostrar y eliminar si ves que tengo errores ayudame
//Espero me hayas entendido

edorantes
10-04-2013, 01:43:56
No se que paso con las respuestas aneriores, a grandes rasgos quisiera saber como se hace algo asi que ponga un boton y obtenga los datos pero no se como quedaria mi clase, aqui un ejemplo

procedure TFormMain.btn_cobroClick(Sender: TObject);
begin

//ASi es como quisiera que quedara pero aun no se como
showmessage(Tusuarios.Show(0).getNombre);// Aqui si quisiera mostrar solo el nombre
O tambien
showmessage(IntToString(Tusuarios.Show(0).getCuenta)+Tusuarios.Show(0).getNombre);// Aqui si quisiera mostrar cuenta y Nombre

end;

ecfisa
10-04-2013, 06:46:08
Hola edorantes.
No se que paso con las respuestas aneriores, a grandes rasgos...
Lo que sucede es que lamentablemente no podemos permanecer conectados a Club Delphi todo lo que nos gustaria...

lo que pasa es que desde mi clase no puedo usar nada visual lo que tengo que hacer es que una vez que guarde la informacion de los usuarios, despues la pueda visualizar en una tabla desde mi form pricipal

Te soy sincero, no entiendo la lógica de tu código. Pero te pongo una de las formas en que lo haría, espero que te sirva para sacar alguna idea.

Por lo que comentas arriba ("no puedo usar nada visual"), supongo que tenes que realizarlo en modo consola:

program Project2; {$APPTYPE CONSOLE}

uses SysUtils;

type
TUsuarios = class(TObject)
private
Fid : Integer;
FSupCder, FsupSder : Currency;
FNombre, FCultivo : string;
FVUsuarios : array of TUsuarios;
public
property Nombre: string read FNombre write FNombre;
property Cultivo: string read FCultivo write FCultivo;
property SupCDer: Currency read FSupCDer write FSupCDer;
property SupSDer: Currency read FSupSDer write FSupSDer;
constructor Create;
procedure Add(const aID: Integer; const aNombre,aCultivo : string;
const aSupConDer, aSupSinDer: Currency);
function GetUser(const id: Integer): TUsuarios;
destructor Destroy; override;
end;

// Crear
constructor TUsuarios.Create;
begin
inherited;
FVusuarios := nil
end;

// Añadir usuarios
procedure TUsuarios.Add(const aID: Integer; const aNombre,aCultivo : string;
const aSupConDer, aSupSinDer: Currency);
begin
SetLength(FVUsuarios, Length(FVUsuarios)+1);
FVUsuarios[High(FVUsuarios)] := TUsuarios.Create;
with FVUsuarios[High(FVUsuarios)] do
begin
Fid := aID;
FNombre := aNombre;
FCultivo:= aCultivo;
FSupCder:= aSupConDer;
FsupSder:= aSupSinDer;
end;
end;

// Obtener usuario a partir del ID
function TUsuarios.GetUser(const aID: Integer): TUsuarios;
var
i: Integer;
begin
Result := nil;
for i:= High(FVUsuarios) downto Low(FVUsuarios) do
if aID = FVUsuarios[i].Fid then
Result := FVUsuarios[i]
end;

// Liberar memoria
destructor TUsuarios.Destroy;
var
i: Integer;
begin
for i := High(FVUsuarios) downto Low(FVUsuarios) do
FVUsuarios[i].Free;
FVUsuarios := nil;
inherited
end;

(* Ejemplo del uso *)
var
U,R: TUsuarios;
begin
U := TUsuarios.Create;
try
U.Add(1,'Juan','trigo',2,3);
U.Add(2,'Andrea','soja',5.25,3.12);
U.Add(3,'Maria','cebada',12.13,1.83);
R := U.GetUser(2);
if Assigned(R) then
begin
Writeln('Nombre : ',R.Nombre);
Writeln('Cultivo: ',R.Cultivo);
Writeln('SupCDer:',R.SupCDer:8:2);
Writeln('SupSDer:',R.SupSDer:8:2);
end;
finally
U.Free;
end;
readln;
end.


Saludos.