Record not found or changed by another user ?

07/06/2004

0

Olá Pessoal !

estou usando FireBird última versão com DBX em um Servidor Windows Server 2003, incluo um registro e gravo, depois se eu alterar e mudar uma vírgula aparece esse erro:

Record not found or changed by another user, isso se o banco de dados estiver local não acontece.

alguém sabe o que pode ser ?

estou usando SQLDataSet + DataSetProvider + ClientDataSet

estou usando no DataSet:

Edit = Para alterar.
ApplyUpdates(-1) = Para Gravar.


Muito obrigada !

Renata Coimbra.


Renata Coimbra

Renata Coimbra

Responder

Post mais votado

11/07/2004

olá pessoal,

é com muito prazer q venho dar uma contribuição com vcs pois já passei por isso e perdi 7 horas de trabalho (com o dono da empresa em cima) por causa desse erro.

Isso eh um bug do componente e agora naum me lembro os detalhes pra explicar pra vcs o por que. Mas vamos ao q interessa:

No datasetprovider tem uma propriedade chamada ´ UpdateMode´ o valor default dela eh ´upWhereAll´ funciona muito bem com tabelas que não possuem chave primária, mas normalmente vc terá chave primária entaum mude para ´upWhereKeyOnly´ e isso deve resolver...

Se não resolver avisem!!

ABS.


Logado

Logado
Responder

Mais Posts

07/06/2004

Eniorm

Olá Pessoal ! estou usando FireBird última versão com DBX (...) depois se eu alterar e mudar uma vírgula aparece esse erro: Record not found or changed by another user, (...)


Estou com o mesmo problema, mas estou usando o DBX com
o MySQL, e o banco é local.
Ajuda será bem vinda, claro.
T+


Responder

10/07/2004

Xisto

Mais uma voz se junta. Estou quebranco a cabeca com isso tb.
SOCOOOOORROOOOOO!!!!!


Responder

12/07/2004

Rômulo Barros

http://www.firebird.com.br/faq.php?topic=1


Responder

21/07/2011

Mauro Murari

Obrigado resolveu o meu problema e de outros muitos.
Responder

21/07/2011

Vitor Rubio

Na verdade não é bug, mas isso define que tipo de instrução irá ser "concatenada" no filtro where da instrução update.
O CDS + DBX irá criar uma instrução update automaticamente quando você salvar um registro alterado. Se estiver como WhereKeyOnly o sql será formado assim:
update tabela set campo1 = valor, campo2 = valor, campo3 = valor where chave = valordachave

com o UpdateWhereAll a instrução seria 
update tabela set campo1 = valor, campo2 = valor, campo3 = valor where chave = valordachave and campo1 = valor1, campo2 = valor2, campo3 = valor3 
e assim por diante.

O UpdateWhereAll  cria um comando maior pois poe todas as colunas no where, enquanto o WhereKeyOnly poe só a chave primária. UpdateWhereAll   é "pessimista". Ele só dá update se todos os campos do banco forem iguais ao que você tinha antes de alterar. Se algum campo for diferente é porque ele já sofreu um update de outra pessoa antes do seu. Nesse caso o where não traria nada, não modificaria nenhuma linha, pois mesmo com a chave sendo igual os outros campos no banco já são diferentes, e a linha não seria encontrada. 
O WhereKeyOnly dá update filtrando só pela chave primaria. Então se você pega um registro assimnome  telefone
joão    12345678
e altera para 
nome telefonejoão    11111111
mas antes de você dar o apply updates alguém altera para nome    telefonejosé      12345678
e dá o apply, o seu update vai ser por cima desse, ou seja, o cara mudou o nome do cliente pra josé, mas manteve o mesmo telefone. Você vai alterar o telefone, como queria, mas vai fazer o nome dele voltar para João.
Isso é raro de acontecer. 
Dê umas olhadas também nas propriedades provider flags dos fields e no evento onreconcileerror. Você vai aprender como resolver vários tipos de situação de conflitos. 

E se acontecer com você um erro de key violation em datasets aninhados, tá aí a dica http://blog.vitorrubio.com.br/2011/06/key-violation-em-nested-datasets.html
Responder

30/01/2012

Marcio Poffo

No caso do Report Builder, pode ser que após ter sido feita a leitura inicial da query, os dados foram eliminados, no caso de dados temporários. Isto é, gerou a pagina inicial d relatorio e, quando clicado em proxima página, a tabela foi limpa. Ocorrerá este erro também.
Responder

23/04/2013

Rmr Ltda

Obigado. Resolveu e me ensinou muito.
Responder

15/12/2015

Felipe Riedi

Ótimo post.
Responder

02/09/2021

Francisco Junior

Cara,

Em 2021 vc me salvou, já tinha verificado tudo quanto há e não achava o diacho da solução. Bastou alterar isso que vc disse e funcionou perfeitamente.
Responder

18/12/2024

Marcos Castro

Estou implementando um sistema novo e parti para o FireDac. Com o FireDac tive muitos problemas de não gravação de registros, ter que fechar programa, startar transação etc, etc. Não resolveu meu problema e voltei para o velho e seguro BDX. No entanto comecei a ter esta mensagem 'Record not found or changed by another user'. Quebrei muito a cabeça mas graças a esta dica do provider, upDateMode = upWhereKeyOnly resolveu. Muito obrigado a todos. No meu caso também tive que setar no campo da chave a propriedade ProviderFlags.pfInKey = True. Valeu comunidade.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar