Página 2 de 3

Enviado: 31 Jul 2007 20:40
por Pablo César
sygecom escreveu:acho que o colega jah tem bastante opção...é só ele ver o que melhor serve...para a situação dele !!!
Take easy boy ! Eu sou estou expondo a minha forma de trabalhar e quem sabe isso possa servir de exmplo para alguém. Sabendo que o colega está começando a entender toda essa questão de ambiente de rede, acho que é bom que ele tenha bons exemplos. Você mencionou os casos que podem ocorrer e isso é bom tomar em conta. Aqui não se trata de limitar a ninguém. Tudo é opção de cada um, certo colega ?.

Enviado: 31 Jul 2007 20:58
por sygecom
Certo...

Enviado: 31 Jul 2007 21:21
por Eolo
...dezenas de executáveis...
Putz, imagina por ex rodar o Windows através de dezenas de executáveis?

Enviado: 31 Jul 2007 21:33
por Pablo César
Pior que funciona sem problemas algum, você disse rodandoem rede ?. Mas considere que nem todos ficam mudando de opção em opção do sistema. Mas de todas formas, eu penso sempre nessa sua idéia (mesmo eu com dezenas de executáveis. Só que você não me respondeu, vale a pena ? è considerável o ganho ?

Enviado: 31 Jul 2007 21:37
por Maligno
Putz, imagina por ex rodar o Windows através de dezenas de executáveis?
Mas o Windows usa centenas de executáveis.

Enviado: 31 Jul 2007 22:05
por Eolo
Putz, me expressei "mal" (entre caspas). Que o Win use centenas de executáveis, pode até fazer sentido, afinal...

Agora, uma aplicação pequena (pequena em relação ao Windows), comum, cuidando de algumas dúzias de DBFs, precisa mesmo ter centenas de executáveis?

Aliás, taí um bom NOVO TÓPICO... O que é e como deve ser um Exe um "E" maiúsculo?

Enviado: 31 Jul 2007 22:15
por Maligno
Ah, sim. Agora entendi. :)))
Bom, um aplicativo Windows pode sim ter centenas ou milhares de executáveis. Conheço uma empresa daqui de Londrina que tem um sistema completo de contabilidade feito em Visual COBOL, que tem mais de 4000 executáveis. Toda a instalação come uns 500MB de disco.

Agora, programa Clipper mesmo nunca vi nada com mais do que algumas dúzias de executáveis. Talvez tenha maiores. Eu só uso um.

Acho boa idéia abrir um tópico pra se discutir isso.

Enviado: 01 Ago 2007 00:14
por ERCS123
Olá pessoal!

Todo mundo deu sua opnião....muito obrigado mesmo......mas tenho pouca experiencia, e não sei qual escolher. Achei interessante em usar time() ou fazer um arquivo temporario em cada terminal, enfim, no meu caso em que a rede vai ter no maximo 5 micros, o que seria mais facil para implantação? (se nao for pedir muito, se possivel indicar no meu codigo fonte, onde seria as alterações. Porque senão, não vou conseguir colocar em pratica, os exemplos de voces)

Boa noite!

Ewerton

Enviado: 01 Ago 2007 07:57
por Pablo César
Você prefere a forma mais rápida e prática ou a forma mais elaborada e completa ? Tudo depende de você Ewerton. Está bem que saimos um pouquinho... hihi do assunto mas a intenção não era de embrulhar algo e dizer isto é o melhor, quem decide como trabalhar é o dono do sistema. Aqui realmente surgem muitas idéias (está cheio de cabeças pensantes) e você pode contar conosco, há vezes surgem polêmicas e isso é normal.

Enviado: 01 Ago 2007 10:21
por ERCS123
Pablo, quando puder, conferir para mim as alterações. Eu escolhi, fazer um arquivo temp na maquina de cada usuario, dentro de uma pasta chamada SISTEMA.


EWERTON


[/code]



ANTES

erase arqtemp.dbf
copy to arqtemp.dbf for co1 >= m_cod1 .AND. co1 <= m_cod2
use arqtemp alias temp new

DEPOIS

ERASE C:\SISTEMA\ARQTEMP.DBF
COPY C:\SISTEMA\ARQTEMP.DBF FOR co1 >= m_cod1 .AND. co1 <= cod2
USE ARQTEMP ALIAS TEMP SHAR // deve colocar SHAR ou pode deixar como NEW ?


ANTES

if (LastRec() == 0)
mens("Vendedor nao Cadastrado!")
tone(900, 9)
InKey(6)
erase arqtemp.dbf
close databases
return
endif


DEPOIS:


if (LastRec() == 0)
mens("Vendedor nao Cadastrado!")
tone(900, 9)
InKey(6)
erase C:\SISTEMA\ARQTEMP.DBF
close databases
return
endif


confirma("Relatorio","Clientes")
cresp:= Space(1)
@ 23, 78 get Cresp picture "@!" valid cresp $ "SN"
read

ETC
ETC
ETC

Enviado: 01 Ago 2007 10:35
por Pablo César
ERCS123 escreveu:Eu escolhi, fazer um arquivo temp na maquina de cada usuario na pasta chamada SISTEMA.
Perfecto !.

