duvida de uso em arquivos abertos com shared

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

tonyx
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Jul 2004 15:26

duvida de uso em arquivos abertos com shared

Mensagem por tonyx »

tenho sistema contabil compartilhado mais de 30 arquivos;
quando um usuario entra ativa todos os arquivos ficando aberto, e proximo usa tambem, so se fecha quando o sistema procura se na tem nenhum usuario no sistema, no arquivo de ARQ_REDE do sistema:

estaria certo este procedimento,
mesmo sem o usuario nao usar todos os arquivos,
mas tem que estar aberto porque e um sistema compartilhado entre varios

agradeco ajuda neste pensamentos
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

Eu trabalho com dois métodos:
- Abrindo todos os arquivos necessários no inicio do sistema e só fechando-os na saída do sistema.
- Abrindo somente os necessários (globais) no inicio e cada módulo abre e fecha os que tiverem necessidades para ele (locais)
Ex. Controle de acesso é global, então é aberto durante toda a execução do sistema. Cadastro de fornecedor é local, então só é aberto nos módulos que vão utiliza-lo.

O primeiro é mais rápido para trabalhar com o sistema, pois os arquivos já estão abertos quando o sistema entra em um módulo. Mas é perigoso, pois todos os arquivos estão abertos e em uma rede instável, pode provocar muitos problemas nos arquivos.

A segunda é mais lenta, mas é mais segura. Os arquivos só estão abertos quando necessário. O sistema fica abrindo e fechando os arquivos conforme vc navega pelo sistema. Esse trabalho de abrir e fechar arquivo provoca lentidão na entrada dos módulos, mas vc garante que os dados foram gravados quando fechou os arquivos. Isso diminuiu muito o meu problema com corrupção de índices em determinados usuários.

Boa sorte. Espero ter ajudado.
"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}
Dércio_Luiz_Zanatta
Usuário Nível 3
Usuário Nível 3
Mensagens: 153
Registrado em: 11 Jan 2006 15:37
Localização: Ibirubá - RS

Mensagem por Dércio_Luiz_Zanatta »

Cara.... Equeçe esta idéia de abrir os arquivos no inicio do sistema e deixa-los abertos... Isso é procurar "sarna para se coçar"... Faça como o colega comentou ai em cima.. Abra no inicio de cada programa e fecha na saida deste programa.. é muito mais seguro..
Um grande abraço e feliz ano novo..
tonyx
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Jul 2004 15:26

resp

Mensagem por tonyx »

pois bem a dica e abrir na rotina1e usar banco1,banco2,banco3 fechar ao sair.. pois bem
e se outro usuario entrar na rotina2 e usar banco2 ao incluir estiver fechado pelo usuario 1, como fica esta questao
---- seria fericar que verificar na inclusao ou exclusao se esta aberto o banco2
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

Acho que temos um problema de comunicação.
Vamos procurar resolver a comunicação. Explique melhor como vc montou essa parte do sistema.

O sistema1 abre os arquivos para ele. O sistema2 abre os arquivos para ele mesmo (sistema2).

O fato do arquivo estar fechado pelo usuário1 quando o usuário2 for trabalhar nele não influencia nada.
"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}
tonyx
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Jul 2004 15:26

resp

Mensagem por tonyx »

e um sistema contabil compartilhado com varios dbf´s e varias rotinas.
a questao e uso de varios arquivos abertos, e temos varios usuarios.

pois bem foi dada a solucao de ao terminar uma rotina1 tenha que fechar os dbf´s usados nesta rotina.
ex; razao usa dbf = contas, balancet, custos

mas ao mesmo temo no usuario 2: na rotina diario usa-se os mesmos arquivos.

--- pois o usuario1 ao terminar a rotina 1 vai fechar os arquivos
mas o usuario2 ta la usando os arquivos
na hora de incluir,alterar, excluir : vai ter que estar aberto

=== na questao do uso de varios dbf´s abertos em sistema grande
pode causar danos ao auqui ou indice ou ma instabilidade de rede,

==== solucao seria o fechamento apos usalos, mas na questao de ter
varios usuarios usando este arquivos em rotinas separadas
como ficaria na inclusao teria que ser verificado toda hora se esta aberto o tal arquivo

==== ou se engano tal fechamento nao alteraria para os outros usuarios ????

:f
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

Vamos ver se conversamos a mesma linguagem. (tenho dificuldade nisso)

Imagine um controle de vendas: produtos, clientes, mov estoque, fornecedores, contas à receber (e outros arquivos)

Na estação1, o usuario1 abre os arquivos para uma consulta em contas à receber. Serão abertos os arquivos de clientes e contas a receber.
Na estação2, o usuário2 abre os arquivos para verificar uma entrada de peças. Serão abertos os arquivos de produtos, mov estoque e fornecedores.
Na estação3, o usuário3 abre o arquivo para consultar um produto no estoque. Será aberto o arquivo de produtos.

Como os arquivos estão compartilhados, o fato do usuário2 e usuário3 estarem com o arquivo aberto ao mesmo tempo não os impedem de trabalharem. O usuário3 fechar o arquivo de produtos não significa nada para o usuário2, que continua trabalhando normalmente.
Assim como o usuário1 fechar os arquivos não afetará os outros usuários.

O que afeta um para os outros é o bloqueio de registro ou arquivo.
Se vc bloqueou um arquivo, outros usuários não poderão abri-lo.
Se vc bloqueou um registro, outros usuários poderão lê-lo, mas não alterar seu conteúdo.

Tvz seja esse o motivo da sua postagem.
Ah! Pelo menos é isso que estou entendendo que vc esta com dificuldade. Se estou errado, tente explicar algo que me permita entender. tks.
"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}
Glauco Cruz Costa
Usuário Nível 3
Usuário Nível 3
Mensagens: 102
Registrado em: 15 Dez 2005 22:02
Localização: Brasília/DF
Contato:

Resposta

Mensagem por Glauco Cruz Costa »

É isso aí mesmo dos colegas de cima.
Ajuda bastante abrir e fechar os arquivos somente quando for lê-los, ou gravá-los, e sempre no início e no fim da abertura. Não precisa nem ser no início da função ou procedure.
O fato de um usuário fechar ou abrir um arquivo não influencia em nada. Isso só ocorre para cada um. Ex: Um usuário abriu um arq. contas.dbf. Minutos depois, eu também o abri em outro terminal. Ápós, ele o fecha. Mas, não influencia em nada para mim. Continuo com ele aberto no meu terminal. E se ele entrar de novo e eu fechar, também não atrapalha ele em nada.
Abrir os arquivos no início dos programas, entre outras coisas, faz o sistema ficar lento para os terminais. Eu percebi isso num sistema no meu trabalho e tratei de modificá-lo para abrir e fechar somente quando precisar ou não. Deu um trabalhão, mas valeu.
Em síntese, quando eu abro um arquivo, abro-o para mim, apenas. Quando eu fecho um arquivo, fecho-o para mim, apenas.
Ah! E o fato de estar compartilhado (shared) significa apenas que vários usuários podem acessá-lo ao mesmo tempo. Somente isso. O abrir e fechar será independente para cada usuário em cada terminal.
Espero que tenha contribuído.
Responder