Ver Mensaje Individual
  #7  
Antiguo 04-04-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Tendrías que mostrarnos cómo estás añadiendo los campos y en qué momento. Tal como dije antes, el ejemplo que puse funciona correctamente y con un campo calculado. Acabo de adaptarlo a un query a la base DBDEMOS con la consulta

Código SQL [-]
select * from employee

El código queda así:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  NewField: TStringField;
  I: Integer;

begin
  if Query1.FieldDefs.Count = 0 then
    Query1.Open;

  Query1.Close;

  for I := 0 to Query1.FieldDefs.Count - 1 do
    Query1.FieldDefs[i].CreateField(Query1, nil, Query1.FieldDefs[i].Name);

  ShowMessage(Format('%d campo(s)', [Query1.FieldCount])); // seis campos

  NewField := TStringField.Create(Query1);
  NewField.FieldName := 'FullName';
  NewField.Size := 36;
  NewField.FieldKind := fkCalculated;
  NewField.DataSet := Query1;

  ShowMessage(Format('%d campo(s)', [Query1.FieldCount])); // siete campos

  Query1.Open;
end;

procedure TForm1.Query1CalcFields(DataSet: TDataSet);
begin
  DataSet['FullName'] := DataSet['LastName'] + ' ' + DataSet['FirstName'];
end;

Si los campos los añades (todos) manualmente, necesariamente debe darte la cuenta, sin importar el tipo de campo.

Agrego

Si además, añado esto a un segundo botón:

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  I: Integer;

begin
  for I := 0 to Query1.FieldCount - 1 do
    ShowMessage(Query1.Fields[i].DisplayName);
end;

funciona sn problemas.

// Saludos
Responder Con Cita