Sistema duplicando dados

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Sistema duplicando dados

Mensagem por gilsonpaulo »

Estou com um problema em um cliente, onde esta ocorrendo duplicao dos dados no banco.

Tenho o mesmo sistema em outros 3 clientes onde não ocorre isto.

Seque em anexo o banco de dados e o prg.
Anexos
GB1.zip
(20.11 KiB) Baixado 238 vezes
CADENT.zip
(12.15 KiB) Baixado 247 vezes
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: Sistema duplicando dados

Mensagem por gvc »

Por favor, especifique a duplicidade.
Pelo que vi no seu arquivo DBF, vc não esta normalizando os dados.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Re: Sistema duplicando dados

Mensagem por gilsonpaulo »

Se voce observar o numero 000850,000852,000855,000856,000860,000861,000862 estão duplicados
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Sistema duplicando dados

Mensagem por rochinha »

Amiguinho,

Se voce usa rede siga a sequencia de liberação de registro e posterior comitação, ou seja, travou o registro com dbAppend(APPEND) ou dbRLock(REGLOCK) para salvar destrave o registro com dbRUnlock() e commit local, dbCommit().

Outra coisa, sempre re-selecione a área da tabela antes destes comandos, nunca dispare comandos de salvamento para uma área estando em outra, pode funcionar? mas não é o correto.

Verifique como o cache na sessão DOS(smartdrv) esta funcionado bem, sem atrasos ou avanços.

Verifique se o ambiente DOS está compatível e idêntico em todos os clientes, podem haver diferenças, mas a falta de memória nestes momentos pode causar estes problemas.

Utilize o EXEcutável de um cliente que não tem estes problemas na máquina do cliente com problemas para ver se continua, se sim, o código do sistema neste cliente tem problemas.

Desative antivirus no servidor e nesta máquina com causa problemas e deixe funcionar para ver se continua o problema.

Analise como os usuários se comportam, que programas usam e quanto tempo seu sistema fica aberto ou ocioso.

Sendo o caso de usuário ou máquina com problemas é interessante saber se a mesma esta sendo reiniciada por algum motivo, para tal seria legal colocar um pequeno programinha em Clipper no autorun que gravasse a data e hora que ele foi ativado, ou seja, se a máquina foi reiniciada no inicio do dia e fechado no fim do dia deverão existir somente uma data e hora, caso existam várias a mesma esta tendo reinicializações, sendo que talvez estejam acontecendo quando seu sistema esta aberto.

Em suma revise o módulo que esta trabalhando com esta tabela e seus indices.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Re: Sistema duplicando dados

Mensagem por gilsonpaulo »

A rede e netware 5.1 as estacao rodam ms-dos com boot remoto, com o smardrv desativado.

Sobre o commit, devo dar antes ou depois do unlock().

As maquinas, são novas, o servidor é um poweredge t300 da dell o swith e da planet 24 portas, é tudo novo.

Vou relinkar o sistema com blinker, notei que algumas poucas vezes o sistema acusava memory low

Obrigado a todos pela ajuda ate agora.
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: Sistema duplicando dados

Mensagem por gvc »

1) Vc deve usar o DBCommit antes do DBUnlock.
Vc primeiro deve descarregar os dados do registro que estão na memória no disco e depois desbloquear o registro. Fazendo o contrário, vc corre o risco de um outro usuário pegar o registro desbloqueado com informações antigas.

2) Vc usa arquivo temporário para entrar com as informações de vendas. Pelo que entendi (não estudei todo o programa) vc coloca para o usuário que esta digitando gravar (atualizar a base principal) e pergunta se é para limpar a base temporária.
Me ocorre o seguinte:
- O usuário não limpou a base e começou a entrar com mais dados de outra vendas. Como o filtro esta ativo para a tela, os dados anteriores não vão aparecer na tela, mas serão gravados.
- O usuário editou (carregou para o arquivo temporário) esses registro e mandou salvar novamente. Se vc não usa pesquisa por indice ou a chave de pesquisa esta errada, o sistema grava novamente os dados do temporário como novos registros.

Se vc colocar uma auditoria que grave a informação de data, hora, usuário, chave, ação (incluir / alterar / excluir) que gravou do temporário para o principal, já dá para pegar o que o usuário esta fazendo.
Veja que não é sujeira de arquivo. São os mesmo registros exatamente na mesma ordem.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Re: Sistema duplicando dados

Mensagem por gilsonpaulo »

Ok pessoal, muito obrigado pelas dicas, mas descobri que o problema esta com a netware 5.1, voltei o servidor com a netware 3.12 e não ocorreu mais o problema.
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Re: Sistema duplicando dados

Mensagem por billy1943 »

Para evitar o que está acontecendo com o colega, além dos DbCommit() e DbUnlock() e seleção do arquivo para dar os replaces nos campos, eu uso há muito tempo, as funções como no seguinte exemplo:

select arquivo
initvars() // inicia as variáveis com um "m" antecedendo cada campo - assim o campo codigo fica "mcodigo"


// na rotina de inclusão do registro a entrada das variáveis fica assim
@ x,y say "Código: " get mcodigo pict "99999" valid suafunção etc. // evita edição direta no campo do arquivo
// essa função pode verificar se já existe o
// registro com esse código
@ x+1,y say "Nome: " get mnome pict "@!"
read
...
select arquivo
replvars() // dará replace em todos os campos, editados ou não
dbcommit()
dbunlock()

// na alteração de campos fica mais fácil

select arquivo
equvars() // carregará as variáveis de memória com o conteúdo de todos os campos do arquivo

@ x,y get mcodigo
@ y,z get mnome
read

// para salvar
replvars()
clrvars() // limpa as variáveis de memória


// no final da rotina
freevars // libera as variáveis de memória quando não serão mais necessárias

****
segue em anexo o fonte dessas instruções
Anexos
FUNCVARS.TXT
funções em Clipper para entrada de dados
(1.68 KiB) Baixado 201 vezes
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Responder