| 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: 484
 
 
 | 
			
				|  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 |  | 
	
		|  | 
	
		|  |