Por favor
Auguem tem uma rotina/função que salve e restaure as posições dos Aquivos ?
com Índices, SET filter etc ?
tenho uns 2 clientes que as vezes aceita 2 registro com a mesma chave (Unica).
com certeza e´problema de índices por falha de enegia, rede etc.
então Pendei em SALVAR fazer ser filter TO e set ORDER 0 e varrer o arquivo (não é grande) para ver se já existe o registro.
Desde já agradeço
ob
Paiva
Salvar e restaurar Posicao dos DBF
Moderador: Moderadores
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Salvar e restaurar Posicao dos DBF
Olá Paiva,
Uma rotina que uso para salvar e restaurar o ambiente é esta:
Para salvar o ambiente, sempre declaro como local as variáveis db_, in_, reg_, e chamo a função assim:
Para restaurar na saida da função chamo assim:
Porém, a duplicação de registro não é problema de indices deslocados, mas sim, SUPERAQUECIMENTO do processador do computador. Verifique em seu cliente, se a máquina está em local arejado, e até mesmo se não pega sol, e ainda, se os coolers estão funcionando corretamente. A duplicação ocorre neste caso.
O melhor mesmo é você montar uma função que checa a base buscando por registros duplicados, e excluindo o excedente.
Uma rotina que uso para salvar e restaurar o ambiente é esta:
Código: Selecionar todos
Function Ambiente( db_, in_, reg_, salva )
If (salva)
db_:=Alias()
in_:=IndexOrd()
reg_:=Recn()
ElseIf !Empty( db_ )
Sele ( db_ )
DBSetOrder( in_ )
Go reg_
Else
Sele (0)
Endi
Return Nil
Código: Selecionar todos
Ambiente( @db_, @in_, @reg_, .T. ) // salva o ambiente atualCódigo: Selecionar todos
Ambiente( db_, in_, reg_, .F. ) // retorna ambiente amteriorO melhor mesmo é você montar uma função que checa a base buscando por registros duplicados, e excluindo o excedente.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Salvar e restaurar Posicao dos DBF
Amiguinho,
para trabalho em rede esta é a pior opção para dar codificação sequencial.
Veja o post
Por acaso voce usa o velho truque do RECCO()?tenho uns 2 clientes que as vezes aceita 2 registro com a mesma chave (Unica).
para trabalho em rede esta é a pior opção para dar codificação sequencial.
Veja o post
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.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Salvar e restaurar Posicao dos DBF
BOm dia.
Sempre fiz: +- assim para TODOS meus clientes, tanto para obter o NUMERO de Cliente, pedido, orçamento , etc.
ugseq.dbf arq com campos para sequencia Registro UNICO SEM Indice.
use, lock tcodigo =strzero(val(ugseq-<codigo)+1,6)
replace ugseq->codigo with tcodigo
commited
unlock
se o cliente desse um INSERT e depois um ESC ele PERDIA uma sequencia (sem problemas)
somente UM cliente dava problema ai tive que SEMPRE fechar o arq e abri-lo depois (ugseq), POR algum Motivo um terminal fazia e na no servidor NAO era atualizado (rs) ou era atualizado DEPOIS que outro Usuario tambem fazia.
NO caso especifico ATUAL tenho 4 arquivos Pedidos ABertos+ Itens Abertos e Pedidos Faturados+ Itens faturados.
Obtenho a seq no ugseq e depois por segurança Verifico se JA EXISTE no crpedA e no crpedF.
+ recentemente por OBRIGAÇÂO do SEFAZ de NÂO poder ter FURO na sequencia, RESOLVI fazer da MESMA forma,
obtenho a sequencia no UGSEQ + somente apos informarem o Cliente e natureza/Cond Pagamento. E logo a seguir GRAVO o crpedA, dessa forma NAO permito Falha na sequencia. E ainda por cima ANTES de regravar o ugseq com a nova seq e incluir o crpedA eu recuo - 10 na sequencia e AINDA verifico se ela NAO existe no crpedA e no crpedF se NAO existir USO essa numeracao e IGNORO a re-gravacao do ugseq.
OU seja se tinha FURO por algum MOTIVO estaria Usando(recuperando esse furo para o pedido ATUAL)
+ mesmo assim em 1 ou 2 clientes andou acontecendo de ter registro duplicados.
Minha DUVIDA e´se duplicou na CRIACAO do pedido ou se Apos FATURAR (gravo o Registro do crpedA no crpedF e TAMBEM os Itens Abertos no Faturados e depois deleto do crpedA e dos Itens abertos),
vai que apos gravar o crpedF e os Itens Faturadose depois tentar deletar o crpedA e os Itenas Abertos ele NAo consiga (rs).
POR este MOTIVO pensei em SALVAR a SITUACAO do Arquivo (indices, POSICAO e Principalmente FILTROS), desligar tudo e VARRER fisicamente o pedido ABERTO que e´ Pequeno. e se PRECISO fosse o pedido FATURADO de traz para frente uma quantidade X de registro, pelo fato do Pedido Faturado ser MUTO GRANDE.
na GRANDE Maioria dos clientes NUNCA aconteceu de duplicar. Uso terminal SERVER em Praticamente TODOS os clientes. + como nem tudo é PERFEITO, os M. saem do terminal SEM sair do sistema aberto e os M. maiores desligam o servidor todo dia (rs) ai ferra Apesar de EU Abrir e Fechar os arquivos a Cada Programa, se pelo menos deixassem sempre no MENU nao teria problemas.
a cada 4 dias se Não re-indexaram eu FORÇO a re-indexação. + mesmo assim se alguem ficou Pendurado ou entra +- na mesma hora ao tentar Re-indexar outro usuario entrou em alguma opcao do MENU e esta usando determinados arquivos, QUEM estava re-indexando NAO consegue continuar e APESAR das MENSAGENS avisando os M. nao fazem a re-idexação.
o IDEAL seria que se pudesse DAR choque no OPERADOR, quem sabe apos uns X choques ele aprenderia a trabalhar corretamente .
se Por acaso tiveres alguma ideia ou solucao simples que funcione melhor ?
desde ja agradeço
Sempre fiz: +- assim para TODOS meus clientes, tanto para obter o NUMERO de Cliente, pedido, orçamento , etc.
ugseq.dbf arq com campos para sequencia Registro UNICO SEM Indice.
use, lock tcodigo =strzero(val(ugseq-<codigo)+1,6)
replace ugseq->codigo with tcodigo
commited
unlock
se o cliente desse um INSERT e depois um ESC ele PERDIA uma sequencia (sem problemas)
somente UM cliente dava problema ai tive que SEMPRE fechar o arq e abri-lo depois (ugseq), POR algum Motivo um terminal fazia e na no servidor NAO era atualizado (rs) ou era atualizado DEPOIS que outro Usuario tambem fazia.
NO caso especifico ATUAL tenho 4 arquivos Pedidos ABertos+ Itens Abertos e Pedidos Faturados+ Itens faturados.
Obtenho a seq no ugseq e depois por segurança Verifico se JA EXISTE no crpedA e no crpedF.
+ recentemente por OBRIGAÇÂO do SEFAZ de NÂO poder ter FURO na sequencia, RESOLVI fazer da MESMA forma,
obtenho a sequencia no UGSEQ + somente apos informarem o Cliente e natureza/Cond Pagamento. E logo a seguir GRAVO o crpedA, dessa forma NAO permito Falha na sequencia. E ainda por cima ANTES de regravar o ugseq com a nova seq e incluir o crpedA eu recuo - 10 na sequencia e AINDA verifico se ela NAO existe no crpedA e no crpedF se NAO existir USO essa numeracao e IGNORO a re-gravacao do ugseq.
OU seja se tinha FURO por algum MOTIVO estaria Usando(recuperando esse furo para o pedido ATUAL)
+ mesmo assim em 1 ou 2 clientes andou acontecendo de ter registro duplicados.
Minha DUVIDA e´se duplicou na CRIACAO do pedido ou se Apos FATURAR (gravo o Registro do crpedA no crpedF e TAMBEM os Itens Abertos no Faturados e depois deleto do crpedA e dos Itens abertos),
vai que apos gravar o crpedF e os Itens Faturadose depois tentar deletar o crpedA e os Itenas Abertos ele NAo consiga (rs).
POR este MOTIVO pensei em SALVAR a SITUACAO do Arquivo (indices, POSICAO e Principalmente FILTROS), desligar tudo e VARRER fisicamente o pedido ABERTO que e´ Pequeno. e se PRECISO fosse o pedido FATURADO de traz para frente uma quantidade X de registro, pelo fato do Pedido Faturado ser MUTO GRANDE.
na GRANDE Maioria dos clientes NUNCA aconteceu de duplicar. Uso terminal SERVER em Praticamente TODOS os clientes. + como nem tudo é PERFEITO, os M. saem do terminal SEM sair do sistema aberto e os M. maiores desligam o servidor todo dia (rs) ai ferra Apesar de EU Abrir e Fechar os arquivos a Cada Programa, se pelo menos deixassem sempre no MENU nao teria problemas.
a cada 4 dias se Não re-indexaram eu FORÇO a re-indexação. + mesmo assim se alguem ficou Pendurado ou entra +- na mesma hora ao tentar Re-indexar outro usuario entrou em alguma opcao do MENU e esta usando determinados arquivos, QUEM estava re-indexando NAO consegue continuar e APESAR das MENSAGENS avisando os M. nao fazem a re-idexação.
o IDEAL seria que se pudesse DAR choque no OPERADOR, quem sabe apos uns X choques ele aprenderia a trabalhar corretamente .
se Por acaso tiveres alguma ideia ou solucao simples que funcione melhor ?
desde ja agradeço
Salvar e restaurar Posicao dos DBF
Paiva
Eu uso essa rotina, veja se serve.
Poka
Eu uso essa rotina, veja se serve.
Código: Selecionar todos
//
// chamadas
salva_pos("cliente")
// outras rotinas
volta_pos("cliente")
*-----------------------------
funct salva_pos(xnomearq)
// salva posicao da area
//area_alias:=(xnomearq)->(alias())
recno_alias:="recno_alias"+xnomearq
ordem_alias:="ordem_alias"+xnomearq
public &recno_alias
public &ordem_alias
&recno_alias:= (xnomearq)->(recno())
&ordem_alias:=(xnomearq)->(indexord())
retu nil
*-----------------------------
funct volta_pos(xnomearq)
// volta posicao da area
recno_alias:="recno_alias"+xnomearq
ordem_alias:="ordem_alias"+xnomearq
dbselectarea(xnomearq)
dbsetorder(&ordem_alias)
(xnomearq)->(dbgoto(&recno_alias))
rele recno_alias
rele ordem_alias
retu nil
Poka

