Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
cofercatu Aprendiz
Registrado: Segunda-Feira, 30 de Outubro de 2006 Mensagens: 249
|
Enviada: Ter Nov 12, 2019 4:10 pm Assunto: ClientDataSet |
|
|
Boa tarde,
Tenho uma rotina que exclui os campos criados dinâmicamente, mas os campos não são excluídos.
Obs: encontrei esta rotina na internet
while cdsTb.Fields.Count > 0 do
begin
cdsTb.FieldDefs.Delete(0);
cdsTb.Fields.Remove(cdsTb.Fields[0]);
end;
dsTb.Enabled := false;
cdsTb.Close;
dsTb.Enabled := true;
Os campos somem da grid, mas ao criar outros campos diferentes dos que existiam, da erro dizendo que os campos ainda continuam no clientdataset.
O que mais devo fazer para que os campos sejam, de fato, excluídos e posso incluir novos campos?
Att,
Silvio. |
|
Voltar ao Topo |
|
|
JoaoSHi Experiente
Registrado: Segunda-Feira, 25 de Agosto de 2008 Mensagens: 483
|
Enviada: Ter Nov 12, 2019 6:03 pm Assunto: |
|
|
Colega, vê se ajuda:
Código: | cdsTb.Close;
cdsTb.Fields.Clear;
cdsTb.FieldDefs.Clear;
|
|
|
Voltar ao Topo |
|
|
cofercatu Aprendiz
Registrado: Segunda-Feira, 30 de Outubro de 2006 Mensagens: 249
|
Enviada: Ter Nov 12, 2019 8:15 pm Assunto: |
|
|
Obrigado pela ajuda.
Mas ainda estou com problemas.
Segue meu código:
Se não mudarem os campos a serem criados, não tem problema, mas se os campos mudarem, o cds entende que os campos antigos não foram removidos
Código: | cdsTb.EmptyDataSet;
cdsTb.Close;
//cdsTb.Open;
cdsTb.Close;
cdsTb.Fields.Clear;
cdsTb.FieldDefs.Clear;
for i := 0 to Map1.Shapefile[MapaShape[mdLayerlayer.Value]].Table.NumFields - 1 do
begin
with cdsTb do
begin
with FieldDefs.AddFieldDef do
begin
if Map1.Shapefile[MapaShape[mdLayerlayer.Value]].Table.Field[i].type_ = STRING_FIELD then
DataType := ftString;
if Map1.Shapefile[MapaShape[mdLayerlayer.Value]].Table.Field[i].type_ = INTEGER_FIELD then
DataType := ftInteger;
if Map1.Shapefile[MapaShape[mdLayerlayer.Value]].Table.Field[i].type_ = DOUBLE_FIELD then
DataType := ftFloat;
Name := Map1.Shapefile[MapaShape[mdLayerlayer.Value]].Table.Field[i].Name;
ltbCampos.Items.Add(Map1.Shapefile[MapaShape[mdLayerlayer.Value]].Table.Field[i].Name);
cbLabel.Items.Add(Map1.Shapefile[MapaShape[mdLayerlayer.Value]].Table.Field[i].Name);
end;
end;
end;
//é aqui que o erro acontece
cdsTb.CreateDataSet;
|
|
|
Voltar ao Topo |
|
|
cofercatu Aprendiz
Registrado: Segunda-Feira, 30 de Outubro de 2006 Mensagens: 249
|
Enviada: Ter Nov 12, 2019 8:54 pm Assunto: |
|
|
Descobri o que está acontecendo.
Tenho ordenação dinâmica e é isto que está causando problemas.
Agora preciso descobrir como remover a ordenação e quando remover
Segue a criação do índice.
Código: | Ctrl := 0;
for i:= 0 to cdsTb.Fields.Count -1 do
begin
if i > 5 then
break;
if Ctrl = 1 then
begin
cdstb.IndexFieldNames := cdstb.IndexFieldNames + ';' + cdsTb.Fields[i].FieldName;
end;
if ctrl = 0 then
begin
cdstb.IndexFieldNames := cdsTb.Fields[i].FieldName;
Ctrl := 1;
end;
end;
|
|
|
Voltar ao Topo |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Qua Nov 13, 2019 10:38 am Assunto: |
|
|
Faça um teste limpando a ordenação antes de excluir os campos:
Código: | cdstb.IndexFieldNames := EmptyStr;
cdstb.IndexName := EmptyStr;
// Insira aqui o codigo para exclusão dos campos |
_________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
Voltar ao Topo |
|
|
|