Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   string como expresión (https://www.clubdelphi.com/foros/showthread.php?t=77619)

gustavosv 12-02-2012 01:04:28

string como expresión
 
Hola, estoy creando una clase para mostrar de manera estándar en una grilla información de cualquier tabla, pero me encuentro con el siguiente problema: el título (string) debe ser el resultado de cualquier expresión de la BD, p.ej. FieldNombre + FieldApellido o FieldPais + FieldRegion + FieldCiudad, o …
El asunto es que pretendo enviar la expresión como una propiedad tipo string, Expresion := ' FieldNombre + FieldApellido' y luego (no se cómo) asociarla al título así: Titulo := Expresion, esperando que en el título me quede Titulo = 'Martino Carrasquin'.
Cómo puedo convertir el string en una expresión que luego se evalúe y de el resultado que espero …? Alguien puede ayudarme … Gracias

ecfisa 13-02-2012 07:09:53

Cita:

El asunto es que pretendo enviar la expresión como una propiedad tipo string, Expresion := ' FieldNombre + FieldApellido' y luego (no se cómo) asociarla al título así: Titulo := Expresion, esperando que en el título me quede Titulo = 'Martino Carrasquin'.
Hola gustavosv.

Realmente no sé si entendí lo que deseas hacer, pero este código hace estrictamente lo que solicitas arriba. Es decir, brindando los nombres de campos devuelve una cadena con sus contenidos.
Código Delphi [-]
type
  TForm1 = class(TForm)
    ...
    procedure Button1Click(Sender: TObject);
  private
    FExpresion: string;
    function GetExpresion: string;
    procedure SetExpresion(const Value: string);
  public
    property Expresion: string read GetExpresion write SetExpresion;
  end;

...

implementation

function TForm1.GetExpresion: string;
var
  TS: TStrings;
  i,j: Integer;
begin
  TS:= TStringList.Create;
  try
    TS.Delimiter:= '+';
    TS.DelimitedText:= FExpresion;
    for i:= 0 to TS.Count-1 do
      for j:= 0 to DataSet.FieldCount-1 do
        if DataSet.Fields[j].FieldName = TS[i] then
          Result:= Result +' '+ DataSet.Fields[j].AsString;
  finally
   TS.Free;
  end;
end;

procedure TForm1.SetExpresion(const Value: string);
begin
  if (FExpresion <> Value) and (Value > '') then
    FExpresion:= UpperCase(Value);
end;
...

Llamada de ejemplo:
Código Delphi [-]
begin
  Caption:= '';
  Expresion:= 'Nombre + Apellido+Domicilio+ Telefono +ID';
  Caption:= Expresion;
end;
Tendrías que adecuar el código a tu clase y de ser necesario alguna otra evaluación en el procedimiento SetExpresion.

Saludos.

gustavosv 14-02-2012 02:19:05

Hola ecfisa, si tienes toda la razón, funciona perfectamente. Gracias !

gustavosv 14-02-2012 02:45:32

Hola, también podríamos cambiar el código:
Código Delphi [-]
      for j:= 0 to DataSet.FieldCount-1 do
        if DataSet.Fields[j].FieldName = TS[i] then
          Result:= Result +' '+ DataSet.Fields[j].AsString;
por:
Código Delphi [-]
Result:= Result +' '+ DataSet.FieldsByName(TS[i])

Saludos.


La franja horaria es GMT +2. Ahora son las 03:01: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