Não consigo atualizar registro duas vezes seguidas

Delphi

11/09/2014

Pessoal seguinte estou tratando o CRUD da minha aplicação verificando o estado do meu componente ADO Query ou seja quando pressiono obotão gravar ele verifica do estado da query

procedure TFCad.ButGravaClick(Sender: TObject);
begin
  if QCadastro.State in [dsInsert,dsEdit] then
    QCadastro.Post;
end;


Quando eu faço a atualização uma única vez após ter localizado o registro o update rola normalmente, ja na segunda exibe a seuinte mensagem:

A LINHA NÃO PODE SER LOCALIZADA PARA ATUALIZAÇÃO, ALGUNS VALORES PODEM TER SIDO ALTERADOS DESDE QUE ELA FOI LIDA PELA ÚLTIMA VEZ.

aí nesse passo tenho que fazer outra busca no caso buscando o mesmo registro e alterar novamente. Não consigo alterar duas vezes seguidas?

Conhecem alguma forma de colocar esse componente novamente apto para atualização sen necessidade de uma nova busca?
Sidnei Junior

Sidnei Junior

Curtidas 0

Respostas

Marisiana Battistella

Marisiana Battistella

11/09/2014

Olá Sidnei!
Encontrei essa dica na web que seria uma possível forma de solucionar esse erro:
Quando agente não cria uma chave primaria para uma tabela, na hora do update ou post a ADO interpreta o primeiro campo como uma chave, ou seja
se na hora do post houver um outro registro na tabela cujo o valor do primeiro campo se repita da erro!
Para solucionar o problema na propriedade CursorLocation do ADOTable, ponha como clUseServer

Não sei isso se aplica ao teu caso...
Desculpa não poder ajudar mais especificamente.
GOSTEI 0
Sidnei Junior

Sidnei Junior

11/09/2014

Olá Marisiana pois é o pior é que minha tabela está certinha com chave primária tudo pelos conformes, estou achando que é algo referente ao componente AdoQuery que não está conseguindo interpretar que eu ja dei o post e que agora precisa ficar disponível novamente para nova inserção e/ou atualização que é o meu caso. Mas em todo caso muito obrigado!
GOSTEI 0
Mauricio Rodrigues

Mauricio Rodrigues

11/09/2014

procedure TFCad.ButGravaClick(Sender: TObject);
begin
if QCadastro.State in [dsInsert,dsEdit] then
begin
QCadastro.Post;
QCadastro.close;
QCadastro.open;
end;

end;
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

11/09/2014

Sidnei, chegou a aplicar o exemplo que o Mauricio postou? Resolveu?
GOSTEI 0
POSTAR