GARANTIR DESCONTO

Fórum Mudar propridade EditMask Todos os Campos de ClientDataSet #353579

13/02/2008

0

Prezados colegas,

Preciso de uma rotina para mudar uma propriedade (editMask) de todos os campos de um ClientDataSet.
O nome do clientDataSet é ClientDataSet1, mas os nomes dos campos não vou saber em tempo de projeto, pois quero fazer isso em vários clientDataSet e serão vários campos.

A idéia eu tive, mas não sei como implementar. Seria uma coisa mais ou menos assim:

for I := 0 to ClientDataSet1.FieldCount -1 do
if ClientDataSet1[b:f1f2c999e6].campo[I] é campo tipo data[/b:f1f2c999e6] then
[b:f1f2c999e6]ClientDataSet1.campo[I].EditMask[/b:f1f2c999e6] := ´99/99/9999;1;_´

Obs.: a parte em[b:f1f2c999e6] negrito[/b:f1f2c999e6] é que eu inventei só para poder expor o que desejo.

Quem puder ajudar, agradeço. Qualquer dica serve.

Obrigado


Armindo

Armindo

Responder

Posts

13/02/2008

Ara.es

Tente esse código:

  for i := 0 to ClientDataSet1.FieldCount - 1 do
  begin
    if ClientDataSet1.Fields.Fields[i].DataType = TBCDField then
    begin
      ClientDataSet1.Fields.Fields[i].EditMask := ´99/99/9999;1;_´;
    end;
  end;


vc tinha a ideia certa, acho q so faltou achar as propriedades para manipular os fields... ta ai.. boa sorte.. flw!!!


Responder

Gostei + 0

13/02/2008

Paullsoftware

Tente esse código:
  for i := 0 to ClientDataSet1.FieldCount - 1 do
  begin
    if ClientDataSet1.Fields.Fields[i].DataType = TBCDField then
    begin
      ClientDataSet1.Fields.Fields[i].EditMask := ´99/99/9999;1;_´;
    end;
  end;
vc tinha a ideia certa, acho q so faltou achar as propriedades para manipular os fields... ta ai.. boa sorte.. flw!!!
só complementando o seu código:
for i := 0 to ClientDataSet1.FieldCount - 1 do
  begin
    if ( ClientDataSet1.Fields.Fields[i].DataType = TDateField ) or
       ( ClientDataSet1.Fields.Fields[i].DataType = TBCDField ) then
    begin
      ClientDataSet1.Fields.Fields[i].EditMask := ´99/99/9999;1;_´;
    end;
  end;
:wink:


Responder

Gostei + 0

13/02/2008

Armindo

Valeu pela ajuda colegas. Como base nas informações que vocês me deram, elaborei a rotina abaixo.
Já tá funcionanndo. Só tem mais uma propriedade (.displayFormat) dos campos que eu gostaria de formatar e que não está dando certo.
Quando vou compilar diz que a propriedade não existe. Como eu poderia resolver?

procedure TFPrincipal.FormataCampos;
Var
I, M : Integer;
VCDS : TClientDataSet;
begin
With DM do
for i := 0 to ComponentCount - 1 do
if Components[I] is TClientDataSet then
begin
VCDS := (Components[I] as TClientDataSet);
for M := 0 to VCDS.FieldCount -1 do
if VCDS.Fields.Fields[M].DataType = ftDate then
begin
VCDS.Fields.Fields[M].EditMask := ´99/99/9999;1;_´; [b:a5d3c50f33]funciona blz[/b:a5d3c50f33]
VCDS.Fields.Fields[M].DisplayFormat := ´dd/mm/yyyy´; [b:a5d3c50f33]não funciona - não reconhece a propriedade .displayFormat[/b:a5d3c50f33]
end
else
if VCDS.Fields.Fields[M].DataType = ftBCD then
VCDS.Fields.Fields[M].displayFormat := ´#,0.00´
else
if VCDS.Fields.Fields[M].FieldName = ´CNPJ´ then
VCDS.Fields.Fields[M].EditMask := ´99.999.999/9999-99;1;_´
else
if VCDS.Fields.Fields[M].FieldName = ´CPF´ then
VCDS.Fields.Fields[M].EditMask := ´999.999.999-99;1;_´
else
if VCDS.Fields.Fields[M].FieldName = ´CEP´ then
VCDS.Fields.Fields[M].EditMask := ´99.999-999;1;_´;
end;
end;

Obrigado.


Responder

Gostei + 0

13/02/2008

Armindo

Quem fuça acha. Hehe!
Mas só consegui com a ajuda inicial dos colegas. Obrigado.

Deixo aqui a função completa para outros que precisarem.


procedure FormataCampos;
Var
I, M : Integer;
VCDS : TClientDataSet;
begin
With DM do //DM é o meu DataModule ondes tão todos os clientsDataSet
for i := 0 to ComponentCount - 1 do
if Components[I] is TClientDataSet then
begin
VCDS := (Components[I] as TClientDataSet);
for M := 0 to VCDS.FieldCount -1 do
if VCDS.Fields.Fields[M].DataType = ftDate then
begin
VCDS.Fields.Fields[M].EditMask := ´99/99/9999;1;_´;
TNumericField(VCDS.Fields.Fields[M]).DisplayFormat := ´dd/mm/yyyy´;
end
else
if VCDS.Fields.Fields[M].DataType = ftFMTBcd then
TNumericField(VCDS.Fields.Fields[M]).DisplayFormat := ´#,0.00´
else
if VCDS.Fields.Fields[M].FieldName = ´CNPJ´ then
VCDS.Fields.Fields[M].EditMask := ´99.999.999/9999-99;1;_´
else
if VCDS.Fields.Fields[M].FieldName = ´CPF´ then
VCDS.Fields.Fields[M].EditMask := ´999.999.999-99;1;_´
else
if VCDS.Fields.Fields[M].FieldName = ´CEP´ then
VCDS.Fields.Fields[M].EditMask := ´99.999-999;1;_´;
end;
end;


Responder

Gostei + 0

17/02/2008

Armindo

Depois de um tempo descobri que não funciona como eu queria.
Essa rotina dá certo se você aplicá-la depois que ativar o ClientDataSet. Se você der um .close e um .open no ClientDataSet, a propriedade atribuída perde o valor.

Se alguém souber como resolver, por favor, registre aqui.

obrigado.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar