ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Campos Calculados ou Lookup em RunTime [RESOLVIDO]

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
flexsistemas
Aprendiz
Aprendiz


Registrado: Terça-Feira, 29 de Outubro de 2013
Mensagens: 121
Localização: Caxias do Sul

MensagemEnviada: Seg Dez 02, 2013 8:57 am    Assunto: Campos Calculados ou Lookup em RunTime [RESOLVIDO] Responder com Citação

Bom dia,

Estou encapsulando o DBXpress e criei um componente chamado FlexEntidade que contém SDS+DSP+CDS em um componente só.

Fiz isso pois estou prevendo a minha migração para Firemonkey.

Estou com a seguinte dúvida:

Como posso criar campos calculados ou lookup em tempo de execução.

Fiz da seguinte forma:

1. Configurei o meu ClientDataSet:

Código:

function TFlexEntidade.GetClientDataSet: TClientDataSet;
begin
  if not Assigned(FClientDataSet) then
  begin
    FClientDataSet := TClientDataSet.Create(Self);
    FClientDataSet.Name := Self.Name+'_Cds';
    FClientDataSet.AfterOpen := ConfiguraCamposCalculados;
    FClientDataSet.AfterClose := DescarregaCamposCalculados;
    FClientDataSet.OnCalcFields := FazCamposCalculados;
  end;
  Result := FClientDataSet;
end;


2. Vejam o que foi implementado em cada evento:

Código:

procedure TFlexEntidade.ConfiguraCamposCalculados(DataSet: TDataSet);
var
  lIdx: SmallInt;
  lField: TField;
  lFlexCampos: TFlexCampos;
  lIdx2: SmallInt;
begin
  if Assigned(FCamposCalculados) and (FCamposCalculados.Count > 0) then
    if not FInicializando then
    begin
      lFlexCampos := TFlexCampos.Create;
      try
        FInicializando := True;
        DataSet.Active := False;
        DataSet.FieldDefs.Update;
        for lIdx := 0 to DataSet.FieldDefs.Count -1 do
        begin
          lField := DataSet.FieldDefs.Items[lIdx].FieldClass.Create(Self);
          lField.FieldName := DataSet.FieldDefs.Items[lIdx].DisplayName;
          lField.DataSet := DataSet;

          for lIdx2 := 0 to CamposCalculados.Count -1 do
          begin
            lFlexCampos.Registro := CamposCalculados[lIdx2];
            if (lFlexCampos.NomeDoCampo = lField.FieldName) then
            begin
              lField.FieldKind := fkCalculated;
              lField.Required := False;
              lField.Calculated := True;
              lField.DisplayWidth := 255;
              lField.Size := 255;
            end;
          end;
        end;
        DataSet.Active := True;
      finally
        FInicializando := False;
        FreeAndNil(lFlexCampos);
      end;
    end;
end;

procedure TFlexEntidade.DescarregaCamposCalculados(DataSet: TDataSet);
var
  lIdx: SmallInt;
  lField: TField;
begin
  if Assigned(FCamposCalculados) and (FCamposCalculados.Count > 0) then
    if not FInicializando then
    begin
      for lIdx := DataSet.FieldCount -1 downto 0 do
      begin
        lField := Pointer(DataSet.Fields.Fields[lIdx]);
        DataSet.Fields.Fields[lIdx].DataSet := nil;
        FreeAndNil(lField);
      end;
      DataSet.FieldDefs.Clear;
    end;
end;

procedure TFlexEntidade.FazCamposCalculados(DataSet: TDataSet);
var
  lIdx: SmallInt;
  lFlexCampos: TFlexCampos;
begin
  if DataSet.State = dsCalcFields then
  begin
    lFlexCampos := nil;
    try
      for lIdx := 0 to CamposCalculados.Count -1 do
      begin
        if not Assigned(lFlexCampos) then
          lFlexCampos := TFlexCampos.Create;

        lFlexCampos.Registro := CamposCalculados[lIdx];

        TMensagem.Mensagem(
          'NomeDoCampo--->'+lFlexCampos.NomeDoCampo+#13#10+
          'TabelaReferencia--->'+lFlexCampos.TabelaReferencia+#13#10+
          'CampoTabelaReferencia--->'+lFlexCampos.CampoTabelaReferencia+#13#10+
          'CampoRetTabelaReferencia--->'+lFlexCampos.CampoRetTabelaReferencia
        );
      end;
    finally
      if Assigned(lFlexCampos) then
        FreeAndNil(lFlexCampos);
    end;
  end;
