Verificar Índice
Moderador: Moderadores
-
PITERGALDIANO
- Usuário Nível 2

- Mensagens: 91
- Registrado em: 28 Nov 2003 08:48
Verificar Índice
Boa tarde pessoal!
Tenho um PDV que fica atualizando o limite de clientes no servidor a cada finalização de venda, o problema é que as vezes o arquivo de clientes corrompe o índice! Aí é um Deus nos acuda porque são vários PDV´s tendando acessar o arquivo de clientes com o índice danificado, causando transtornos no atendimento.
Gostaria de uma função que verificasse se o índice do DBF está integro! para somente abrir o arquivo de clientes se estiver correto.
Alguém conhece uma função dessa?
Obrigado.
Tenho um PDV que fica atualizando o limite de clientes no servidor a cada finalização de venda, o problema é que as vezes o arquivo de clientes corrompe o índice! Aí é um Deus nos acuda porque são vários PDV´s tendando acessar o arquivo de clientes com o índice danificado, causando transtornos no atendimento.
Gostaria de uma função que verificasse se o índice do DBF está integro! para somente abrir o arquivo de clientes se estiver correto.
Alguém conhece uma função dessa?
Obrigado.
Piter Galdiano
Programador Clipper
Programador Clipper
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinho:
Duas dicas:
Abra o arquivo e va trabalhando com ele durante o uso do PDV
ou
Abra, atualize e feche este arquivo, ja que ele não é de produção.
Outra,
Verifique a possibilidade de um anti-virus como o deAVAST estar sendo usado e corrompendo estes arquivos durante suas verificações.
Tenho este problema em clientes que usam ele, e a prova do crime é encontrar no meio do joio frases referentes a verificação do tal anti-virus.
Duas dicas:
Abra o arquivo e va trabalhando com ele durante o uso do PDV
ou
Abra, atualize e feche este arquivo, ja que ele não é de produção.
Outra,
Verifique a possibilidade de um anti-virus como o deAVAST estar sendo usado e corrompendo estes arquivos durante suas verificações.
Tenho este problema em clientes que usam ele, e a prova do crime é encontrar no meio do joio frases referentes a verificação do tal anti-virus.
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.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Não sabia que o AVG fazia isso. Mas corromper índices é uma coisa que não era para ser usual. Algum módulo deve estar abrindo o arquivo DBF para gravação sem abrir os arquivos de índices todos relacionados a esse DBF. Se for muito frequente isso, talvez seria questão de criar e abrir os índices no local, não é um método "normal", mas como se trata de arquivos de clientes, não de produção como disse o Rochinha, acho que até seria válido. Mas também teria que fazer uma rotina de atualização de índices também. Na verdade, essa idéia seria muito radical. Bom seria encontrar a raiz do problema. Quem sabe abrir esse arquivo de clientes em modo READONLY para consultas.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Verifique suas rotinas de abertura e atualização de arquivos.
A corrupção ocorre depois de atualizar um cliente?
Vc esta usando dbcommit() e dbunlock() no final da atualização?
A corrupção ocorre depois de atualizar um cliente?
Vc esta usando dbcommit() e dbunlock() no final da atualização?
"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}
{POG - Programação Orientada a Gambiarra}
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: Verificar Índice
Pitergaldiano,PITERGALDIANO escreveu:Boa tarde pessoal!
Gostaria de uma função que verificasse se o índice do DBF está integro! para somente abrir o arquivo de clientes se estiver correto.
Você pode usar um "begin sequence" para abrir os DBF e INDICE, de uma procurada no forum que tem um monte de post que mostra como usar.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Perdão, agora que eu me toquei... tinha pensado que era a mesma coisa. O que o Rochinha estava falando é sobre o AVAST não AVG.Netavin escreveu:... Avast ou AVG
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Re: Verificar Índice
Agora que o colega falou de "begin sequence", lembrei que eu trato os erros, através do ERRORSYS.PRG e quando dá alguma mensagem de "corruption detected" faço que o próximo passo entre na rotina de indexação.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinhos
Chamei de deAVAST pois o mesmo realmente corrompeu vários DBFs e a informação do mesmo e de tudo que ele verificou ficou gravada dentro do arquivo.
Em relação a corrupções é dificil correr deles pois em muito se deve ao fato do servidor ser usado para outras coisas alem do provimento de dados e seu cache fica sendo usado em outras aplicações e quando o descarregamento dele é feito muito lixo temporário pode ir graudado aos dados ou indices.
A melhor solução é a busca de uso de um gerenciador de dados potente ou usar uma maquina que apenas provenha dados, acho até que um pequeno P3 ligado a rede possa suprir este problema sem deixar lento o desempenho do restante da rede.
O que geralmente fazemos é instalar nossos aplicativos em qualquer maquina de uma rede, que geralmente é usada por usuário com outros programas, inclusive alguns pesados que puxam tudo da CPU deixando pouco para o aplicativo xBase.
Outro fator é a inocencia, alguns programas que achamos ocupar pouco da maquina na realidade se mostram pequenos comedores de espaço, como é o caso do Google Desktop, que apresenta uma barra de utilidade identica a do Kurumin e Vista. Esta mesmo barracom somente o relogio e um leitor de noticias conseguiu usar 5Gb de meu HD, 5Gb em um programinha de nada e meu sistema com dados de vários anos de um cliente chega a ocupar 100Mb.
Portanto programas que achamos uteis podem ser também armadilhas aos nossos dados.
Chamei de deAVAST pois o mesmo realmente corrompeu vários DBFs e a informação do mesmo e de tudo que ele verificou ficou gravada dentro do arquivo.
Em relação a corrupções é dificil correr deles pois em muito se deve ao fato do servidor ser usado para outras coisas alem do provimento de dados e seu cache fica sendo usado em outras aplicações e quando o descarregamento dele é feito muito lixo temporário pode ir graudado aos dados ou indices.
A melhor solução é a busca de uso de um gerenciador de dados potente ou usar uma maquina que apenas provenha dados, acho até que um pequeno P3 ligado a rede possa suprir este problema sem deixar lento o desempenho do restante da rede.
O que geralmente fazemos é instalar nossos aplicativos em qualquer maquina de uma rede, que geralmente é usada por usuário com outros programas, inclusive alguns pesados que puxam tudo da CPU deixando pouco para o aplicativo xBase.
Outro fator é a inocencia, alguns programas que achamos ocupar pouco da maquina na realidade se mostram pequenos comedores de espaço, como é o caso do Google Desktop, que apresenta uma barra de utilidade identica a do Kurumin e Vista. Esta mesmo barracom somente o relogio e um leitor de noticias conseguiu usar 5Gb de meu HD, 5Gb em um programinha de nada e meu sistema com dados de vários anos de um cliente chega a ocupar 100Mb.
Portanto programas que achamos uteis podem ser também armadilhas aos nossos dados.
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.
Piter, fica dificil dar qualquer opinião com o pouco de informação que você passou...
Qual erro que ocorre afinal? Qual clipper, linkador e RDD (NTX ou CDX?) você usa? Você tem certeza que não são os DBFs que estão corrompidos (um campo data, com letras no meio, pode bagunçar o indice...)? Como você abre e fecha os DBFs/Indices e como/quando os índices são criados? Como são as chaves de indexação? Se você cria um índice usando por exemplo ALLTRIM(CAMPO), a chance de dar erro é grande (as chaves devem ter o mesmo tamanho).
Dê mais informações...
Qual erro que ocorre afinal? Qual clipper, linkador e RDD (NTX ou CDX?) você usa? Você tem certeza que não são os DBFs que estão corrompidos (um campo data, com letras no meio, pode bagunçar o indice...)? Como você abre e fecha os DBFs/Indices e como/quando os índices são criados? Como são as chaves de indexação? Se você cria um índice usando por exemplo ALLTRIM(CAMPO), a chance de dar erro é grande (as chaves devem ter o mesmo tamanho).
Dê mais informações...
Re: Verificar Índice
Eu sempre sei se meu DBF está íntegro. O truque é simples. Crio o último campo do registro do DBF com CHAR(8) para armazenar o CRC32 da soma das strings que representam todos os campos anteriores. Se na utilização do programa o CRC32 recalculado não bater com o que está armazenado, de duas uma: ou ferrou ou alguém fraudou. Mais fácil impossível.PITERGALDIANO escreveu:Gostaria de uma função que verificasse se o índice do DBF está integro! para somente abrir o arquivo de clientes se estiver correto.
No meu menu de ferramentas também incorporei uma função de checagem de integridade total, que nada mais é do que a checagem do CRC32 de todos os registros dos DBFs que o usuário selecionar.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
-
PITERGALDIANO
- Usuário Nível 2

