Artigo: 130299 - Última revisão: sexta-feira, 15 de Fevereiro de 2002 - Revisão: 1.1

PROBLEMA: CURVAL() devolve o mesmo valor como OLDVAL()

Nesta página

Expandir tudo | Reduzir tudo

Sintomas

Em determinadas circunstâncias, CURVAL() e OLDVAL() devolvem o mesmo valor.

Causa

Isto ocorre por predefinição. CURVAL() e OLDVAL() devolvem apenas valores diferentes quando as seguintes duas condições forem ambas verdadeiras:

  • Armazenamento em buffer optimista está activado.
  • Outro utilizador modificou o registo actual numa tabela enquanto estava a editar.
Além disso, CURVAL() e OLDVAL() devolvem o mesmo valor, se as três das seguintes condições se verificarem:

  • Duas formas na mesma sessão do Visual FoxPro estão a utilizar a mesma tabela.
  • Os dados uma instância de formulário foi modificados.
  • Os dados na outra instância do formulário não foi modificados.
Neste caso, CURVAL() não devolve um valor diferente porque duas instâncias dos formulários partilham uma sessão de dados por predefinição. Porque o utilizador bloqueou o registo na primeira forma, a sessão de dados no segundo formulário considera próprio bloqueou o registo bem.

Resolução

Escolha uma das seguintes alternativas threee:

  • Se pretender escrever código para determinar se o utilizador actual tiver modificado o registo actual, utilize a função GETFLDSTATE(). O GETFLDSTATE() função devolve um valor numérico que indica se um ou mais campos no registo actual tiverem alterado, se um registo foi anexado ou se tiver alterado o estado de eliminação do registo actual. Para mais informações sobre como utilizar GETFLDSTATE(), consulte o ficheiro de ajuda do Visual FoxPro. - ou -

  • - ou - se pretender testar o código num cenário de multi-utilizador, tem de ter duas sessões de dados em execução. Para efectuar este procedimento:

    • Execute duas instâncias do Visual FoxPro simultaneamente em computadores mesmos ou rede. - ou -

    • - ou - define a propriedade DataSession do formulário para 2 - sessão de dados privada e executar duas instâncias do formulário.
    - ou -
  • - ou - se estiver a utilizar armazenamento em buffer pessimista ou não utilização da memória intermédia, altere para linha optimista ou tabela utilizando a função CURSORSETPROP() no método de inicialização do formulário de memória intermédia. Por exemplo, introduza o seguinte comando para definir a memória intermédia tabela optimista:
       =CURSORSETPROP("BUFFERING",5)

Mais Informação

Passos para reproduzir o comportamento

  1. Crie um novo formulário e adicionar uma tabela para o ambiente de dados.
  2. Arraste pelo menos um campo do ambiente de dados para o formulário.
  3. Adicionar um botão de comando ao formulário. Defina a legenda do botão para Mostrar . <fieldname>No evento clique do botão, escreva o seguinte código, substituindo o nome do campo do passo 2 para <nomecampo>. O nome do campo deve ser colocado entre aspas:
       =MESSAGEBOX("Current value of field:  " + CURVAL(<'fieldname'>) + ;
                  CHR(13) + ;
                  "Old value of field:      " + OLDVAL(<'fieldname'>))
  4. Adicionar um segundo botão de comando ao formulário. Defina a legenda do botão para actualização . No evento clique do botão, escreva o seguinte código:
       =TABLEUPDATE()
  5. No evento init do formulário, adicione o seguinte código:
       =CURSORSETPROP("BUFFERING",5)
  6. Guarde o formulário como TESTFORM.
  7. Na janela de comandos, escreva DO TESTFORM FORM e prima ENTER. Repita este passo.
  8. Mova os formulários para que possa ver cada formulário no ecrã.
  9. Alterar os dados de uma cópia do formulário e prima ENTER. Clique no botão Mostrar. O valor actual e o valor antigo devem ser o mesmo. Clique no botão Actualizar.
  10. Clique na segunda cópia do formulário. Clique no botão Mostrar. O valor antigo e actual deve ser o mesmo.
  11. Feche ambas as instâncias do formulário. Altere a propriedade form.DataSession para 2 e execute novamente ambas as cópias do formulário. As funções curval() e oldval() deverão apresentar o mesmo valor na cópia do formulário no qual alterou os dados. Depois de clicar no botão Actualizar esta cópia do formulário, a cópia não tendo sido modificada do formulário deve apresentar valores diferentes para as funções de oldval e curval.

A informação contida neste artigo aplica-se a:
  • Microsoft Visual FoxPro 3.0 Standard Edition
Palavras-chave: 
kbmt 3.00 kbnetwork vfoxwin KB130299 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 130299  (http://support.microsoft.com/kb/130299/en-us/ )
 

Traduções de Artigos