end;


Até aí tudo certo quando navego ele está fazendo a chamada tranquilamente. O problema está quando vou editar ou inserir um novo registro.

Ele abre um novo registro tranquilamente ou editar sem problemas mas quando vai salvar está apresentando a seguinte mensagem de erro:

"Field value required".

A Mensagem de erro ocorre ao Chamar o "Post" do ClientDataSet.

Código:

function TFlexEntidade.SalvaRegistro(const pConfirmar: Boolean): Boolean;
begin
  try
    Result := EntidadeAberta and EditandoRegistro;
    if Result then
    begin
      AntesSalvar;
      ClientDataSet.Post;
      Result := True;
    end;
  except
    raise;
  end;

  if pConfirmar then
  begin
    ConfirmarRegistro;
    Atualizar;
  end;
end;


Obrigado.


Editado pela última vez por flexsistemas em Ter Dez 03, 2013 8:16 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
flexsistemas
Aprendiz
Aprendiz


Registrado: Terça-Feira, 29 de Outubro de 2013
Mensagens: 121
Localização: Caxias do Sul

MensagemEnviada: Seg Dez 02, 2013 12:25 pm    Assunto: Responder com Citação

up
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
flexsistemas
Aprendiz
Aprendiz


Registrado: Terça-Feira, 29 de Outubro de 2013
Mensagens: 121
Localização: Caxias do Sul

MensagemEnviada: Ter Dez 03, 2013 8:04 am    Assunto: Responder com Citação

Resolvi da seguinte maneira:

=> Carregar os Campos no BeforeOpen

Código:

function TFlexEntidade.GetClientDataSet: TClientDataSet;
begin
  if not Assigned(FClientDataSet) then
  begin
    FClientDataSet := TClientDataSet.Create(Self);
    FClientDataSet.Name := Self.Name+'_Cds';
    FClientDataSet.BeforeOpen := ConfiguraCampos;
    FClientDataSet.AfterClose := DescarregaCamposLookup;
    FClientDataSet.OnReconcileError := ErrosAoConfirmarRegistro;
    FClientDataSet.OnPostError := ErrosAoGravarRegistro;
    FClientDataSet.AfterScroll := AoTrocarRegistro;
  end;
  Result := FClientDataSet;
end;


Código:

procedure TFlexEntidade.ConfiguraCampos(DataSet: TDataSet);
var
  lIdx: SmallInt;
  lFlexCampos: TFlexCampos;
  lFlexConsulta: TFlexConsulta;
  lBlobField: TBlobField;
  lStringField: TStringField;
  lDateField: TDateField;
  lSQLTimeStampField: TSQLTimeStampField;
  lTimeField: TTimeField;
  lIntegerField: TIntegerField;
  lSmallIntField: TSmallintField;
  lFMTBCDField: TFMTBCDField;