- Mensagens: 91
- Registrado em: 28 Nov 2003 08:48
Você transforma para strings os campos que não sejam caractere, soma todos os campos e obtém uma única string. Calcula o CRC32 dessa string e armazena no último campo do registro. Uso o último campo porque facilita o cálculo automático na minha função de checagem. Ah, sim. Esqueci de dizer que a cada alteração do registro, claro, o CRC desse registro é atualizado.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Se interessar, eis as funções que uso:
Apenas note que a função dbFieldCRC() verifica se o último campo do DBF tem um nome iniciado pela string "CRC". Se positivo, calcula o CRC de todos os campos e armazena o resultado neste último campo.
A função CRC32Calc() foi feita em Assembly e é bem rápida. Está no meu site (fonte e objeto), caso queira. Clique aqui para pegar.
Código: Selecionar todos
//******************************************************
function dbSaveCRC()
if dbFieldCRC()
FieldPut(FCount(),dbCalcCRC())
end
return nil
//******************************************************
function dbFieldCRC()
return Right(RTrim(FieldName(FCount())),3) == "CRC"
//******************************************************
function dbCalcCRC()
local cSum := ""
local f
local i
*
for i := 1 to FCount()-1
f := FieldGet(i)
cSum += if(ValType(f) = "C", f ,;
if(ValType(f) = "N", Str(f,18,6) ,;
if(ValType(f) = "D", DtoS(f) ,;
if(ValType(f) = "L", if(f,"1","0"), ""))))
next
return CRC32Calc(cSum)A função CRC32Calc() foi feita em Assembly e é bem rápida. Está no meu site (fonte e objeto), caso queira. Clique aqui para pegar.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinho
Maligno, voce tem esta mesma função em Clipper puro, ou ASM compilado em 32bits, gostaria de agregar as verificações em meu sistema. Como uso Harbour vejo que isto seria super util.
Maligno, voce tem esta mesma função em Clipper puro, ou ASM compilado em 32bits, gostaria de agregar as verificações em meu sistema. Como uso Harbour vejo que isto seria super util.
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.



