Página 1 de 1
Codigo pulando sem confirmação dos dados
Enviado: 07 Jan 2008 21:32
por Josmar dos Santos
Ola...estou tendo alguns problemas com codigo pulando sem a confirmaçao dos dados. Ex: o usuário entra no cadastro de cliente(ja tem um codigo cadastrado porque e automatico) . Por algum motivo ele não cadastra nada. Tecla o ESC e volta ao menu principal. Depois ele volta de novo no mesmo e o codigo que deveria estar la, ja nao é mais o mesmo. Ele pulou para o próximo e assim sucessivamente.
Para parar o processo , o usuário reorganiza o arquivo. Isso ocorre umas duas vezes por dia. Só para lembrar: o programa roda em rede e uso o ntx....alguem tem alguma ideia de como solucionar esse problema...um abraço a todos...

Enviado: 07 Jan 2008 22:45
por Pablo César
Josemar, cómo é que tu pegas o código de tal registro ?. Poderia exemplificar ?. Eu por exemplo utilizo um arquivo dbf onde disponibilizo a numeração em sequência, quando esta sequência é quebrada por desistência ou até mesmo por dleeção de registro, eu guardo nesse mesmo dbf o número a ser devolvido. Desta forma consigo utilizar o menor número disponível. Evitando assim, que a minha sequência de números não fique um queijo suiço... hihiihi Ja outros colegas (como o Maligno, por exemplo), coloca a disposiçãoúm número aleatório (mas verifica se este ja não está cadastrado. Este outro método é mais prático e talvez mais seguro...
Enviado: 07 Jan 2008 22:53
por alaminojunior
Pelo relatado, o problema está no modo como é chamada a rotina onde se gera o novo código. Vc precisa tratar esta função, de maneira que: se for pressionada a tecla ESC, a rotina de inclusão é abandonada e não é gerado o novo código. O novo código será gerado ( e gravado ) apenas se uma determinada condição for satisfeita.
Agora, a respeito de NTX, pense com carinho a respeito de trocar o sistema de indexação para CDX, muito mais seguro, mais rápido e dependendo do sistema operacional usado, menos arquivos para gerenciar. Não sei se já conhece a respeito (pergunto por educação, porém se soubesse acho que já teria trocado) mas no sistema NTX, usamos n arquivos físicos de indice para cada ordem de indexação. Imagine um arquivo de clientes onde se deseja indexar por nome, endereço, código, cpf, bairro, tamanho do pé, horóscopo, etc... Teríamos no minimo, 7 arquivos fisicos. Agora pense numa rede com 30 terminais. Seriam ~ 210 arquivos para o servidor gerenciar só do banco de clientes. Com CDX, todas estas 7 ordens estarão dentro de um unico arquivo fisico, ou seja 30 somando todos os terminais. Que economia hein ! :-O ?
Enviado: 08 Jan 2008 04:34
por Maligno
Tecla o ESC e volta ao menu principal. Depois ele volta de novo no mesmo e o codigo que deveria estar la, ja nao é mais o mesmo. Ele pulou para o próximo e assim sucessivamente.
Estou quase apostando que o problema está na variável que controla a entrada deste número. De alguma forma ela pode estar mantendo o valor antigo. Se o que ela faz é incrementar, vai para o próximo. Quando o procedimento transcorre normalmente, é isso o que se espera dela. Mas no ESC nada é gravado. Então, parece ser erro de lógica.
É uma variável pública? Tente, no início desse fonte, apagar essa desgramada. Aí ela se comportaria como se o programa tivesse sido iniciado naquele momento.

Enviado: 09 Jan 2008 11:51
por rochinha
Amiguinho
Em meu caso eu sempre NUMÉRO meus registros ao confirmar a operação.
Sempre uso o registro fantasma para o repasse das variaveis que irei compor e depois faço minha critica se o usuario que confirmar, pego o proximo numero e salvo o registro.
Nunca dou numero logo que entro na rotina pois pode acontecer de o usuario escolher a opção errada na pressa.
Exemplo:
Código: Selecionar todos
...
Funcao CadastraCliente( lNovo )
dbSelectArea( "CLIENTES" )
if lNovo
dbGoBottom()
dbSkip
endif
M->CODIGO := 0
M->NOME := CLIENTES->NOME
...
// Codigo da tela
...
if Pergunta( "Quer Salvar" ) = "S" // Minha funcao de pergunta
dbSelectArea( "CLIENTES" )
M->CODIGO := PsqControle( "CLIENTES" ) // Ta na sessao Codigo fonte
dbAppend()
else
dbRLock()
endif
CLIENTES->CODIGO := M->CODIGO
CLIENTES->NOME := M->NOME
dbRUnlock()
dbCommit()
return nil