Tenho um sistema de vendas em um cliente que está usando em 3 terminais, sendo 2 com Windows XP e 1 com Windows 7 - 32 bits. Quando abre a rotina de vendas nos 3 terminais, fica muito lento. Já verifiquei tudo dentro do sistema e não acho onde está o erro. Além de ficar muito lento, tem algumas vezes que ao gravar a venda no arquivo, o sistema está gravando o nº do cupom em duplicidade, ou seja, pega a venda de um terminal e joga com o mesmo n da venda do outro terminal. Estou usando o comando do SET EXCLUSIVD OFF, mas mesmo assim não resolve. Preciso da ajuda de vocês para me dar uma ideia no que posso fazer.
Desde já agradeço.
Fernando Borges.
Sistema de Vendas em rede, muito lento.
Moderador: Moderadores
-
Fernando Borges
- Usuário Nível 1

- Mensagens: 38
- Registrado em: 29 Set 2004 16:43
- Localização: Sacramento/MG
Sistema de Vendas em rede, muito lento.
Fernando,
A sua pergunta foi muito pouco específica e a resposta pode estar em muitos lugares, então vou listar algumas coisas, quem sabe ajuda.
1. Rede física – os PCs estão todos com o SO atualizado e com os drivers corretos (principalmente da placa de rede) e estão livres de vírus e/ou malwares? Você testou (com equipamento apropriado) os cabos de rede e os conectores?
2. Qual Clipper e linkador que você usa? A voz corrente é que a melhor parceria é o 52e com o Blinker 7.0.
3. Você usa a função OL_AutoYield (da OSLib) ou alguma similar? O Clipper, sem esta função, faz a CPU grudar nos 100% e tudo fica travado...
4. Se os passos anteriores estão cercados, como é a estrutura aí? Os EXEs e os DBFs ficam em um PC e os outros acessam via mapeamento? Você usa DBEdit? Faz uso do SEEK ou usa o LOCATE?
5. Qual RDD você usa, NTX ou CDX? O erro (gravar em duplicidade) só acontece numa rotina específica? Você sempre abre todos os índices junto com cada respectivo DBF? Você já tentou recriar os índices (pode ser índice corrompido). Também, pode ser DBF corrompido. Você já deu uma geral neles?
6. Você diz que usa o SET EXCLUSIVE OFF, mas ele sozinho não faz verão. Na hora de cada estação gravar alguma coisa em um DBF, você está bloqueando o DBF ou o registro com FLOCK ou RLOCK? Em rede, com DBF, tem que cuidar muito bem disso.
7. Se você usa o SEEK, dá uma conferida, pra saber se o que você procura, em cada situação, está de acordo com o índice criado anteriormente. Exemplo: um dos índices é por número de venda, campo numérico, aí na hora do SEEK você pede pra procurar um string alfanumérico... Nessa situação, o SEEK não acha o que deve e o REPLACE pode acabar acontecendo em registro indevido. Ainda, veja se o SET ORDER TO está apontando para o índice desejado, em cada caso.
8. Precisa ver a LÓGICA do seu programa: se os 3 terminais criam concomitantemente registros de venda, tem que ter um mecanismo pra evitar que as coisas se misturem. Sem controle (ou com controle falho), pode ser que um mesmo número de venda esteja sendo gerado em duplicidade (aqui entra o FLOCK e o RLOCK).
Bão, juntando um SEEK errado com um SET ORDER indevido, com o uso incorreto do RLOCK ou FLOCK, tudo em cima de um DBF e/ou CDX corrompido, pode fazer com que o PC2 esteja gravando coisa no registro que o PC1 criou...
Foi você quem desenvolveu o programa e/ou é iniciante em Clipper e programação?
A sua pergunta foi muito pouco específica e a resposta pode estar em muitos lugares, então vou listar algumas coisas, quem sabe ajuda.
1. Rede física – os PCs estão todos com o SO atualizado e com os drivers corretos (principalmente da placa de rede) e estão livres de vírus e/ou malwares? Você testou (com equipamento apropriado) os cabos de rede e os conectores?
2. Qual Clipper e linkador que você usa? A voz corrente é que a melhor parceria é o 52e com o Blinker 7.0.
3. Você usa a função OL_AutoYield (da OSLib) ou alguma similar? O Clipper, sem esta função, faz a CPU grudar nos 100% e tudo fica travado...
4. Se os passos anteriores estão cercados, como é a estrutura aí? Os EXEs e os DBFs ficam em um PC e os outros acessam via mapeamento? Você usa DBEdit? Faz uso do SEEK ou usa o LOCATE?
5. Qual RDD você usa, NTX ou CDX? O erro (gravar em duplicidade) só acontece numa rotina específica? Você sempre abre todos os índices junto com cada respectivo DBF? Você já tentou recriar os índices (pode ser índice corrompido). Também, pode ser DBF corrompido. Você já deu uma geral neles?
6. Você diz que usa o SET EXCLUSIVE OFF, mas ele sozinho não faz verão. Na hora de cada estação gravar alguma coisa em um DBF, você está bloqueando o DBF ou o registro com FLOCK ou RLOCK? Em rede, com DBF, tem que cuidar muito bem disso.
7. Se você usa o SEEK, dá uma conferida, pra saber se o que você procura, em cada situação, está de acordo com o índice criado anteriormente. Exemplo: um dos índices é por número de venda, campo numérico, aí na hora do SEEK você pede pra procurar um string alfanumérico... Nessa situação, o SEEK não acha o que deve e o REPLACE pode acabar acontecendo em registro indevido. Ainda, veja se o SET ORDER TO está apontando para o índice desejado, em cada caso.
8. Precisa ver a LÓGICA do seu programa: se os 3 terminais criam concomitantemente registros de venda, tem que ter um mecanismo pra evitar que as coisas se misturem. Sem controle (ou com controle falho), pode ser que um mesmo número de venda esteja sendo gerado em duplicidade (aqui entra o FLOCK e o RLOCK).
Bão, juntando um SEEK errado com um SET ORDER indevido, com o uso incorreto do RLOCK ou FLOCK, tudo em cima de um DBF e/ou CDX corrompido, pode fazer com que o PC2 esteja gravando coisa no registro que o PC1 criou...
Foi você quem desenvolveu o programa e/ou é iniciante em Clipper e programação?
-
Fernando Borges
- Usuário Nível 1

