Talvez alguem possa me ajudar....

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Marcio Antonio Ril
Usuário Nível 1
Usuário Nível 1
Mensagens: 42
Registrado em: 13 Set 2005 11:55

Talvez alguem possa me ajudar....

Mensagem por Marcio Antonio Ril »

Caros amigos,

Como já disse em outros questionamentos, sou iniciante em clipper, e a algum tempo desenvolvi uma aplicação para um amigo e este estava usando até esses dias, porém me pediu para adaptar o sistema para funcionar em rede, entaum disse a ele que naum sabia como fazer, mais que tentaria.
Começei procurando sobre o assunto e encontrei muita ajudar aqui no forum. Mais mesmo assim ainda esta sendo muito complicado, pois me deparo com muitos problemas e me bato muito por vezes naum consigo resolver. Estou tendo muito problema com lentidão na hora da impressão, lentidão e travamento em algumas rotinas quando acessas pela rede, coisinhas assim.
Mais vamos aos finalmente, gostaria que alguem do forum desse uma olhadinha em umas rotinas minhas para me auxiliar e quem sabe talves sugerir algumas modificações para resolver esses problemas...


Será que alguem se habilita, posso mandar os fontes.

Obrigado galera,

Marcio Ril
josenilson
Usuário Nível 1
Usuário Nível 1
Mensagens: 46
Registrado em: 14 Set 2004 10:58

Mensagem por josenilson »

Prezado Marcos,

Acredito que todos desta comunidade estão dispostos a te ajudar, assim como temos nos ajudado uns aos outros. Seria interessante se vc continuasse a postar aqui as suas dúvidas e partes de seus fontes, se necessário, para que possa receber ajuda não só de um, mas de muitos feras que participam neste fórum.

:xau
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Mensagem por vagucs »

Veja no meu site, no final da primeira pagina, tem um pequeno tutorial que fiz ensinando os macetes para colocar o sistema em rede.
Sem mais
Wagner Nunes
www.vagucs.com.br
Marcio Antonio Ril
Usuário Nível 1
Usuário Nível 1
Mensagens: 42
Registrado em: 13 Set 2005 11:55

Amigo Vagucs

Mensagem por Marcio Antonio Ril »

Peguei a sua pagina o tutorial ensinando os macetes de para colocar um programa em rede, segui as suas dicas e modifiquei uma rotina simples de cadastro de vendedor, porém quando faço uma alteração aparece a mensagem abaixo:

r_lock(0) unrecoverable error 650: processor stack fault.

Segue abaixo a rotina para o amigo analisar....

Marcio Ril

Código: Selecionar todos

* PROGRAMA   : VENDEDOR.PRG
* COMENTARIO : CADASTRO DE VENDEDORES

IF !FILE("INDVE1.IDX")
   SELECT 3
   USE VENDEDOR SHARED NEW ALIAS VENDEDOR
   INDEX ON COD_VEN  TO INDVE1
   INDEX ON NOME_VEN TO INDVE2
   SET INDEX TO INDVE1, INDVE2
ELSE
   SELECT 3
   USE VENDEDOR SHARED NEW ALIAS VENDEDOR
   SET INDEX TO INDVE1, INDVE2
ENDIF

