GARANTIR DESCONTO

Fórum Criação de campos em runtime - AV ao atribuir dados #265302

14/01/2005

0

Olá

Tenho um ClientDataSet no qual estou criando campos em tempo de execução:

     with cds do
     begin
          Fields.Add(TStringField.Create(cds));
          Fields[0].FieldName := ´CAMPO1´;

          Fields.Add(TIntegerField.Create(cds));
          Fields[1].FieldKind := fkCalculated;
          Fields[1].FieldName := ´CAMPO2´;
          Fields[1].Calculated := True;
     end;

Tenho um método em que eu vou atribuir os valores do ClientDataSet via OLE, mas isso não deve dar problema.
cds.FieldByName(´CAMPO1´).AsString := oleDados.Item[i].ChildNodes.Item[j].Text

O que acontece eh que quando vou atribuir, ele dá um Access Violation...
Debugando, descobri que o AV acontece por causa do AsString! No Inspector, soh o cds.FieldByName(´CAMPO1´) ainda é um objeto, mas o AsString dá erro!

Quando faço isso em tempo de desenv. ele não dá erro... alguém sabe se eu estou criando os campos erradamente?
PS. O erro não deve ser por causa do campo calculado, pois ele acontece no primeiro campo

Obrigado
Até+


Paulo_amorim

Paulo_amorim

Responder

Posts

14/01/2005

Vinicius2k

Olá Amorim !

Eu não posso garantir que a sua forma esteja incorreta, mas, se ajuda, esta é a forma como eu faço isto :
with cds do
begin
  Close;
  { Criando os campos}
  with FieldDefs do
  begin
    Clear;
    Add(´CAMPO1´, ftString, 40, False);
    //Outros...
  end;
  // Aqui um possível laço alterando propriedades dos TFields recem criados.
  CreateDataSet;
  // Aqui a atribuição dos valores.
end;

Acho que se vc adicionar os TFields pelo método Add de FieldDefs e depois de adicioná-los, atribuir suas propriedades e dar-lhes valores, vc não terá problemas.

Não tive como testar. Se isto não resolver, poste novamente... :wink:

T+


Responder

Gostei + 0

14/01/2005

Paulo_amorim

Olá

Creio que omiti certos fatos que talvez tenham mascarado o real problema, afinal.

Tenho um componente herdado de TClientDataSet que transforma um XML em DataSet... e num método ele faz toda essa parte de limpar e adicionar os FieldDefs, fazendo o Parsing no XML. Meu grande problema é exatamente esse: eu quero um campo que não está no XML!
Por isso, se eu adicionar um FieldDef, ele será eliminado nessa rotina...

Eu tentei a criação de TFields em tempo de Design e voilá! ele funciona normal... fica vazio, claro, mas funciona
Assim, parti para tempo de execução (já que pretendo fazer algo mais genérico, mais tarde) mas me deparei com esse problema.

Segunda feira volto a pensar nisso. Por enquanto faço testes em design.
Qualquer ajuda será bem vinda

Obrigado 2k, você já me deu certas idéias.

Até+


Responder

Gostei + 0

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

Aceitar