update affected more than 1 record
14/01/2006
0
Joe_wah
Post mais votado
14/01/2006
Bruno Belchior
Mais Posts
14/01/2006
Joe_wah
14/01/2006
Joe_wah
CODIGO(que é a foreign key)
DATA(que é um date)
INFO ( um blob memo)
eu to tentando atualizar só o campo INFO, e só viram cópias do registro que eu atualizei os registros que além da mesma chave estrangeira, tenha a mesma data.
14/01/2006
Edilcimar
try
with ibtable1 do
begin
faça o que quiser com ela para achar o registro e alterar qualquer coisa uma vez que aqui vc não tem problema
with ibtable2 do
begin
edit; ->aqui vc vai trocar todos os campos que queira, menos o da chave estrangeira é claro
fieldbyname(´DATA´).Value := NovaData;
fieldByName(´INFO´).Assign(Memo1.Lines);
post;
ibtransaction1.commit;
except
showmessage(´xxxxxx´);
ibtransaction1.rollback;
end;
end;
end;
14/01/2006
Bruno Belchior
14/01/2006
Joe_wah
1 - Se eu tentar inserir mais de 2 registros que possuam a mesma chave estrangeira da erro key violation, se tiverem chaves estranegiras diferentes nao da problema nenhum, e eu até consigo adicionar varios com a mesma chave estrangeira desde que somente um por cada execução do programa.
2 - Eu consigo editar qualquer registro sem probglemas exceto um registo que eu tenha acabado de criar, neste caso o erro é ´´Record not found or Changed by Another User´
14/01/2006
Edilcimar
1) banco de dados usado
2) componente usado
3) código do processo onde está acontecendo o erro
14/01/2006
Joe_wah
O erro deixa de ocorrer toda hora que eu chamo o select dessa tabela.Se eu executo o select sempre antes de fazer cada inserção de registro ou atualização não da erro nenhum, porém se chamo só uma vez , o insert/edit só funciona igualmente uma vez.
Esse é código do select que exibe os dados que quero da tabela no Grid:(é este codigo todo que tenho que executar pra nao dar erro, o DataSet2 é a tabela problematica, o DataSet1 trata-se de outra tabela menos problematica, no 1 so tenho o problema do update)
DataModule1.ClientDataSet2.Close;
paciente := DataModule1.ClientDataSet1.FieldByName(´CODIGO´).AsInteger;
DataModule1.SQLDataSet2.CommandText := ´SELECT * FROM HISTORICO_PACIENTES WHERE CODIGO=:c_paciente ORDER BY DATA DESC´;
DataModule1.SQLDataSet2.ParamByName(´c_paciente´).asinteger := paciente;
DataModule1.ClientDataSet2.Open;
e para fazer as inserções e updates simplesmente uso
ClientDataset.Insert; (ou .Edit; )
e ClientDataSet.ApplyUpdates(0);
Chamar o codigo toda hora resolveria, mas seria uma gambiarra, quero achar a raiz do problema. Valeu
14/01/2006
Joe_wah
15/01/2006
Joe_wah
15/01/2006
Joe_wah
Clique aqui para fazer login e interagir na Comunidade :)