Field - campos calculado em runtime |
Top Previous Next |
|
Criando campos calculados em RunTime ====================================
Este exemplo é completo. Cria 3 tipos de campos calculados: Integer, String e DateTime, os campos codigo e nome são da tabela mesmo. Quando o usuário pressiona o botão Button1 o programa faz um novo select e cria os campos calculados. funcionou bem em Delphi5 -------------------------------------------------------------------------------------- var fCampo : TStringField; fNome : TStringField; fCodigo : TFloatField; fFloat : TFloatField; fData : TDateField;
implementation
procedure TForm1.Button1Click(Sender: TObject); begin Query.Select('codigo, nome from funcionarios'); Query.Active := False; // Campo nome fNome := TStringField.Create(Self); fNome.FieldName := 'nome'; fNome.FieldKind := fkData; fNome.Size := 30; fNome.DisplayWidth := 30; fNome.DataSet := Query; // Campo Código fCodigo := TFloatField.Create(Self); fCodigo.FieldName := 'codigo'; fCodigo.FieldKind := fkData; fCodigo.DisplayWidth := 10; fCodigo.DataSet := Query; // Campo Calculado fCampo := TStringField.Create(Self); fCampo.FieldName := 'Inicial'; fCampo.FieldKind := fkCalculated; fCampo.Alignment := taCenter; fCampo.Size := 1; fCampo.DisplayWidth := 1; fCampo.DataSet := Query; // Campo Calculado fFloat := TFloatField.Create(Self); fFloat.FieldName := 'Mult'; fFloat.FieldKind := fkCalculated; fFloat.Alignment := taCenter; fFloat.DisplayWidth := 10; fFloat.DataSet := Query; // Campo Calculado fData := TDateField.Create(Self); fData.FieldName := 'Data'; fData.FieldKind := fkCalculated; fData.Alignment := taCenter; fData.DisplayWidth := 10; fData.DataSet := Query;
// Ativa a Query... Query.Active := True;
// Cria as colunas (OPCIONAL) usado para criar os titles. with Grid.Columns do begin Items[0].Title.Caption := 'Cód.'; Items[1].Title.Caption := 'Nome'; Items[2].Title.Caption := 'Letra Inicial'; Items[3].Title.Caption := '2x Cód.'; Items[4].Title.Caption := 'Data'; end; end;
procedure TForm1.FormDestroy(Sender: TObject); begin // Se o campo foi criado tira-o da memória if Assigned(fCampo) then fCampo.Free; if Assigned(fNome) then fNome.Free; if Assigned(fCodigo) then fCodigo.Free; end;
procedure TForm1.QueryCalcFields(DataSet: TDataSet); // <------ Preste atenção para criar este evento!! begin Query.FieldByName('Inicial').asString := Copy(Query.Campo('nome'),1,1); Query.FieldByName('mult').asFloat := Query.GetInteger('codigo') * 2; Query.FieldByName('data').asDateTime := Now; end;
procedure TForm1.FormShow(Sender: TObject); begin Query.Select('codigo,nome from funcion'); with Grid.Columns do begin Items[0].Title.Caption := 'Cód.'; Items[1].Title.Caption := 'Nome'; end; end; |