O comando COPY <campo1, campo2...> TO não estaria sobreescrevendo o arquivo ARQTEMP.DBF ? Ou ele appenda, você sabe dizer isso ?. Se for o COPY não for appendar então não haveria necessidade de deletar o ARQTEMP.DBF.

Caso que tenha que deletá-lo, eu sempre verifico se existe (para que não dê erro), então ficaria:

Código: Selecionar todos

IF FILE("C:\SISTEMA\ARQTEMP.DBF")
    DELETE FILE("C:\SISTEMA\ARQTEMP.DBF")
ENDIF
COPY FIELDS <ponha aqui os nomes dos campos apenas necessários> TO C:\SISTEMA\ARQTEMP.DBF FOR co1 >= m_cod1 .AND. co1 <= cod2 
USE ARQTEMP ALIAS TEMP NEW   /*  Aqui como você mesmo percebeu, não precisa ser compartilhado. */
O resto do seu código está normal. Viu, foi fácil, não é ?

Enviado: 01 Ago 2007 10:42
por Pablo César
Caro Ewerton,

Não há necessidade de deletar o temporário, pois o COPY TO sobre-escreve o arquivo. então podem serem removidas as linhas:

Código: Selecionar todos

IF FILE("C:\SISTEMA\ARQTEMP.DBF") 
    DELETE FILE("C:\SISTEMA\ARQTEMP.DBF") 
ENDIF


No seu exemplo estava faltando o "TO" na linha onde você executa o comando "COPY". E os nomes dos campos após o FILEDS devem serem passados separados com vírgula (isto fica mais exuto seu arquivo TEMP.

Enviado: 01 Ago 2007 11:08
por Pablo César
Tem mais uma dica que se quiser levar em conta Ewerton.

Normalmente eu Utilizo um arquivo .BAT para chamar a minha aplicação/Clipper. A utilização desse arquivo .BAT me permite que possa inserir comandos de rede como por exemplo NET USE LPT1 \\PC1\EPSON (que serve para capturar a impressora compartilha em rede). Considerando que você está numa estação e o seu mapeamento de rede para o servidor seja a unidade "F:" então básicamente seu arquivo .BAT irá ficar assim:

Arquivo: sis.bat

Código: Selecionar todos

@ECHO OFF
NET USE F: \\SERVIDOR\C
NET USE LPT2 \\SERVIDOR\EPSON
F:
CD\SISTEMA
SISTEMA.EXE
Veja nas linhas onde tem NET USE, estas podem ser opcionais. Não sei qual é a versão do seus Windows e nem sei se você mapea tudo direitinho. Mas é que em WIN98, normalmente o mapeamentos e captura (as vezes são perdidos). E é bom assegurar-se que esteja mapeados e capturadas as impressoras. Dei este exemplo para que sirva de base para você.

Enviado: 01 Ago 2007 20:37
por ERCS123
Olá Pablo, boa noite!

Código: Selecionar todos

O comando COPY <campo1, campo2...> TO não estaria sobreescrevendo o arquivo ARQTEMP.DBF ? Ou ele appenda, você sabe dizer isso ?. Se for o COPY não for appendar então não haveria necessidade de deletar o ARQTEMP.DBF. 
Não sei te dizer ao certo. Esse relatorio filtra os clientes pelo codigo inicial e codigo final. Assim o resultado da busca, é criado um dbf temporario, que em seguida será imprimido. Se imprimir um outro relatorio, mas com informacoes diferentes, esse comando COPY ele grava por cima ? por isso voce disse que nao precisa apagar?


Código: Selecionar todos

@ECHO OFF 
NET USE F: \\SERVIDOR\C 
NET USE LPT2 \\SERVIDOR\EPSON 
F: 
CD\SISTEMA 
SISTEMA.EXE
Esse .bat ( net use LPT2 \\ SERVIDOR\EPSON) é para garantir o mapeamento, caso o WIN98 perder? Nessa rede que vou montar, vai ser tudo XP, o .bat pode ser o mesmo do seu exemplo?


Aproveitando da sua boa vontade, o comando ZAP, quando eu for usar, eu posso aproveitar aquela funcao que voce me ensinou

[/code]
use clientes exclusive new
if neterre()
mensagem de alerta
return
endif
zap
dbunlock()

Código: Selecionar todos



Obrigado!

Ewerton

Enviado: 01 Ago 2007 21:53
por Pablo César
Boa noite, Ewerton !
ERCS123 escreveu:Se imprimir um outro relatorio, mas com informacoes diferentes, esse comando COPY ele grava por cima ?
Com certeza, vai ser sobre-escrito.
ERCS123 escreveu:Nessa rede que vou montar, vai ser tudo XP, o .bat pode ser o mesmo do seu exemplo?
Sim pode.

/* feche a área CLIENTES se o arquivo ja estiver aberto
use clientes exclusive
if neterr()
mensagem de alerta
return
endif
zap
// dbunlock() Este comando não é necessário pois você está abrindo em modo exclusivo. Neste momento ninguém mais pode acessar o arquivo CLIENTES.

Mas me diga uma coisa, por quê você iria precisar ZAPear seu arquivo de clientes ?. Como eu falei tente evitar de todas formas utilizar o ZAP em rede.