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:
Tenho um método em que eu vou atribuir os valores do ClientDataSet via OLE, mas isso não deve dar problema.
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é+
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
Curtir tópico
+ 0
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 :
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+
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é+
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
Clique aqui para fazer login e interagir na Comunidade :)