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]

Responder a