relatórios em rede

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

PITERGALDIANO
Usuário Nível 2
Usuário Nível 2
Mensagens: 91
Registrado em: 28 Nov 2003 08:48

relatórios em rede

Mensagem por PITERGALDIANO »

como gerar relatórios em rede sem que uma estação interfira em outra?
Piter Galdiano
Programador Clipper
Dudu_XBase
Membro Master
Membro Master
Mensagens: 1071
Registrado em: 25 Ago 2003 16:55

Mensagem por Dudu_XBase »

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 ??


________________________________________________________________________________________________________
(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
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

Mensagem por gransoft »

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:

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 ...
***
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
Responder