SET DELETED ON
DO WHILE .T.
                 
         MENSAGEM("Tecle <ESC> para retornar")

         WCOD_VEN     := 0
         WNOME_VEN    := SPACE(15)
         WDTCAD_VEN   := DATAATU
         WCONF        :="S"
         
         JANELA(03,03,13,76,"Cadastro de Vendedores")
         COR("MENU")
         
         @ 06,05 SAY "Cod. Vendedor.:"
         @ 08,05 SAY "Nome Vendedor.:"
         @ 10,05 SAY "Dt.Cadastro...:"

         JANELA(03,63,10,76," MENU ")

         COR("MENU")

         @ 05,65  PROMPT " Inclusao  "  
         @ 06,65  PROMPT " Alteracao "
         @ 07,65  PROMPT " Consulta  "
         @ 08,65  PROMPT " Delecao   "

         MENU TO OP

         IF LASTKEY() = 27 
            VENDEDOR->(DBCLOSEAREA())
            EXIT
            CLS
         ENDIF

         DO CASE
            CASE OP=1
              DO WHILE .T.
                 MENSAGEM("Tecle <ESC> para retornar")

                 WCOD_VEN     := 0
                 WNOME_VEN    := SPACE(15)
                 WDTCAD_VEN   := DATAATU
                 WCONF        :="S"
         
                 JANELA(03,03,13,76,"Cadastro de Vendedores")
                 COR("MENU")
                 
                 @ 06,05 SAY "Cod. Vendedor.:"
                 @ 08,05 SAY "Nome Vendedor.:"
                 @ 10,05 SAY "Dt.Cadastro...:"

                 SELE VENDEDOR
                 SET ORDER TO 1
                 GO BOTTOM
                 WCOD_VEN  := COD_VEN + 1

                 @ 06,21 GET WCOD_VEN VALID (WCOD_VEN>0) PICT "99"
                 READ

                 IF LASTKEY() = 27 
                    EXIT
                    CLS
                 ENDIF

                 SEEK WCOD_VEN      
                 IF FOUND()
                    WCOD_VEN    := COD_VEN 
                    WNOME_VEN   := NOME_VEN

                    @ 08,21 SAY WNOME_VEN PICT "@!"
                    @ 10,21 SAY WDTCAD_VEN PICT "@D" 
                    BEEP()
                    MENSAGEM("Vendedor j  Cadastrado",2)
                    LOOP
                
                 ELSE
                            
                    @ 08,21 GET WNOME_VEN PICT "@!"
                    @ 10,21 GET WDTCAD_VEN PICT "@D" 
                    READ

                    IF WNOME_VEN = SPACE(30)
                       EXIT
                       CLS
                    ENDIF

                    MENSAGEM("Confirma (S/N):")
                    @ 24,48 GET WCONF PICT "@!" VALID WCONF $ "SN"
                    READ

                    IF WCONF = "S"
                       SELE VENDEDOR
                       SET ORDER TO 1
                       SEEK WCOD_VEN
                       IF! FOUND()
                          IF! FOUND()
                             APPEND BLANK             
                          ENDIF
                          REPLACE COD_VEN     WITH WCOD_VEN 
                          REPLACE NOME_VEN    WITH WNOME_VEN
                          REPLACE DTCAD_VEN   WITH WDTCAD_VEN
                          U_LOCK()
                       ELSE
                          GO BOTTOM
                          WCOD_VEN  := COD_VEN + 1
                          IF! FOUND()
                              APPEND BLANK             
                          ENDIF
                          REPLACE COD_VEN     WITH WCOD_VEN 
                          REPLACE NOME_VEN    WITH WNOME_VEN
                          REPLACE DTCAD_VEN   WITH WDTCAD_VEN
                          U_LOCK()
                       ENDIF
                    ELSE
                       MENSAGEM("InclusÆo nÆo Efetuada",1)
                       LOOP
                    ENDIF
                 ENDIF
              ENDDO

            CASE OP=2
              DO WHILE .T.
                 MENSAGEM("Tecle <ESC> para retornar")

                 WCOD_VEN     := 0
                 WNOME_VEN    := SPACE(15)
                 WDTCAD_VEN   := DATAATU
                 WCONF        :="S"
         
                 JANELA(03,03,13,76,"Altera Cadastro de Vendedores")
                 COR("MENU")
                 
                 @ 06,05 SAY "Cod. Vendedor.:"
                 @ 08,05 SAY "Nome Vendedor.:"
                 @ 10,05 SAY "Dt.Cadastro...:"

                 SELE VENDEDOR
                 SET ORDER TO 2
                 @ 06,21 GET WCOD_VEN VALID (WCOD_VEN>0) PICT "99"
                 READ

                 IF LASTKEY() = 27 
                    EXIT
                    CLS
                 ENDIF

                 SEEK WCOD_VEN
                 IF FOUND()
                    WCOD_VEN    := COD_VEN 
                    WNOME_VEN   := NOME_VEN

                    @ 08,21 SAY WNOME_VEN PICT "@!"
                    @ 10,21 SAY WDTCAD_VEN PICT "@D" 

                    @ 08,21 GET WNOME_VEN PICT "@!"
                    READ

                    MENSAGEM("Confirma (S/N):")
                    @ 24,48 GET WCONF PICT "@!" VALID WCONF $ "SN"
                    READ

                    IF WCONF = "S"
                       SELE VENDEDOR
                       SET ORDER TO 1
                       IF! FOUND()
                           APPEND BLANK             
                       ENDIF
                       R_LOCK()
                       REPLACE COD_VEN     WITH WCOD_VEN
                       REPLACE NOME_VEN    WITH WNOME_VEN
                       U_LOCK()
                    ELSE
                       MENSAGEM("InclusÆo nÆo Efetuada",1)
                       LOOP
                    ENDIF

                 ELSE

                    BEEP()
                    MENSAGEM("Vendedor nÆo Cadastrado",2)
                    LOOP

                 ENDIF

              ENDDO

            CASE OP=3
              DO WHILE .T.
                 MENSAGEM("Tecle <ESC> para retornar")

                 WCOD_VEN     := 0
                 WNOME_VEN    := SPACE(15)
                 WDTCAD_VEN   := DATAATU
                 WCONF        :="S"
         
                 JANELA(03,03,13,76,"Consulta Cadastro de Vendedores")
                 COR("MENU")
                 
                 @ 06,05 SAY "Cod. Vendedor.:"
                 @ 08,05 SAY "Nome Vendedor.:"
                 @ 10,05 SAY "Dt.Cadastro...:"
        
                 SELE VENDEDOR
                 SET ORDER TO 1
                 @ 06,21 GET WCOD_VEN VALID (WCOD_VEN>0) PICT "99"
                 READ

                 IF LASTKEY() = 27 
                    EXIT
                    CLS
                 ENDIF

                 SEEK WCOD_VEN
                 IF FOUND()
                    WCOD_VEN    := COD_VEN 
                    WNOME_VEN   := NOME_VEN

                    @ 08,21 SAY WNOME_VEN PICT "@!"
                    @ 10,21 SAY WDTCAD_VEN PICT "@D" 

                    MENSAGEM("Tecle algo para sair",1)
                    inkey(0)

                 ELSE

                    MENSAGEM("Vendedor nÆo Cadastrado",2)
                    LOOP

                 ENDIF

              ENDDO

            CASE OP=4
              DO WHILE .T.
                 MENSAGEM("Tecle <ESC> para retornar")

                 WCOD_VEN     := 0
                 WNOME_VEN    := SPACE(15)
                 WDTCAD_VEN   := DATAATU
                 WCONF        :="S"
         
                 JANELA(03,03,13,76,"Deleta Cadastro de Vendedores")
                 COR("MENU")
                 
                 @ 06,05 SAY "Cod. Vendedor.:"
                 @ 08,05 SAY "Nome Vendedor.:"
                 @ 10,05 SAY "Dt.Cadastro...:"

                 SELE VENDEDOR
                 SET ORDER TO 1
                 @ 06,21 GET WCOD_VEN VALID (WCOD_VEN>0) PICT "99"
                 READ

                 IF LASTKEY() = 27 
                    EXIT
                    CLS
                 ENDIF

                 SEEK WCOD_VEN
                 IF FOUND()
                    WCOD_VEN    := COD_VEN 
                    WNOME_VEN   := NOME_VEN

                    @ 08,21 SAY WNOME_VEN PICT "@!"
                    @ 10,21 SAY WDTCAD_VEN PICT "@D" 

                    INKEY(0.1)
                    MENSAGEM("Confirma (S/N):")
                    @ 24,48 GET WCONF PICT "@!" VALID WCONF $ "SN"
                    READ             

                    IF WCONF = "S"
                       R_LOCK()
                       DELETE
                       U_LOCK()
                    ELSE
                       LOOP
                    ENDIF

                 ELSE
                    MENSAGEM("Vendedor nÆo Cadastrado",2)
                    LOOP
                 ENDIF

              ENDDO
            ENDCASE
