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 

ClientDataSet

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


Registrado: Segunda-Feira, 30 de Outubro de 2006
Mensagens: 229

MensagemEnviada: Ter Nov 12, 2019 4:10 pm    Assunto: ClientDataSet Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
JoaoSHi
Experiente
Experiente


Registrado: Segunda-Feira, 25 de Agosto de 2008
Mensagens: 480

MensagemEnviada: Ter Nov 12, 2019 6:03 pm    Assunto: Responder com Citação

Colega, vê se ajuda:

Código:
      cdsTb.Close;
      cdsTb.Fields.Clear;
      cdsTb.FieldDefs.Clear;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
cofercatu
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 30 de Outubro de 2006
Mensagens: 229

MensagemEnviada: Ter Nov 12, 2019 8:15 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
cofercatu
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 30 de Outubro de 2006
Mensagens: 229

MensagemEnviada: Ter Nov 12, 2019 8:54 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 2974
Localização: Belo Horizonte - MG

MensagemEnviada: Qua Nov 13, 2019 10:38 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
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