PDA

Ver la Versión Completa : string como expresión


gustavosv
12-02-2012, 01:04:28
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
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.

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:

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:
for j:= 0 to DataSet.FieldCount-1 do
if DataSet.Fields[j].FieldName = TS[i] then
Result:= Result +' '+ DataSet.Fields[j].AsString;
por:
Result:= Result +' '+ DataSet.FieldsByName(TS[i])

Saludos.