ENDDO

FUNCTION R_LOCK
DO WHILE (!R_LOCK())
   MENSAGEM("Aguardendo permissÆo de acesso a base")
ENDDO
RETURN .T.

FUNCTION U_LOCK
  SKIP 0
  DBUNLOCK()
  COMMIT
RETURN .T.
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Mensagem por vagucs »

Na abertura de indices, econimize comandos

Código: Selecionar todos

USE ARQUIVO.DBF NEW ALIAS ARQUIVO SHARED
IF !FILE("INDICE1.NTX"
   INDEX ON CHAVE1 TO INDICE1.NTX
END IF
SET INDEX TO INDICE1.NTX
Sem mais
Wagner Nunes
www.vagucs.com.br
Irineu
Usuário Nível 2
Usuário Nível 2
Mensagens: 61
Registrado em: 13 Ago 2003 22:01
Localização: Curitia-PR
Contato:

Mensagem por Irineu »

Olá Marcio,

Me parece que seu proble é simples, voce esta entrando num loop sem fim quando chama a função R_LOCK

Código: Selecionar todos

FUNCTION R_LOCK
DO WHILE (!R_LOCK())   // Aki vce esta chamanda a funcao que vc criou e nunca vai sair daqui, por isso o estouro da pilha
MENSAGEM("Aguardendo permissÆo de acesso a base")
ENDDO
RETURN .T.
Coloque assim :

Código: Selecionar todos

FUNCTION R_LOCK
DO WHILE (!RLOCK())
MENSAGEM("Aguardendo permissÆo de acesso a base")
ENDDO
RETURN .T.
Responder