- Mensagens: 38
- Registrado em: 29 Set 2004 16:43
- Localização: Sacramento/MG
Sistema de Vendas em rede, muito lento.
Prezado Eolo, vou descrever abaixo as suas perguntas.
1- A rede física dos computadores, está perfeita. Já fizemos todos os testes de cabo, roteador, drivers dos computadores. Está tudo certo.
2- Estou usando o clipper 5.3 com RTLINK.
3- Não uso a função OL_AutoYield.
4- O executável e os arquivos DBFs estão todos no servidor e faço a execução nos terminais por atalho da rede. Ex.: F:\PROGRAMA\ESTOQ.EXE
5- Estou usando a indexação NTX. Sempre abro todos os índices junto com o DBF. Os arquivos DBF não estão corrompidos.
6- Não estou usando o FLOCK e RLOCK, para ser sincero, não sei como usa-los. Estou usando apenas o SET EXCLUSIVE OFF na abertura do sistema.
7- Uso o SEEK para buscar os dados de outro arquivo, porém já analisei e estão buscando pelo campo certo, no índice certo.
8- Estou anexando os fontes e DBFs do sistema para você dar uma analisada, se você puder.
Sou novato em programação. Não tenho muita experiência. Aprendi a criar as rotinas pelo MIRO e faço alguns ajustes manuais.
Agradeço a sua atenção.
Fernando Borges.
1- A rede física dos computadores, está perfeita. Já fizemos todos os testes de cabo, roteador, drivers dos computadores. Está tudo certo.
2- Estou usando o clipper 5.3 com RTLINK.
3- Não uso a função OL_AutoYield.
4- O executável e os arquivos DBFs estão todos no servidor e faço a execução nos terminais por atalho da rede. Ex.: F:\PROGRAMA\ESTOQ.EXE
5- Estou usando a indexação NTX. Sempre abro todos os índices junto com o DBF. Os arquivos DBF não estão corrompidos.
6- Não estou usando o FLOCK e RLOCK, para ser sincero, não sei como usa-los. Estou usando apenas o SET EXCLUSIVE OFF na abertura do sistema.
7- Uso o SEEK para buscar os dados de outro arquivo, porém já analisei e estão buscando pelo campo certo, no índice certo.
8- Estou anexando os fontes e DBFs do sistema para você dar uma analisada, se você puder.
Sou novato em programação. Não tenho muita experiência. Aprendi a criar as rotinas pelo MIRO e faço alguns ajustes manuais.
Agradeço a sua atenção.
Fernando Borges.
- Anexos
-
Sistema.rar- Sistema fonte e arquivos DBF.
- (1.41 MiB) Baixado 256 vezes
- Nascimento
- Usuário Nível 4