begin
  if Assigned(FCamposLookup) and (FCamposLookup.Count > 0) then
  begin
    lFlexCampos := TFlexCampos.Create;
    try
      for lIdx := 0 to FCampos.Count -1 do
      begin
        lFlexCampos.Registro := FCampos[lIdx];

        if not lFlexCampos.Lookup then
        begin
          if lFlexCampos.TipoDoCampo = 'DM_ID' then
          begin
            lIntegerField := TIntegerField.Create(DataSet);
            lIntegerField.FieldName := lFlexCampos.NomeDoCampo;
            lIntegerField.Dataset := DataSet;
            lIntegerField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lIntegerField.Required := not lFlexCampos.PermiteEmBranco;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_INTEIRO' then
          begin
            lIntegerField := TIntegerField.Create(DataSet);
            lIntegerField.FieldName := lFlexCampos.NomeDoCampo;
            lIntegerField.Dataset := DataSet;
            lIntegerField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lIntegerField.Required := not lFlexCampos.PermiteEmBranco;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_DESC_GRANDE' then
          begin
            lStringField := TStringField.Create(DataSet);
            lStringField.FieldName := lFlexCampos.NomeDoCampo;
            lStringField.Dataset := DataSet;
            lStringField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lStringField.Required := not lFlexCampos.PermiteEmBranco;
            lStringField.Size := 70;
            lStringField.DisplayWidth := 70;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_DESC_GRANDE2' then
          begin
            lStringField := TStringField.Create(DataSet);
            lStringField.FieldName := lFlexCampos.NomeDoCampo;
            lStringField.Dataset := DataSet;
            lStringField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lStringField.Required := not lFlexCampos.PermiteEmBranco;
            lStringField.Size := 150;
            lStringField.DisplayWidth := 150;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_DESC_GRANDE3' then
          begin
            lStringField := TStringField.Create(DataSet);
            lStringField.FieldName := lFlexCampos.NomeDoCampo;
            lStringField.Dataset := DataSet;
            lStringField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lStringField.Required := not lFlexCampos.PermiteEmBranco;
            lStringField.Size := 500;
            lStringField.DisplayWidth := 500;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_DESC_GRANDE4' then
          begin
            lStringField := TStringField.Create(DataSet);
            lStringField.FieldName := lFlexCampos.NomeDoCampo;
            lStringField.Dataset := DataSet;
            lStringField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lStringField.Required := not lFlexCampos.PermiteEmBranco;
            lStringField.Size := 1200;
            lStringField.DisplayWidth := 1200;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_DESC_GRANDE5' then
          begin
            lStringField := TStringField.Create(DataSet);
            lStringField.FieldName := lFlexCampos.NomeDoCampo;
            lStringField.Dataset := DataSet;
            lStringField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lStringField.Required := not lFlexCampos.PermiteEmBranco;
            lStringField.Size := 2000;
            lStringField.DisplayWidth := 2000;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_DESC_MEDIA' then
          begin
            lStringField := TStringField.Create(DataSet);
            lStringField.FieldName := lFlexCampos.NomeDoCampo;
            lStringField.Dataset := DataSet;
            lStringField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lStringField.Required := not lFlexCampos.PermiteEmBranco;
            lStringField.Size := 40;
            lStringField.DisplayWidth := 40;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_DESC_PEQUENA' then
          begin
            lStringField := TStringField.Create(DataSet);
            lStringField.FieldName := lFlexCampos.NomeDoCampo;
            lStringField.Dataset := DataSet;
            lStringField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lStringField.Required := not lFlexCampos.PermiteEmBranco;
            lStringField.Size := 20;
            lStringField.DisplayWidth := 20;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_DATA' then
          begin
            lDateField := TDateField.Create(DataSet);
            lDateField.FieldName := lFlexCampos.NomeDoCampo;
            lDateField.Dataset := DataSet;
            lDateField.DisplayFormat := 'dd/mm/yyyy';
            lDateField.EditMask := 'dd/mm/yyyy';
            lDateField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lDateField.Required := not lFlexCampos.PermiteEmBranco;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_DATA_HORA' then
          begin
            lSQLTimeStampField := TSQLTimeStampField.Create(DataSet);
            lSQLTimeStampField.FieldName := lFlexCampos.NomeDoCampo;
            lSQLTimeStampField.Dataset := DataSet;
            lSQLTimeStampField.DisplayFormat := 'dd/mm/yyyy hh:nn';
            lSQLTimeStampField.EditMask := 'dd/mm/yyyy hh:nn';
            lSQLTimeStampField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lSQLTimeStampField.Required := not lFlexCampos.PermiteEmBranco;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_HORA' then
          begin
            lTimeField := TTimeField.Create(DataSet);
            lTimeField.FieldName := lFlexCampos.NomeDoCampo;
            lTimeField.Dataset := DataSet;
            lTimeField.DisplayFormat := 'hh:nn';
            lTimeField.EditMask := 'hh:nn';
            lTimeField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lTimeField.Required := not lFlexCampos.PermiteEmBranco;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_INTEIRO3' then
          begin
            lSmallIntField := TSmallIntField.Create(DataSet);
            lSmallIntField.FieldName := lFlexCampos.NomeDoCampo;
            lSmallIntField.Dataset := DataSet;
            lSmallIntField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lSmallIntField.Required := not lFlexCampos.PermiteEmBranco;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_PERCENT' then
          begin
            lFMTBCDField := TFMTBCDField.Create(DataSet);
            lFMTBCDField.FieldName := lFlexCampos.NomeDoCampo;
            lFMTBCDField.Dataset := DataSet;
            lFMTBCDField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lFMTBCDField.Required := not lFlexCampos.PermiteEmBranco;
            lFMTBCDField.DisplayFormat := '##0.00';
            lFMTBCDField.EditFormat := '##0.00';
            lFMTBCDField.Precision := 10;
            lFMTBCDField.Size := 2;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_SIGLA_1' then
          begin
            lStringField := TStringField.Create(DataSet);
            lStringField.FieldName := lFlexCampos.NomeDoCampo;
            lStringField.Dataset := DataSet;
            lStringField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lStringField.Required := not lFlexCampos.PermiteEmBranco;
            lStringField.FixedChar := True;
            lStringField.Size := 1;
            lStringField.DisplayWidth := 1;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_SIGLA_2' then
          begin
            lStringField := TStringField.Create(DataSet);
            lStringField.FieldName := lFlexCampos.NomeDoCampo;
            lStringField.Dataset := DataSet;
            lStringField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lStringField.Required := not lFlexCampos.PermiteEmBranco;
            lStringField.FixedChar := True;
            lStringField.Size := 2;
            lStringField.DisplayWidth := 2;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_SIGLA_3' then
          begin
            lStringField := TStringField.Create(DataSet);
            lStringField.FieldName := lFlexCampos.NomeDoCampo;
            lStringField.Dataset := DataSet;
            lStringField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lStringField.Required := not lFlexCampos.PermiteEmBranco;
            lStringField.FixedChar := True;
            lStringField.Size := 3;
            lStringField.DisplayWidth := 3;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_SIGLA_5' then
          begin
            lStringField := TStringField.Create(DataSet);
            lStringField.FieldName := lFlexCampos.NomeDoCampo;
            lStringField.Dataset := DataSet;
            lStringField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lStringField.Required := not lFlexCampos.PermiteEmBranco;
            lStringField.FixedChar := True;
            lStringField.Size := 5;
            lStringField.DisplayWidth := 5;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_SIGLA_7' then
          begin
            lStringField := TStringField.Create(DataSet);
            lStringField.FieldName := lFlexCampos.NomeDoCampo;
            lStringField.Dataset := DataSet;
            lStringField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lStringField.Required := not lFlexCampos.PermiteEmBranco;
            lStringField.FixedChar := True;
            lStringField.Size := 7;
            lStringField.DisplayWidth := 7;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_SIM_NAO' then
          begin
            lStringField := TStringField.Create(DataSet);
            lStringField.FieldName := lFlexCampos.NomeDoCampo;
            lStringField.Dataset := DataSet;
            lStringField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lStringField.Required := not lFlexCampos.PermiteEmBranco;
            lStringField.DefaultExpression := '''N''';
            lStringField.FixedChar := True;
            lStringField.Size := 1;
            lStringField.DisplayWidth := 1;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_VALOR_2DC' then
          begin
            lFMTBCDField := TFMTBCDField.Create(DataSet);
            lFMTBCDField.FieldName := lFlexCampos.NomeDoCampo;
            lFMTBCDField.Dataset := DataSet;
            lFMTBCDField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lFMTBCDField.Required := not lFlexCampos.PermiteEmBranco;
            lFMTBCDField.DisplayFormat := '###,###,##0.00';
            lFMTBCDField.EditFormat := '###,###,##0.00';
            lFMTBCDField.Precision := 19;
            lFMTBCDField.Size := 2;
            lFMTBCDField.currency := True;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_VALOR_3DC' then
          begin
            lFMTBCDField := TFMTBCDField.Create(DataSet);
            lFMTBCDField.FieldName := lFlexCampos.NomeDoCampo;
            lFMTBCDField.Dataset := DataSet;
            lFMTBCDField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lFMTBCDField.Required := not lFlexCampos.PermiteEmBranco;
            lFMTBCDField.DisplayFormat := '###,###,##0.000';
            lFMTBCDField.EditFormat := '###,###,##0.000';
            lFMTBCDField.Precision := 19;
            lFMTBCDField.Size := 3;
            lFMTBCDField.currency := True;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_VALOR_4DC' then
          begin
            lFMTBCDField := TFMTBCDField.Create(DataSet);
            lFMTBCDField.FieldName := lFlexCampos.NomeDoCampo;
            lFMTBCDField.Dataset := DataSet;
            lFMTBCDField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lFMTBCDField.Required := not lFlexCampos.PermiteEmBranco;
            lFMTBCDField.DisplayFormat := '###,###,##0.0000';
            lFMTBCDField.EditFormat := '###,###,##0.0000';
            lFMTBCDField.Precision := 19;
            lFMTBCDField.Size := 4;
            lFMTBCDField.currency := True;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_VALOR_6DC' then
          begin
            lFMTBCDField := TFMTBCDField.Create(DataSet);
            lFMTBCDField.FieldName := lFlexCampos.NomeDoCampo;
            lFMTBCDField.Dataset := DataSet;
            lFMTBCDField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lFMTBCDField.Required := not lFlexCampos.PermiteEmBranco;
            lFMTBCDField.DisplayFormat := '###,###,##0.000000';
            lFMTBCDField.EditFormat := '###,###,##0.000000';
            lFMTBCDField.Precision := 19;
            lFMTBCDField.Size := 6;
            lFMTBCDField.currency := True;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_VALOR_8DC' then
          begin
            lFMTBCDField := TFMTBCDField.Create(DataSet);
            lFMTBCDField.FieldName := lFlexCampos.NomeDoCampo;
            lFMTBCDField.Dataset := DataSet;
            lFMTBCDField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lFMTBCDField.Required := not lFlexCampos.PermiteEmBranco;
            lFMTBCDField.DisplayFormat := '###,###,##0.00000000';
            lFMTBCDField.EditFormat := '###,###,##0.00000000';
            lFMTBCDField.Precision := 19;
            lFMTBCDField.Size := 8;
            lFMTBCDField.currency := True;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_ARQUIVO' then
          begin
            lBlobField := TBlobField.Create(DataSet);
            lBlobField.FieldName := lFlexCampos.NomeDoCampo;
            lBlobField.Dataset := DataSet;
            lBlobField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lBlobField.Required := not lFlexCampos.PermiteEmBranco;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_EMAIL' then
          begin
            lStringField := TStringField.Create(DataSet);
            lStringField.FieldName := lFlexCampos.NomeDoCampo;
            lStringField.Dataset := DataSet;
            lStringField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lStringField.Required := not lFlexCampos.PermiteEmBranco;
            lStringField.Size := 50;
            lStringField.DisplayWidth := 50;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_FOTO' then
          begin
            lBlobField := TBlobField.Create(DataSet);
            lBlobField.FieldName := lFlexCampos.NomeDoCampo;
            lBlobField.Dataset := DataSet;
            lBlobField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lBlobField.Required := not lFlexCampos.PermiteEmBranco;
          end else
          if lFlexCampos.TipoDoCampo = 'DM_MEMO' then
          begin
            lBlobField := TBlobField.Create(DataSet);
            lBlobField.FieldName := lFlexCampos.NomeDoCampo;
            lBlobField.Dataset := DataSet;
            lBlobField.DisplayLabel := lFlexCampos.DescricaoDoCampo;
            lBlobField.Required := not lFlexCampos.PermiteEmBranco;
          end;
        end;
      end;

      for lIdx := 0 to FCamposLookup.Count -1 do
      begin
        lFlexCampos.Registro := FCamposLookup[lIdx];

        lFlexConsulta := Pointer(CamposLookup.Objects[lIdx]);

        if Assigned(lFlexConsulta) then
        begin
          lStringField := TStringField.Create(DataSet);
          lStringField.FieldName := lFlexCampos.NomeDoCampo;
          lStringField.KeyFields := lFlexCampos.CampoReferencia;
          lStringField.LookupDataSet := lFlexConsulta.ClientDataSet;
          lStringField.LookupKeyFields := lFlexCampos.CampoTabelaReferencia;
          lStringField.LookupResultField := lFlexCampos.CampoRetTabelaReferencia;
          lStringField.FieldKind := fkLookup;
          lStringField.Dataset := DataSet;
          lStringField.DisplayWidth := 255;
          lStringField.Size := 255;
          lStringField.Lookup := True;
        end;
      end;

    finally
      FreeAndNil(lFlexCampos);
    end;
  end;
end;


Código:

procedure TFlexEntidade.DescarregaCamposLookup(DataSet: TDataSet);
var
  lIdx: SmallInt;
  lField: TField;
begin
  if Assigned(FCamposLookup) and (FCamposLookup.Count > 0) then
  begin
    for lIdx := DataSet.FieldCount -1 downto 0 do
    begin
      lField := Pointer(DataSet.Fields.Fields[lIdx]);
      DataSet.Fields.Fields[lIdx].DataSet := nil;
      FreeAndNil(lField);
    end;
    DataSet.FieldDefs.Clear;
  end;
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB