Erro ao dar ApplyUpdates
21/05/2008
0
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;
Agtbh
Posts
21/05/2008
Agtbh
Não, Fábio.
São apenas três campos string, sendo um deles a chave primária.
21/05/2008
Joaoshi
Espero ter ajudado.
21/05/2008
Agtbh
como a tarefa tinha muita urgência, adotei outra solução:
Ciei uma query com instrução de update e executei essa query.
Aí funcionou belezinha.
Depois que estiver mais tranquilo de tempo vou testar sua sugestão, João.
Muito obrigado a vocês, Fábio e João, e a todos que visualizaram a dúvida.
Alexandre Trindade
27/08/2008
Nigro
Clique aqui para fazer login e interagir na Comunidade :)