Pessoal, Bom dia a todos. Estou com um problema no momento de dar o applyupdate em um ClientDataSet.
Estou usando Delphi 7 com banco Oracle. A conexão é feita usando dbExpress, uma query, um DataSetProvider e um ClientDataSet. A idéia é a seguinte: percorro o banco verificando o campo "IDENTIFICADOR" através de uma função que verifica se há letras nesse campo. Caso haja letras eu defino o valor do campo para ' ', ou seja, sempre que tiver uma letra no campo eu apago o seu valor. Essa função funciona bem. O problema está quando, após o post, tento dar o ApplyUpdates. Já pesquisei muito sobre sobre a propriedade UpdateMode do DataSetProvider e sobre os ProviderFlags do ClientDataSet mas mesmo assim não consegui resolver. Com UpdateMode do DataSetProvider definido para upWhereAll e os provider flags de todos os campos definidos para [pfInUpdate,pfInWhere] recebo o seguinte erro: "Record not foun or changed by another user" Alterei o UpdateMode do DataSetProvider para upWhereKeyOnly e o ProviderFlags do campo chave no ClientDataSet para [pfInUpdate,pfInWhere,pfInKey] e passei a receber o seguinte erro: "Unable do find record. No key specified" Alguém tem alguma sugestão? O que estou fazendo errado? Tem alguma coisa a ver com o fato de eu percorrer o ClientDataSet, editar o mesmo ClientDataSet e depois continuar o percorrendo? Segue o código abaixo Agradeço a todos que puderem contribuir. Alexandre Trindade procedure TfrmPrincipal.ExcluiLetras(); var i: integer; begin ClientDataSet1.Close; ClientDataSet1.Open; ProgressBar1.Min := 1; ProgressBar1.Max := ClientDataSet1.RecordCount; for i := 1 to ClientDataSet1.RecordCount do begin if letras(ClientDataSet1IDENTIFICADOR.AsString)then begin ClientDataSet1.Edit; ClientDataSet1IDENTIFICADOR.AsString := ''; ClientDataSet1.Post; ClientDataSet1.ApplyUpdates(0); end; ClientDataSet1.Next; ProgressBar1.StepIt; Application.ProcessMessages; end; [As partes desta mensagem que não continham texto foram removidas]