Erro ao dar ApplyUpdates

Delphi

21/05/2008

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;


Agtbh

Agtbh

Curtidas 0

Respostas

Ffabiop

Ffabiop

21/05/2008

Por acaso sua query não tem um campo do tipo TBCDFIeld?


GOSTEI 0
Agtbh

Agtbh

21/05/2008

Por acaso sua query não tem um campo do tipo TBCDFIeld?


Não, Fábio.

São apenas três campos string, sendo um deles a chave primária.


GOSTEI 0
Joaoshi

Joaoshi

21/05/2008

Ajuste o [b:dbf1819940]ProviderFlags[/b:dbf1819940] da Query.

Espero ter ajudado.


GOSTEI 0
Agtbh

Agtbh

21/05/2008

Pessoal,

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


GOSTEI 0
Nigro

Nigro

21/05/2008

Também estou com esse problema em uma tabela qu econtém diversos campos do tipo char, porém não uso tField nas minhas aplicações.


GOSTEI 0
POSTAR