- Mensagens: 763
- Registrado em: 19 Jul 2008 12:11
- Localização: OLINDA-PE
Sistema de Vendas em rede, muito lento.
amigo rapidamente olhando seu fonte observei que tem o rlock() na
FUNCTION REGLOCK
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina
clipper 5.3 /harbour/minigui
Sistema de Vendas em rede, muito lento.
Vamos lá:
1. Pesquise aqui no Forum sobre o Blinker, tem ele pra baixar, como usar etc. Pra usar, não muda muito em relação ao RTLiink.
2. Idem sobre o Clipper 52e e o OL_AutoYield.
3. NTX. Mude pro CDX, é muito fácil mudar. Vale a pena. Tem muito material no Forum a respeito.
4. FLOCK e RLOCK. Se seu programa roda em rede e eles não estão presentes, pare tudo. Dê uma estudada no comando USE e nas funções FLOCK e RLOCK.
Enfim, você precisa dominar a coisa, entender o sofware, entender o que é a programação.
Não é só apresentar seus fontes e esperar que eu ou alguém do Forum faça as alterações e resolva o seu problema. Você TEM que aprender.
Acesse o Help do Clipper, estude comando por comando, função por função, etc por etc.
E crie dúvidas, dúvidas pontuais. Aí o Forum pode lhe ajudar.
1. Pesquise aqui no Forum sobre o Blinker, tem ele pra baixar, como usar etc. Pra usar, não muda muito em relação ao RTLiink.
2. Idem sobre o Clipper 52e e o OL_AutoYield.
3. NTX. Mude pro CDX, é muito fácil mudar. Vale a pena. Tem muito material no Forum a respeito.
4. FLOCK e RLOCK. Se seu programa roda em rede e eles não estão presentes, pare tudo. Dê uma estudada no comando USE e nas funções FLOCK e RLOCK.
Enfim, você precisa dominar a coisa, entender o sofware, entender o que é a programação.
Não é só apresentar seus fontes e esperar que eu ou alguém do Forum faça as alterações e resolva o seu problema. Você TEM que aprender.
Acesse o Help do Clipper, estude comando por comando, função por função, etc por etc.
E crie dúvidas, dúvidas pontuais. Aí o Forum pode lhe ajudar.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Sistema de Vendas em rede, muito lento.
Só resumindo tudo isso:
O programa não faz nada sozinho sobre não duplicar, vai ter que criar rotinas pra isso.
RLock() e FLock() são justamente as rotinas que impedem que um terminal faça determinada alteração enquanto outro está fazendo.
Suas rotinas precisam fazer uso delas, junto com algumas rotinas adicionais.
E sobre o sistema lento, que foi a pergunta do tópico...
Nem dá pra saber, porque por enquanto o aplicativo nem foi feito pra ser usado em rede.
Ou melhor.... não foi feito pra ser usado por mais de um terminal ao mesmo tempo. (consultas ok, alteração/inclusão/exclusão não).
O programa não faz nada sozinho sobre não duplicar, vai ter que criar rotinas pra isso.
RLock() e FLock() são justamente as rotinas que impedem que um terminal faça determinada alteração enquanto outro está fazendo.
Suas rotinas precisam fazer uso delas, junto com algumas rotinas adicionais.
E sobre o sistema lento, que foi a pergunta do tópico...
Nem dá pra saber, porque por enquanto o aplicativo nem foi feito pra ser usado em rede.
Ou melhor.... não foi feito pra ser usado por mais de um terminal ao mesmo tempo. (consultas ok, alteração/inclusão/exclusão não).
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Sistema de Vendas em rede, muito lento.
Olá Pessoal,
Apenas algumas colocações adicionais sobre esse assunto:
1 - Quanto a duplicação de registros:
Essa anomalia normalmente ocorre quando o processador da máquina que está gravando os dados (pode ser o terminal ou servidor) está trabalhando super aquecido, então como primeira providência sugiro verificar se as máquinas estão em local arejado, e sem incidência de sol, bem como, verificar o funcionamento dos coolers e se os respiradores estão desobstruídos.
2 - Quanto a lentidão da rede:
Penso que essa questão será resolvida procurando o problema no hardware, não no software (levando em conta o problema que foi apresentado). Tive esse problema algumas vezes, e não foram muitas, mas todas e sem exceção, só voltou a normalidade e com o mesmo aplicativo, após interferência técnica no hardware, inclusive reinstalação de sistema operacional, passando por atualização de drive da placa de rede, e já houve caso, que foi necessário a troca de uma das placas, percebido que após a máquina "x" ser conectada a rede ficava lenta.
Apenas algumas colocações adicionais sobre esse assunto:
1 - Quanto a duplicação de registros:
Essa anomalia normalmente ocorre quando o processador da máquina que está gravando os dados (pode ser o terminal ou servidor) está trabalhando super aquecido, então como primeira providência sugiro verificar se as máquinas estão em local arejado, e sem incidência de sol, bem como, verificar o funcionamento dos coolers e se os respiradores estão desobstruídos.
2 - Quanto a lentidão da rede:
Penso que essa questão será resolvida procurando o problema no hardware, não no software (levando em conta o problema que foi apresentado). Tive esse problema algumas vezes, e não foram muitas, mas todas e sem exceção, só voltou a normalidade e com o mesmo aplicativo, após interferência técnica no hardware, inclusive reinstalação de sistema operacional, passando por atualização de drive da placa de rede, e já houve caso, que foi necessário a troca de uma das placas, percebido que após a máquina "x" ser conectada a rede ficava lenta.
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)
