Record not found or changed by another user ?
07/06/2004
0
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
Post mais votado
11/07/2004
é 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
Mais Posts
07/06/2004
Eniorm
Estou com o mesmo problema, mas estou usando o DBX com
o MySQL, e o banco é local.
Ajuda será bem vinda, claro.
T+
10/07/2004
Xisto
SOCOOOOORROOOOOO!!!!!
21/07/2011
Vitor Rubio
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
30/01/2012
Marcio Poffo
02/09/2021
Francisco Junior
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.
18/12/2024
Marcos Castro
Clique aqui para fazer login e interagir na Comunidade :)