Help and Support

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 valor de mesmo.

Causa

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

  • Memória intermédia de optimista está activada.
  • Outro utilizador modificou o registo actual numa tabela enquanto estava a editar.
Além disso, o CURVAL() e OLDVAL() devolvem o mesmo valor se a todos os três 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 as duas ocorrê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 modificou 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 sido alteradas, se um registo tiver sido anexado ou se o estado de eliminação do registo actual foi mudado. Para mais informações sobre a utilização 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 de DataSession do formulário para 2 - sessão de dados privada e executar duas instâncias do formulário.
    -or-
  • -ou - Se estiver a utilizar memória intermédia de pessimista ou sem memória intermédia, altere para linha optimista ou tabela de memória intermédia utilizando a função CURSORSETPROP() no método de inicialização do formulário. Por exemplo, introduza o seguinte comando para definir a memória intermédia de tabela optimista:
       =CURSORSETPROP("BUFFERING",5)

Mais Informação

Passos para reproduzir o comportamento

  1. Criar 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 do formulário. Defina a legenda do botão para apresentar . <fieldname>No caso de clique do botão, escreva o seguinte código, substituindo o nome de 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 caso de clique do botão, escreva o seguinte código:
       =TABLEUPDATE()
  5. No caso de inicialização do formulário, adicione o seguinte código:
       =CURSORSETPROP("BUFFERING",5)
  6. Guarde o formulário como TESTFORM.
  7. Na janela de comandos, escreva sejam TESTFORM de formulário e prima ENTER. Repita este passo.
  8. Mova as formas para a que pode 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 de actual e antigo deve ser o mesmo.
  11. Feche ambas as instâncias do formulário. Alterar a propriedade form.DataSession para 2 e execute novamente a ambas as cópias do formulário. As funções curval() e oldval() devem apresentam 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 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). Pedíamos-lhe o favor de preencher o formulário existente no fundo desta página caso venha a encontrar erros neste artigo e tenha possibilidade de colaborar no processo de aperfeiçoamento desta ferramenta. 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