Help ClientDataSet
Tenho uma view simples no banco de dados, utilizando as seguintes tabelas, por exemplo:
CLIENTES
Codigo,
Nome,
Endereco,
Codigo do municipio
MUNICIPIOS
Nome do municipio
Ao incluir um novo cliente, qdo quero salvar e executar o ApplyUpdates, preciso executar refreshrecord na intenção de trazer o nome do município... seria como um refresh.. porem o refresh me atualizaría todo clientdataset.
Utilizando Refreshrecord após o Applyupdates, eu recebo uma mensagem de erro :
´Record not found or change by another user´.
Vcs podem me ajudar ?
CLIENTES
Codigo,
Nome,
Endereco,
Codigo do municipio
MUNICIPIOS
Nome do municipio
Ao incluir um novo cliente, qdo quero salvar e executar o ApplyUpdates, preciso executar refreshrecord na intenção de trazer o nome do município... seria como um refresh.. porem o refresh me atualizaría todo clientdataset.
Utilizando Refreshrecord após o Applyupdates, eu recebo uma mensagem de erro :
´Record not found or change by another user´.
Vcs podem me ajudar ?
Joaogutheil
Curtidas 0
Respostas
Joaoshi
08/07/2005
Colega,
Antes de dar o POST no ClientDataSet você atualiza o campo nome do Municipio (tire os flags do campo sem update, sem where).
Espero ter ajudado.
Antes de dar o POST no ClientDataSet você atualiza o campo nome do Municipio (tire os flags do campo sem update, sem where).
Espero ter ajudado.
GOSTEI 0
Jeffmanske
08/07/2005
Olá, estou com o mesmo problema... vc conseguiu solucionar?
Att,
Jefferson Manske
jmanske@terra.com.br
Att,
Jefferson Manske
jmanske@terra.com.br
GOSTEI 0
Beppe
08/07/2005
Eu não posso te dizer o que fazer, pois depende da tua arquitetura. Posso te oferecer opções.
Como está DSP.UpdateMode? O usual é upWhereAll, que trata concorrência otimista, e monta uma clausula WHERE com os valores de todos os campos marcados com pfInWhere em ProviderFlags. Se usar Firebird, defina os campos persistentes no SDS e configure esta propriedade. SQLServer, pode ser no próprio CDS.
Se DSP.UpdateMode = upWhereAKeyOnly, então vc deve informar quais campos são chave, via pfInKey em ProviderFlags.
Bom, isto que indiquei acima trata o ´Record not found´ e deve resolver caso o sistema apresente a falha mesmo com um usuário logado apenas. Já a parte ´change by another user´ é semelhante, mas só pode ocorrer com usuários concorrentes, e usando upWhereAll no DSP. Não é ruim não, pelo contrário, isto garante que dados de um usuário não serão sobrescritos no ApplyUpdates.
Como está DSP.UpdateMode? O usual é upWhereAll, que trata concorrência otimista, e monta uma clausula WHERE com os valores de todos os campos marcados com pfInWhere em ProviderFlags. Se usar Firebird, defina os campos persistentes no SDS e configure esta propriedade. SQLServer, pode ser no próprio CDS.
Se DSP.UpdateMode = upWhereAKeyOnly, então vc deve informar quais campos são chave, via pfInKey em ProviderFlags.
Bom, isto que indiquei acima trata o ´Record not found´ e deve resolver caso o sistema apresente a falha mesmo com um usuário logado apenas. Já a parte ´change by another user´ é semelhante, mas só pode ocorrer com usuários concorrentes, e usando upWhereAll no DSP. Não é ruim não, pelo contrário, isto garante que dados de um usuário não serão sobrescritos no ApplyUpdates.
GOSTEI 0