Erro ao dar ApplyUpdates

21/05/2008

5

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;


Responder

Posts

21/05/2008

Ffabiop

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


Responder

21/05/2008

Agtbh

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.


Responder

21/05/2008

Joaoshi

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

Espero ter ajudado.


Responder

21/05/2008

Agtbh

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


Responder

27/08/2008

Nigro

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.


Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar