relatórios em rede
Moderador: Moderadores
-
PITERGALDIANO
- Usuário Nível 2

- Mensagens: 91
- Registrado em: 28 Nov 2003 08:48
relatórios em rede
como gerar relatórios em rede sem que uma estação interfira em outra?
Piter Galdiano
Programador Clipper
Programador Clipper
-
Dudu_XBase
- Membro Master

- Mensagens: 1071
- Registrado em: 25 Ago 2003 16:55
Bom eu gero relatórios em rede e nunca tive problemas com interferência entre as estações.
Dependendo do Relatório Crio Dbfs temporário qdo a estação possui Hd gero ele no disco local pra não sobrecarregar a rede tipo no dir C:\TEMP.
Que Tipo de interferência ocorre ??
Dependendo do Relatório Crio Dbfs temporário qdo a estação possui Hd gero ele no disco local pra não sobrecarregar a rede tipo no dir C:\TEMP.
Que Tipo de interferência ocorre ??
________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle
-
gransoft
- Usuário Nível 3

- Mensagens: 321
- Registrado em: 06 Jul 2004 17:48
- Localização: UBERLÂNDIA-MG
- Contato:
Relatórios c/arquivos compartilhados
ARAGUARI-MG, 2 de agosto de 2004.
Prezados Srs.,
Em programação para Rede Local, alguns programadores acessam um registro para alteração e imediatamente o bloqueiam com a função RLOCK(), quando isso deveria ser feito APENAS ao tentar regravar os novos dados. Exemplo:
A sugestão acima é mais viável do que bloquear o registro e ficar horas para concluir a alteração, impedindo consultas e até mesmo relatórios.
Atenciosamente,
Janis Peters Grants.
http://www.gransoft.com.br
gransoft@zipmail.com.br
Prezados Srs.,
Em programação para Rede Local, alguns programadores acessam um registro para alteração e imediatamente o bloqueiam com a função RLOCK(), quando isso deveria ser feito APENAS ao tentar regravar os novos dados. Exemplo:
Código: Selecionar todos
STATIC PROCEDURE CorReg()
LOCAL xcTela := SAVESCREEN(01,00,23,79)
*
TelaOp()
HoraData()
Funcao(3)
*
MostraVarMem()
*
cCorreto := "N"
WHILE (cCorreto <> "S")
WHILE .T.
HoraData()
SETCOLOR(cCor3)
Centro(24,"*** DIGITE O CODIGO DA OPERACAO ***")
SET CURSOR ON
cCo := cCodOp
SETCOLOR(cCor2)
@ 12,14 GET cCo PICTURE '@R 9.99'
READ
SET CURSOR OFF
IF EMPTY(cCo)
RETURN
END
*
IF LEN(ALLTRIM(cCo)) <> 3 && 9.99
LOOP
END
*
IF (cCo <> cCodOp)
SELECT OPERACAO
SET ORDER TO 1
GOTO TOP
SEEK CD(cCo)
IF FOUND()
Beep(1)
SETCOLOR(cCor5)
Mensagem("*** CODIGO DA OPERACAO EXISTENTE ***")
SETCOLOR(cCor2)
cCo := SPACE(03)
LOOP
END
END
cCodOp := cCo
@ 12,14 SAY cCodOp PICTURE '@R 9.99'
EXIT
END && WHILE .T.
*
WHILE .T.
HoraData()
SETCOLOR(cCor3)
Centro(24,"*** DIGITE A OPERACAO ***")
SET CURSOR ON
cO := cOperacao
SETCOLOR(cCor2)
@ 12,20 GET cO PICTURE '@!'
READ
SET CURSOR OFF
IF EMPTY(cO)
RETURN
END
*
cO := ALLTRIM(cO)
nTamOp := LEN(cO)
*
IF SUBSTR(cCodOp,2,2) == "00"
IF nTamOp<40
cO := cO + REPLICATE("-",40-nTamOp)
END
ELSEIF SUBSTR(cCodOp,2,2) <> "00"
IF nTamOp<40
cO := cO + REPLICATE(".",40-nTamOp)
END
END && SUBSTR(cCodOp,2,2) == "00"
*
@ 12,20 SAY cO PICTURE '@!'
*
IF (cO <> cOperacao)
SELECT OPERACAO
SET ORDER TO 2
GOTO TOP
SEEK CD(cO)
IF FOUND()
Beep(1)
SETCOLOR(cCor5)
Mensagem("*** OPERACAO EXISTENTE ***")
SETCOLOR(cCor2)
cO := SPACE(40)
LOOP
END
END
cOperacao := cO
@ 12,20 SAY cOperacao PICTURE '@!'
EXIT
END && WHILE .T.
*
IF SUBSTR(cCodOp,2,2) == "00" && 1.00, 2.00, 3.00 ...
cEntSai := "-"
ELSEIF SUBSTR(cCodOP,2,2) <> "00" && 1.01, 2.01, 3.01 ...
HoraData()
SETCOLOR(cCor3)
Centro(24,"*** DIGITE: 'E' ENTRADA 'S' SAIDA ***")
SETCOLOR(cCor2)
SET CURSOR ON
@ 12,63 GET cEntSai PICTURE '!' VALID(cEntSai $ "ES")
READ
SET CURSOR OFF
END && IF SUBSTR(cCodOp,2,2) == "00" && 1.00, 2.00, 3.00 ...
*
CLEAR GETS
*
MostraVarMem()
*
HoraData()
SETCOLOR(cCor3)
Centro(24,"DADOS CORRETOS (S/N)? ")
SET CURSOR ON
SETCOLOR(cCor2)
Confirma(24,COL(),@cCorreto)
SET CURSOR OFF
SETCOLOR(cCor0)
*
END && cCorreto
*
WHILE .T.
*
HoraData()
SETCOLOR(cCor4)
Centro(24,"A G U A R D E . . .")
SETCOLOR(cCor0)
*
SELECT OPERACAO
SET ORDER TO 0
GOTO nRegistro
IF Trava_Reg(10)
*
GravaVarArq()
*
COMMIT
UNLOCK && CANCELA BLOQUEIO
*
ELSE
Beep(1)
SETCOLOR(cCor5)
Mensagem("*** NAO FOI POSSIVEL A CORRECAO DESTE REGISTRO ***")
SETCOLOR(cCor0)
HoraData()
cTentar := SPACE(01)
SETCOLOR(cCor3)
Centro(24,"DESEJA TENTAR CORRIGIR ESTE REGISTRO NOVAMENTE (S/N)? ")
SET CURSOR ON
SETCOLOR(cCor2)
Confirma(24,COL(),@cTentar)
SET CURSOR OFF
SETCOLOR(cCor0)
IF cTentar == "S"
LOOP
END
END
EXIT
END && WHILE .T.
*
RESTSCREEN(01,00,23,79,xcTela)
RETURN
***
Código: Selecionar todos
FUNCTION Trava_Reg(nTentativa)
LOCAL lSempre
IF RLOCK()
RETURN (.T.) && TRAVADO ...
END
lSempre := (nTentativa == 0)
WHILE (lSempre .OR. nTentativa > 0) && .AND. INKEY() <> 27
IF RLOCK()
RETURN (.T.) && TRAVADO ...
END
INKEY(.5) && TENTATIVAS 1/2 SEGUNDO ...
nTentativa := nTentativa - .5
END
RETURN (.F.) && NAO TRAVADO ...
***
Atenciosamente,
Janis Peters Grants.
http://www.gransoft.com.br
gransoft@zipmail.com.br