Fórum Record not found or changed by another user / Unable to find #275049
01/04/2005
0
1 - Record not found or changed by another user
2 - Unable to find record. No key specified.
Segui as recomendações daqui do fórum, colocando a propriedade UpdateMode para WhereKeyOnly e coloquei o campo que representa a sua chave primária no ProviderFlags (SQLDataSet e ClientDataSet) para InKey=True.
Não funcionou.
No tópico http://forum.devmedia.com.br/viewtopic.php?t=18327&highlight=record+found
é falado de cofiguração do ´DataSetProvider de acordo com suas necessidades e então defina os ProviderFlags do DataSet de acordo com sua opção´
Quando deveriamos usar as opções fornecidas no DataSetProvider, ou seja, em que caso devemos usar que opção do UpdateMode?
A mesma questão vai para o SQLDataSet e o ClientData, para a propriedade ProviderFlags.
Daaneto
Curtir tópico
+ 0Posts
01/04/2005
Fred
Gostei + 0
01/04/2005
Daaneto
Segue o código utilizado para fazer a inserção e edição dos registros:
Application.CreateForm(TfrmCadastroTanque, frmCadastroTanque); // Para Inserção: dm.cdsTanques.Insert; // Para Edição: dm.cdsTanques.Edit; If frmCadastroTanque.ShowModal = MROK Then Begin dm.cdsTanques.ApplyUpdates(0); End Else Begin dm.cdsTanques.Cancel; End;
cdsTanques é o ClientDataSet, que agora está com o ProviderFlags com [pfInUpdate,pfInWhere], para todos os campos da tabela.
Já no sdsTanques que é o SQLDataSet, está com o ProviderFlags com [pfInUpdate,pfInWhere,pfInKey] = True para o campo de auto incremento. Para os outros campos está [pfInUpdate,pfInWhere] = True.
Obrigado pela ajuda.
Gostei + 0
01/04/2005
Fred
Gostei + 0
04/04/2005
Daaneto
O campo chave deve ser pfInUpdate = True ou False?
Os outros campos devem ter pfinUpdate = True, pfInWhere = True, pfInKey = False?
Gostei + 0
04/04/2005
Vendre
vlw
Gostei + 0
05/04/2005
Fred
Gostei + 0
05/04/2005
Daaneto
Continua dando a mesma mensagem de erro: Record not found or changed by another user.
Testei, como sugerido, modificar apenas o ProviderFlags apenas do SQLDataSet, como não funcionou modifiquei também o do ClientDataSet e também não funcionou.
Modifiquei também o poCascadeUpdates do DataSetProvider e também não deu certo.
O que estou fazendo para remediar a situação é fechar o SQLDataSet após a inserção com o ApplyUpdates(0) e abrir novamente.
Application.CreateForm(TfrmCadastroTanque, frmCadastroTanque); dm.cdsTanques.Insert; If frmCadastroTanque.ShowModal = MROK Then Begin dm.cdsTanques.Post; End Else Begin dm.cdsTanques.Cancel; End; dm.cdsTanques.ApplyUpdates(0); dm.cdsTanques.Close; dm.cdsTanques.Open;
O problema é que quando é aberto novamente, logicamente ele não está mais no mesmo registro.
Sei que esta não é a solução correta.
Gostei + 0
09/04/2005
Antoniologica
coloca no evento onReconcilieError o código:
ShowMessage(E.Message);
e verifique se retorna algum erro na inclusão.
Gostei + 0
09/04/2005
Antoniologica
Gostei + 0
04/10/2005
Pro2
coloca todos os campo (Fields) tanto no no clientdataset quanto no sqldataset
no clientdataset :
depois no campo chave vc colocar assim
pfiNUpdate := false;
pfInWhere := true;
pfInKey := true;
e pra não campos chave
pfiNUpdate := true;
pfInWhere := true;
pfInKey := false;
no sqldataset
depois no campo chave vc colocar assim
pfiNUpdate := true;
pfInWhere := true;
pfInKey := true;
e pra não campos chave
pfiNUpdate := true;
pfInWhere := true;
pfInKey := false;
e no DataSetProvider fica assim
UpdateMode = upWhereKeyOnly
deste forma resolve o problema
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)