Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #4  
Antiguo 17-07-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 Santiago.

Cita:
Empezado por santiago14 Ver Mensaje
...En p2 devuelve basura. ¿Qué estoy haciendo mal?
Lo que sucede es que estas asignando a todos los apuntadores la misma dirección de memoria (variable "tipo") y cambiando su contenido antes de cada nueva asignación, cuando lo que necesitas es que los apuntadores hagan lo suyo a distintas posiciones de memoria (variables).

Tenes varias maneras de lograr lo que buscas:

Usando un TStrings y un arreglo, como en el ejemplo que te puso Nelson.
Código Delphi [-]
var
  TipServ: TStrings;
  StrVec: array of string;

procedure TForm1.FormCreate(Sender: TObject);
begin
  TipServ:= TStringList.Create;

  with qryTiposServicios do
  begin
    Open;
    while not eof do
    begin
      SetLength(StrVec, Length(StrVec) + 1);
      StrVec[High(StrVec)]:= FieldByName('CAPITAL').AsString;
      TipServ.AddObject(FieldByName('NAME').AsString, Pointer(StrVec[High(StrVec)]));
      Next;
    end;
  end;
end;

procedure TForm1.btnShowClick(Sender: TObject);
var
  i: Integer;
begin
  Memo1.Clear;
  for i:= 0 to TipServ.Count-1 do
    Memo1.Lines.Add(Format('%s, %s',[TipServ[i],
      string(TipServ.Objects[i])]));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  TipServ.Free;
  Finalize(StrVec);
end;

Usando una clase:
Código Delphi [-]
type
  TMiStr = class
    s1: string;
  end;

var
  TipServ: TStrings;

procedure TForm1.FormCreate(Sender: TObject);
var
  MiStr: TMiStr;
begin
  TipServ:= TStringList.Create;
  with qryTiposServicios do
  begin
    Open;
    while not eof do
    begin
      MiStr:= TMiStr.Create;
      MiStr.s1:= FieldByName('DESCRIPCION').AsString;
      TipServ.AddObject(FieldByName('TIPO').AsString, TObject(MiStr));
      Next;
    end;
  end;
end;

procedure TForm1.btnShowClick(Sender: TObject);
var
  i: Integer;
begin
  Memo1.Clear;
  for i:= 0 to TipServ.Count-1 do
    Memo1.Lines.Add(Format('%s, %s',[TipServ[i], TMiStr(TipServ.Objects[i]).s1]));
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
  i: Integer;
begin
  for i:= 0 to Pred(TipServ.Count) do
    TipServ.Objects[i].Free;
  TipServ.Free;
end;

Con dos TStrings.
Código Delphi [-]
...
var
  s1: TStrings;
  s2: TStrings;

procedure TForm1.FormCreate(Sender: TObject);
begin
  s1:= TStringList.Create;
  s2:= TStringList.Create;
  with qryTiposServicios do
  begin
    Open;
    while not eof do
    begin
      s1.Add(FieldByName('TIPO').AsString);
      s2.Add(FieldByName('DESCRIPCION').AsString);
      Next;
    end;
  end;
end;

procedure TForm1.btnShowClick(Sender: TObject);
var
  i: Integer;
begin
  Memo1.Clear;
  for i:= 0 to s1.Count-1 do
    Memo1.Lines.Add(Format('%s, %s',[s1[i],s2[i]]));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  s1.Free;
  s2.Free;
end;

Mediante un array dinámico.
Código Delphi [-]
...
type
  TRecStr = record
    s1: string;
    s2: string;
  end;

var
  VecStr: array of TRecStr;

procedure TForm1.FormCreate(Sender: TObject);
begin
  with qryTiposServicios do
  begin
    Open;
    while not eof do
    begin
      SetLength(VecStr, Length(VecStr)+1);
      VecStr[High(VecStr)].s1:= FieldByName('TIPO').AsString;
      VecStr[High(VecStr)].s2:= FieldByName('DESCRIPCION').AsString;
      Next;
    end;
  end;
end;

procedure TForm1.btnShowClick(Sender: TObject);
var
  i: Integer;
begin
  Memo1.Clear;
  for i:= Low(VecStr) to High(VecStr) do
    Memo1.Lines.Add(Format('%s, %s',[VecStr[i].s1, VecStr[i].s2]));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Finalize(VecStr);
end;
Particularmente considero los dós últimos códigos mas naturales, sin necesidad de forzar tipos através del uso de moldeos.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 17-07-2014 a las 05:38:59.
Responder Con Cita
 



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
Listas dinámicas para almacenar objetos noob OOP 2 17-07-2012 11:34:19
Almacenar y recuperar archivos binarios en BD PostgresSQL con ADO y ODBC KATODO Trucos 4 01-09-2008 00:08:24
Liberar memoria de objetos y listas aggg63 OOP 1 13-02-2008 17:35:08
Manejo de Multi-Listas (listas de listas) DelphiRat OOP 4 03-07-2006 19:42:58
Cómo almacenar, editar y recuperar una archivo de imagen guardado en la base de datos JKM MS SQL Server 0 03-05-2006 22:29:41


La franja horaria es GMT +2. Ahora son las 11:04:21.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi