Clipper On Line • Ver Tópico - Erro ao abrir dois módulos usando tabelas em modo shared

Erro ao abrir dois módulos usando tabelas em modo shared

Discussão sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

 

Erro ao abrir dois módulos usando tabelas em modo shared

Mensagempor Cisino Junior » 01 Ago 2017 17:36

Boa tarde!
Estou tendo problemas usando o LetoDB(fork) nos módulos do Sistema. O que acontece é que não consigo abrir o módulo X se o Y estiver aberto(da erro de abertura de tabela, mesmo elas estando em modo compartilhado), mas se eu abrir o Y primeiro, eu consigo abrir o X. Sem o uso do LetoDb(fork) os módulos do sistema funcionam perfeitamente executando ao mesmo tempo.

Segue abaixo as funções usadas para fazer o controle das tabelas:

// ===============================================================
FUNCTION RdRec()
// ===============================================================
DO WHILE 1 = 1
   IF REC_LOCK(5)
      ARQLOCOK = 'T'
      RETURN(.T.)
   ELSE
      ARQLOCOK = 'F'
      OK = ' '
      STORE VAL(SUBSTR(TIME(),7,2)) TO TIMEANT
      IF TIMEANT >= 39
         TIMEANT = TIMEANT - 40
      ELSE
         TIMEANT = TIMEANT + 20
      ENDIF
      DO WHILE 1 = 1
         OPCAO:=MsgYesNo('Registro em USO. Tentar novamente ?')
         DO CASE
         CASE OPCAO==2
            *.OR. VAL(SUBSTR(TIME(),7,2)) = TIMEANT
            OK = 'N'
            EXIT
         CASE OPCAO==1
            OK = 'S'
            EXIT
         CASE OPCAO # 0
         ENDCASE
      ENDDO
      IF OK = 'S'
         LOOP
      ELSE
         RETURN(.F.)
      ENDIF
   ENDIF
ENDDO
RETURN

// ===============================================================
FUNCTION RDADD()
// ===============================================================
// LOCK-ADD
DO WHILE 1 = 1
   IF ADD_REC(5)
      ARQLOCOK = 'T'
      RETURN(.T.)
   ELSE
      ARQLOCOK = 'F'
      OK = ' '
      STORE VAL(SUBSTR(TIME(),7,2)) TO TIMEANT
      IF TIMEANT >= 39
         TIMEANT = TIMEANT - 40
      ELSE
         TIMEANT = TIMEANT + 20
      ENDIF
      DO WHILE 1 = 1
         OPCAO:=MsgYesNo('Registro em USO. Tentar novamente ?')
         DO CASE
         CASE OPCAO==2
            OK = 'N'
            EXIT
         CASE OPCAO==1
            OK = 'S'
            EXIT
         CASE OPCAO # 0
         ENDCASE
      ENDDO
      IF OK = 'S'
         LOOP
      ELSE
         RETURN(.F.)
      ENDIF
   ENDIF
ENDDO
RETURN

// ===============================================================
FUNCTION RDUSE()
// ===============================================================
// LOCK-USE
DO WHILE 1 = 1
   cor := setcolor()
   //@ 24,01 SAY 'A b r i n d o ... '+ARQALIAS

   IF NET_USE("&ARQ",.F.,5)
      DO CASE
         CASE ARQNIND = 0
            *
         CASE ARQNIND = 1
            SET INDEX TO (ARQ1)
         CASE ARQNIND = 2
            SET INDEX TO (ARQ1),(ARQ2)
         CASE ARQNIND = 3
            SET INDEX TO (ARQ1),(ARQ2),(ARQ3)
         CASE ARQNIND = 4
            SET INDEX TO (ARQ1),(ARQ2),(ARQ3),(ARQ4)
         CASE ARQNIND = 5
            SET INDEX TO (ARQ1),(ARQ2),(ARQ3),(ARQ4),(ARQ5)
         CASE ARQNIND = 6
            SET INDEX TO (ARQ1),(ARQ2),(ARQ3),(ARQ4),(ARQ5),(ARQ6)
         CASE ARQNIND = 7
            SET INDEX TO (ARQ1),(ARQ2),(ARQ3),(ARQ4),(ARQ5),(ARQ6),(ARQ7)
         CASE ARQNIND = 8
            SET INDEX TO (ARQ1),(ARQ2),(ARQ3),(ARQ4),(ARQ5),(ARQ6),(ARQ7),(ARQ8)
         CASE ARQNIND = 9
            SET INDEX TO (ARQ1),(ARQ2),(ARQ3),(ARQ4),(ARQ5),(ARQ6),(ARQ7),(ARQ8),(ARQ9)
         OTHERWISE
            MsgInfo('+>+>+>+>+>+  E R R O = ARQNIND ERRADO')
      ENDCASE
      ARQLOCOK = 'T'
      GOTO TOP
      RETURN
   ELSE
      ARQLOCOK = 'F'
      OK = ' '
      STORE VAL(SUBSTR(TIME(),7,2)) TO TIMEANT
      IF TIMEANT >= 39
         TIMEANT = TIMEANT - 40
      ELSE
         TIMEANT = TIMEANT + 20
      ENDIF
      DO WHILE 1 = 1
         OPCAO:=MsgYesNo('Registro em USO. Tentar novamente ?')
         DO CASE
            CASE OPCAO==2
               OK = 'N'
               EXIT
            CASE OPCAO==1
               OK = 'S'
               EXIT
            CASE OPCAO # 0
         ENDCASE
      ENDDO
      IF OK = 'S'
         LOOP
      ELSE
         EXIT
      ENDIF
   ENDIF
ENDDO
RETURN

// ===============================================================
FUNCTION RDFIL()
// ===============================================================
/*
** Não foi necessário modificar nada nessa função.
**
*/
// LOCK-FIL
DO WHILE 1 = 1
   IF FIL_LOCK(5)
      ARQLOCOK = 'T'
      EXIT
   ELSE
      ARQLOCOK = 'F'
      OK = ' '
      STORE VAL(SUBSTR(TIME(),7,2)) TO TIMEANT
      IF TIMEANT >= 39
         TIMEANT = TIMEANT - 40
      ELSE
         TIMEANT = TIMEANT + 20
      ENDIF
      DO WHILE 1 = 1
         OPCAO:=MsgYesNo('Registro em USO. Tentar novamente ?')
         DO CASE
         CASE OPCAO==2 .OR. VAL(SUBSTR(TIME(),7,2)) = TIMEANT
            OK = 'N'
            EXIT
         CASE OPCAO==1
            OK = 'S'
            EXIT
         CASE OPCAO # 0
         ENDCASE
      ENDDO
      IF OK = 'S'
         LOOP
      ELSE
         EXIT
      ENDIF
   ENDIF
ENDDO
RETURN

// ===============================================================
FUNCTION RDEXC()
// ===============================================================
// LOCK-EXC
DO WHILE 1 = 1

   IF .NOT. leto_File(TRIM(ARQ)+'.DBF') // file(cFile) -> leto_File(cFile)
      MsgInfo('ARQUIVO ['+ARQ+'.DBF] NAO EXISTE !!')
      INKEY(5)
      ARQLOCOK='F'
      RETURN
   ENDIF
   USE (ARQ) EXCLUSIVE ALIAS &ARQALIAS
   XX=1
   DO WHIL XX <= ARQNIND
      XXX=SUBS(STR(XX,1),1,1)
      INDICE = ARQ&XXX
      tipo_ext = indexext()
      IF .NOT. leto_File(TRIM(INDICE)+trim(tipo_ext))
         MsgInfo('ARQUIVO ['+INDICE +tipo_ext + '] NAO EXISTE !!')
         INKEY(5)
         ARQLOCOK='F'
         RETURN
      ENDIF
      XX=XX+1
      EXIT
   ENDDO

   IF NET_USE("&ARQ",.T.,5)
      DO CASE
         CASE ARQNIND = 0
            *
         CASE ARQNIND = 1
            SET INDEX TO (ARQ1)
         CASE ARQNIND = 2
            SET INDEX TO (ARQ1),(ARQ2)
         CASE ARQNIND = 3
            SET INDEX TO (ARQ1),(ARQ2),(ARQ3)
         CASE ARQNIND = 4
            SET INDEX TO (ARQ1),(ARQ2),(ARQ3),(ARQ4)
         CASE ARQNIND = 5
            SET INDEX TO (ARQ1),(ARQ2),(ARQ3),(ARQ4),(ARQ5)
         CASE ARQNIND = 6
            SET INDEX TO (ARQ1),(ARQ2),(ARQ3),(ARQ4),(ARQ5),(ARQ6)
         CASE ARQNIND = 7
            SET INDEX TO (ARQ1),(ARQ2),(ARQ3),(ARQ4),(ARQ5),(ARQ6),(ARQ7)
         OTHERWISE
            MsgInfo('+>+>+>+>+>+  E R R O = ARQNIND ERRADO')
      ENDCASE
      ARQLOCOK = 'T'
      GOTO TOP
      EXIT
   ELSE
      ARQLOCOK = 'F'
      OK = ' '
      STORE VAL(SUBSTR(TIME(),7,2)) TO TIMEANT
      IF TIMEANT >= 39
         TIMEANT = TIMEANT - 40
      ELSE
         TIMEANT = TIMEANT + 20
      ENDIF
      DO WHILE 1 = 1
         OPCAO:=MsgYesNo('Registro em USO. Tentar novamente ?')
         DO CASE
            CASE OPCAO==2
               OK = 'N'
               EXIT
            CASE OPCAO==1
               OK = 'S'
               EXIT
         ENDCASE
      ENDDO
      IF OK = 'S'
         LOOP
      ELSE
         EXIT
      ENDIF
   ENDIF
ENDDO
RETURN

// ===============================================================
FUNCTION NET_USE()
// ===============================================================
PARAMETERS file, ex_use, wait
PRIVATE forever

forever = (wait = 0)
WHILE (forever .OR. wait > 0)
  IF ex_use                                 // Exclusive.
     USE (file) EXCLUSIVE ALIAS &ARQALIAS
//    ALERT("ALIA CRIADO -> " + ARQALIAS)
  ELSE
     USE (file) ALIAS &ARQALIAS             // Shared.
//    ALERT("ALIA CRIADO -> " + ARQALIAS)
  ENDIF

   IF ! NetErr() .AND. ! EMPTY(ALIAS())
      return .t.
   ELSE
      alert("Erro ao abrir tabela.")
      QUIT
   ENDIF

  INKEY(1)
  wait = wait - 1
ENDDO

RETURN (.F.)                                // USE fails.

// ===============================================================
FUNCTION FIL_LOCK()
// ===============================================================
PARAMETERS wait
PRIVATE forever

IF FLOCK()
   RETURN (.T.)  && locked
ENDIF

forever = (wait = 0)
DO WHILE (forever .OR. wait > 0)

   INKEY(.5)   && wait 1/2 second
   wait = wait - .5

   IF FLOCK()
      RETURN (.T.)  && locked
   ENDIF

ENDDO
RETURN (.F.)   && not locked

// ===============================================================
FUNCTION REC_LOCK()
// ===============================================================
PARAMETERS wait
PRIVATE forever

IF RLOCK()
   RETURN (.T.)  && locked
ENDIF

forever = (wait = 0)
DO WHILE (forever .OR. wait > 0)

   IF RLOCK()
      RETURN (.T.)  && locked
   ENDIF

   INKEY(.5)   && wait 1/2 second
   wait = wait - .5

ENDDO
RETURN (.F.)   && not locked

// ===============================================================
FUNCTION ADD_REC()
// ===============================================================
PARAMETERS wait
PRIVATE forever,ord_ind

ord_ind = iif(indexord()=0,0,indexord())
set order to 0
APPEND BLANK
set order to (ord_ind)
IF .NOT. NETERR()
   RETURN (.T.)
ENDIF

forever = (wait = 0)
DO WHILE (forever .OR. wait > 0)

   APPEND BLANK
   IF .NOT. NETERR()
      RETURN .T.
   ENDIF

   INKEY(.5)   && wait 1/2 second
   wait = wait - .5

ENDDO
RETURN (.F.)   && not locked


Atenciosamente,
Cisino Junior.
HMG 3.4.3 + DBF, Java, MySQL, PostgreSQL, PHP, JavaScript + HTML5 + CSS3, Bootstrap, Spring, Thymeleaf.
Cisino Junior
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 67
Data de registro: 14 Abr 2016 13:12
Cidade/Estado: Rio de Janeiro
Curtiu: 12 vezes
Mens.Curtidas: 5 vezes

Erro ao abrir dois módulos usando tabelas em modo shared

Mensagempor Itamar M. Lins Jr. » 02 Ago 2017 18:12

Ola!
Cadê seu letodb.ini ?
Na verdade não precisava postar todo o código, só a parte do erro e o arquivo .log do letodbf.
Mas vou adiantando que precisa do No_Save_WA = 1

  No_Save_WA = 1           -    server mode of internally handling database tables 
                                    1  each dbUseArea() will cause a real file open operation by the OS,
                                       identical to what client requested, so workareas at the server are same as
                                       at client side. [ WA number, alias, filter conditions, relations ]
                                    0  each table is opened only one time, this workarea 'exchanged' in between client
                                       requests. so only one connection will have access to the table at a time.
                                       No relations active at server, Alias names at server are different from
                                       the client.
                                    Recommend '1' if you plan to execute functions at server side ( UDF ).

--------
      Share_Tables = 0         -    other software simultanous access tables used by server,
                                    which changes logical or physical locking -- in dependance:
                                    # No_Save_WA = 0   
                                    0  server open all tables in exclusive mode, what leads to
                                       performance increase as e.g. record-/ file- locks are not applied by OS.
                                    1  tables are opened in the same mode [shared/exclusive] as client
                                       applications opened them, what allows LetoDB to work in coexistence with
                                       other applications [ non LetoDB users ] simultanous on the same DBF tables.
                                    # No_Save_WA = 1
                                    1  physical record-/ file- locks set with the OS are viewable for other
                                    0  only logical internally locking



Coloque Share_tables = 0 e No_Save_WA = 1 no arquivo letodb.ini e teste ai.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 3658
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 124 vezes
Mens.Curtidas: 191 vezes

Erro ao abrir dois módulos usando tabelas em modo shared

Mensagempor Cisino Junior » 03 Ago 2017 15:23

Itamar M. Lins Jr. escreveu:Mas vou adiantando que precisa do No_Save_WA = 1


Boa tarde, Itamar!
A configuração do letodb.ini está exatamente como você falou:

Server = xxx.xxx.x.xx
IP = xxx.xxx.x.xx
Server = xxx.xxx.x.xx
IP = xxx.xxx.x.xx
Port = 2812
DataPath = C:\DADOS
;LogPath = /tmp
Default_Driver = CDX
;Lock_Scheme = 6
;Memo_Type = FPT
Share_Tables = 0
No_Save_WA = 1
Lower_Path = 0
EnableFileFunc = 1
EnableAnyExt = 1
Allow_UDF = 1
Pass_for_Login = 0
Pass_for_Manage = 0
Pass_for_Data = 0
;Pass_File = "leto_users"
Cache_Records = 60
;Max_Vars_Number = 1000
;Max_Var_Size = 67108864
;Tables_Max  = 999
;Users_Max = 99
Debug = 1
Optimize = 1
;AutOrder = 0
;ForceOpt = 0
;TimeOut = 360
;Zombie_Check = 0
;Server_User = advantage
;Server_UID = 1000
;Server_GID = 4
DataBase = C:\DADOS
Backup = backup
Mask = *.dbf,*.dbt,*.ntx
Lock = 1
Seconds = 30
Wait = 1
ArcCmd = tar -cvzf /tmp/backup/leto.tar.gz /tmp/backup/*


Abaixo segue meu arquivo letodb.log:

08.01.2017 12:58:36       LetoDBf Server try to start ...
08.01.2017 12:58:36       UDF file: C:\Users\legna\Documents\GitHub\LetoDBf\bin\letoudf.hrb have been loaded.
08.01.2017 12:58:36 INFO: LetoDBf Server 3.00, will run at IP 192.168.0.13:2812 ( internal also used :2813 )
08.01.2017 12:58:36 INFO: DataPath=C:\DADOS, ShareTables=0, NoSaveWA=1, max database=999
08.01.2017 12:58:36 INFO: LoginPassword=0, CacheRecords=60, LockExtended=0
08.01.2017 12:58:36 ERROR hb_socketBind() port 2812 used -- often a short temporary problem
08.01.2017 12:58:36       Socket error OK
08.01.2017 12:58:36       Server has been closed.
08.01.2017 13:06:57       LetoDBf Server try to start ...
08.01.2017 13:06:57       UDF file: C:\Users\legna\Documents\GitHub\LetoDBf\bin\letoudf.hrb have been loaded.
08.01.2017 13:06:57 INFO: LetoDBf Server 3.00, will run at IP 192.168.0.13:2812 ( internal also used :2813 )
08.01.2017 13:06:57 INFO: DataPath=C:\DADOS, ShareTables=0, NoSaveWA=1, max database=999
08.01.2017 13:06:57 INFO: LoginPassword=0, CacheRecords=60, LockExtended=0
08.01.2017 13:06:57 DEBUG second socket: 352 for errors established
08.01.2017 13:06:57 DEBUG thread3() with pipe handle: 304 started ..
08.01.2017 13:11:22 INFO: connected  192.168.0.13:50013 ADMCFG.exe CP: PT850  DF: DD/MM/YYYY  conn-ID 0
08.01.2017 13:11:53 INFO: disconnect 192.168.0.13:50013 ADMCFG.exe users=(1 : 1 : 1), tables=(0 : 4)
08.01.2017 14:18:58 INFO: connected  192.168.0.13:50757 ADMCFG.exe CP: PT850  DF: DD/MM/YYYY  conn-ID 0
08.01.2017 14:19:31 INFO: disconnect 192.168.0.13:50757 ADMCFG.exe users=(1 : 1 : 1), tables=(0 : 4)
08.01.2017 14:22:38 INFO: connected  192.168.0.13:50773 ADMCFG.exe CP: PT850  DF: DD/MM/YYYY  conn-ID 0
08.01.2017 14:24:45 INFO: disconnect 192.168.0.13:50773 ADMCFG.exe users=(1 : 1 : 1), tables=(0 : 4)
08.01.2017 14:26:31 INFO: connected  192.168.0.13:50805 ADMCFG.exe CP: PT850  DF: DD/MM/YYYY  conn-ID 0
08.01.2017 14:27:50 INFO: disconnect 192.168.0.13:50805 ADMCFG.exe users=(1 : 1 : 1), tables=(0 : 4)
08.01.2017 14:30:22 INFO: connected  192.168.0.13:50843 ADMCFG.exe CP: PT850  DF: DD/MM/YYYY  conn-ID 0
08.01.2017 14:32:43 INFO: disconnect 192.168.0.13:50843 ADMCFG.exe users=(1 : 1 : 1), tables=(0 : 4)
08.01.2017 14:37:02 INFO: connected  192.168.0.13:50903 ADMCFG.exe CP: PT850  DF: DD/MM/YYYY  conn-ID 0
08.01.2017 14:37:47 INFO: disconnect 192.168.0.13:50903 ADMCFG.exe users=(1 : 1 : 1), tables=(0 : 4)
08.01.2017 14:38:05 INFO: connected  192.168.0.13:50906 ADMCFG.exe CP: PT850  DF: DD/MM/YYYY  conn-ID 0
08.01.2017 14:38:15 INFO: disconnect 192.168.0.13:50906 ADMCFG.exe users=(1 : 1 : 1), tables=(0 : 4)
08.01.2017 14:44:21 INFO: connected  192.168.0.13:50947 ADMCFG.exe CP: PT850  DF: DD/MM/YYYY  conn-ID 0
08.01.2017 15:06:29 INFO: disconnect 192.168.0.13:50947 ADMCFG.exe users=(1 : 1 : 1), tables=(0 : 4)
08.01.2017 17:56:23 DEBUG thread3() ending ..
08.01.2017 17:56:24       Server has been closed.
08.02.2017 13:12:43       LetoDBf Server try to start ...
08.02.2017 13:12:43       UDF file: C:\Users\legna\Documents\GitHub\LetoDBf\bin\letoudf.hrb have been loaded.
08.02.2017 13:12:43 INFO: LetoDBf Server 3.00, will run at IP 192.168.0.13:2812 ( internal also used :2813 )
08.02.2017 13:12:43 INFO: DataPath=C:\DADOS, ShareTables=0, NoSaveWA=1, max database=999
08.02.2017 13:12:43 INFO: LoginPassword=0, CacheRecords=60, LockExtended=0
08.02.2017 13:12:43 ERROR hb_socketBind() port 2812 used -- often a short temporary problem
08.02.2017 13:12:43       Socket error OK
08.02.2017 13:12:43       Server has been closed.
08.02.2017 14:26:16       LetoDBf Server try to start ...
08.02.2017 14:26:16       UDF file: C:\Users\legna\Documents\GitHub\LetoDBf\bin\letoudf.hrb have been loaded.
08.02.2017 14:26:16 INFO: LetoDBf Server 3.00, will run at IP 192.168.0.13:2812 ( internal also used :2813 )
08.02.2017 14:26:16 INFO: DataPath=C:\DADOS, ShareTables=0, NoSaveWA=1, max database=999
08.02.2017 14:26:16 INFO: LoginPassword=0, CacheRecords=60, LockExtended=0
08.02.2017 14:26:16 DEBUG second socket: 344 for errors established
08.02.2017 14:26:16 DEBUG thread3() with pipe handle: 356 started ..
08.02.2017 14:27:27 INFO: connected  192.168.0.13:50199 ADMCFG.exe CP: PT850  DF: DD/MM/YYYY  conn-ID 0
08.02.2017 14:30:01 INFO: disconnect 192.168.0.13:50199 ADMCFG.exe users=(1 : 1 : 1), tables=(0 : 4)
08.02.2017 15:04:20 INFO: connected  192.168.0.13:50668 ADMCFG.exe CP: PT850  DF: DD/MM/YYYY  conn-ID 0
08.02.2017 15:04:42 INFO: disconnect 192.168.0.13:50668 ADMCFG.exe users=(1 : 1 : 1), tables=(0 : 4)
08.02.2017 17:57:41 DEBUG thread3() ending ..
08.02.2017 17:57:42       Server has been closed.
HMG 3.4.3 + DBF, Java, MySQL, PostgreSQL, PHP, JavaScript + HTML5 + CSS3, Bootstrap, Spring, Thymeleaf.
Cisino Junior
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 67
Data de registro: 14 Abr 2016 13:12
Cidade/Estado: Rio de Janeiro
Curtiu: 12 vezes
Mens.Curtidas: 5 vezes

Erro ao abrir dois módulos usando tabelas em modo shared

Mensagempor Itamar M. Lins Jr. » 03 Ago 2017 17:28

Ola!
Pode ser algum programa do tipo "MBAM" bloqueando a porta do letodb.
08.01.2017 12:58:36 ERROR hb_socketBind() port 2812 used -- often a short temporary problem
08.01.2017 12:58:36       Socket error OK
08.01.2017 12:58:36       Server has been closed.
08.01.2017 13:06:57       LetoDBf Server try to start ...


Que erro é esse ? Parece que é de um programa externo bloqueando a porta. É windows 10 ?

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 3658
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 124 vezes
Mens.Curtidas: 191 vezes

Erro ao abrir dois módulos usando tabelas em modo shared

Mensagempor Itamar M. Lins Jr. » 03 Ago 2017 17:33

Ola!
Tenta criar um .PRG que mostre o erro, ai poderei testar aqui na minha maquina.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 3658
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 124 vezes
Mens.Curtidas: 191 vezes

Erro ao abrir dois módulos usando tabelas em modo shared

Mensagempor Cisino Junior » 04 Ago 2017 13:12

Boa tarde, Itamar.

Sim, aqui usamos Windows 10 e a porta 2812 está liberado no firewall. O LetoDBf tem alguma incompatibilidade com o windows 10? Farei alguns testes usando o LetoDBf no Ubuntu.

Sem o uso do LetoDBf os módulos executam normalmente usando as mesmas tabelas, mas usando o LetoDBf é como se elas não abrissem em modo compartilhado, quando deveriam.

O que acontece é que o programa ao abrir cai no ELSE, como no exemplo abaixo:
// ===============================================================
FUNCTION RDUSE()
// ===============================================================
// LOCK-USE
DO WHILE 1 = 1
   cor := setcolor()
   //@ 24,01 SAY 'A b r i n d o ... '+ARQALIAS

   IF NET_USE("&ARQ",.F.,5)
      DO CASE
         CASE ARQNIND = 0
            *
         CASE ARQNIND = 1
            SET INDEX TO (ARQ1)
         CASE ARQNIND = 2
            SET INDEX TO (ARQ1),(ARQ2)
         CASE ARQNIND = 3
            SET INDEX TO (ARQ1),(ARQ2),(ARQ3)
         CASE ARQNIND = 4
            SET INDEX TO (ARQ1),(ARQ2),(ARQ3),(ARQ4)
         CASE ARQNIND = 5
            SET INDEX TO (ARQ1),(ARQ2),(ARQ3),(ARQ4),(ARQ5)
         CASE ARQNIND = 6
            SET INDEX TO (ARQ1),(ARQ2),(ARQ3),(ARQ4),(ARQ5),(ARQ6)
         CASE ARQNIND = 7
            SET INDEX TO (ARQ1),(ARQ2),(ARQ3),(ARQ4),(ARQ5),(ARQ6),(ARQ7)
         CASE ARQNIND = 8
            SET INDEX TO (ARQ1),(ARQ2),(ARQ3),(ARQ4),(ARQ5),(ARQ6),(ARQ7),(ARQ8)
         CASE ARQNIND = 9
            SET INDEX TO (ARQ1),(ARQ2),(ARQ3),(ARQ4),(ARQ5),(ARQ6),(ARQ7),(ARQ8),(ARQ9)
         OTHERWISE
            MsgInfo('+>+>+>+>+>+  E R R O = ARQNIND ERRADO')
      ENDCASE
      ARQLOCOK = 'T'
      GOTO TOP
      RETURN
   ELSE
      ARQLOCOK = 'F'
      OK = ' '
      STORE VAL(SUBSTR(TIME(),7,2)) TO TIMEANT
      IF TIMEANT >= 39
         TIMEANT = TIMEANT - 40
      ELSE
         TIMEANT = TIMEANT + 20
      ENDIF
      DO WHILE 1 = 1
         OPCAO:=MsgYesNo('Registro em USO. Tentar novamente ?') // Executa este bloco
         DO CASE
            CASE OPCAO==2
               OK = 'N'
               EXIT
            CASE OPCAO==1
               OK = 'S'
               EXIT
            CASE OPCAO # 0
         ENDCASE
      ENDDO
      IF OK = 'S'
         LOOP
      ELSE
         EXIT
      ENDIF
   ENDIF
ENDDO
RETURN


Atenciosamente,
Cisino Junior.
HMG 3.4.3 + DBF, Java, MySQL, PostgreSQL, PHP, JavaScript + HTML5 + CSS3, Bootstrap, Spring, Thymeleaf.
Cisino Junior
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 67
Data de registro: 14 Abr 2016 13:12
Cidade/Estado: Rio de Janeiro
Curtiu: 12 vezes
Mens.Curtidas: 5 vezes

Erro ao abrir dois módulos usando tabelas em modo shared

Mensagempor Itamar M. Lins Jr. » 08 Ago 2017 18:31

Ola!
Vc precisa criar o exemplo que demonstre o erro.
Como vamos testar aqui ?

O que acontece é que o programa ao abrir cai no ELSE, como no exemplo abaixo:

Como é que eu testo aqui no computador isso ai ?

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 3658
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 124 vezes
Mens.Curtidas: 191 vezes

Erro ao abrir dois módulos usando tabelas em modo shared

Mensagempor Itamar M. Lins Jr. » 08 Ago 2017 18:43

Ola!
É porque vc acredita que seu código não tem erro.
Sim existe a possibilidade de seu código está OK, mas vc precisa demonstrar que é um problema LetoDbf, para todos. Inclusive para o desenvolvedor do LetoDbf senão como vamos corrigir ?

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 3658
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 124 vezes
Mens.Curtidas: 191 vezes

Erro ao abrir dois módulos usando tabelas em modo shared

Mensagempor Itamar M. Lins Jr. » 08 Ago 2017 19:14

Vendo aqui seu código, vc pode simplificar as coisas ai.
Por exemplo, a função net_use usa uma variável chamada "ARQALIAS" e outras coisas que não tem necessidade nessa hora, basta usar;
use new shared 
use new exclusive
ou simplesmente
DbUseArea(.T.,"LETO",cServidor+db,cAlias,.T.,.F.,'PTISO')

Quando apresenta o erro na função net_use vc não sabe o que é.
Por isso cai no ELSE.
O erro está na forma que usa o NET_USE. Usando o "DBFCDX" pode até passar, mas com o drive RDD do "LETO" não passa porque ele tem memória das tabelas que foram abertas.
Quando vc está abrindo e fechando seu ADMCFG.exe o tempo todo ai, está fechando via código "close data", "close all"... ?

08.01.2017 13:11:22 INFO: connected  192.168.0.13:50013 ADMCFG.exe CP: PT850  DF: DD/MM/YYYY  conn-ID 0
08.01.2017 13:11:53 INFO: disconnect 192.168.0.13:50013 ADMCFG.exe users=(1 : 1 : 1), tables=(0 : 4)
08.01.2017 14:18:58 INFO: connected  192.168.0.13:50757 ADMCFG.exe CP: PT850  DF: DD/MM/YYYY  conn-ID 0
08.01.2017 14:19:31 INFO: disconnect 192.168.0.13:50757 ADMCFG.exe users=(1 : 1 : 1), tables=(0 : 4)
08.01.2017 14:22:38 INFO: connected  192.168.0.13:50773 ADMCFG.exe CP: PT850  DF: DD/MM/YYYY  conn-ID 0
08.01.2017 14:24:45 INFO: disconnect 192.168.0.13:50773 ADMCFG.exe users=(1 : 1 : 1), tables=(0 : 4)
08.01.2017 14:26:31 INFO: connected  192.168.0.13:50805 ADMCFG.exe CP: PT850  DF: DD/MM/YYYY  conn-ID 0
08.01.2017 14:27:50 INFO: disconnect 192.168.0.13:50805 ADMCFG.exe users=(1 : 1 : 1), tables=(0 : 4)
08.01.2017 14:30:22 INFO: connected  192.168.0.13:50843 ADMCFG.exe CP: PT850  DF: DD/MM/YYYY  conn-ID 0
08.01.2017 14:32:43 INFO: disconnect 192.168.0.13:50843 ADMCFG.exe users=(1 : 1 : 1), tables=(0 : 4)
08.01.2017 14:37:02 INFO: connected  192.168.0.13:50903 ADMCFG.exe CP: PT850  DF: DD/MM/YYYY  conn-ID 0
08.01.2017 14:37:47 INFO: disconnect 192.168.0.13:50903 ADMCFG.exe users=(1 : 1 : 1), tables=(0 : 4)
08.01.2017 14:38:05 INFO: connected  192.168.0.13:50906 ADMCFG.exe CP: PT850  DF: DD/MM/YYYY  conn-ID 0
08.01.2017 14:38:15 INFO: disconnect 192.168.0.13:50906 ADMCFG.exe users=(1 : 1 : 1), tables=(0 : 4)
08.01.2017 14:44:21 INFO: connected  192.168.0.13:50947 ADMCFG.exe CP: PT850  DF: DD/MM/YYYY  conn-ID 0
08.01.2017 15:06:29 INFO: disconnect 192.168.0.13:50947 ADMCFG.exe users=(1 : 1 : 1), tables=(0 : 4)


Pode ser que esteja encerrando o ADMCFG.EXE sem fechar as tabelas.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 3658
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 124 vezes
Mens.Curtidas: 191 vezes

Erro ao abrir dois módulos usando tabelas em modo shared

Mensagempor Cisino Junior » 15 Ago 2017 16:36

Boa tarde Itamar!

Hoje analisando com mais cuidado os fontes, descobri que o erro era algo extremamente idiota... Não estava nas funções de controle das tabelas postadas acima e nem no LetoDBf.

Abaixo está o log do error, no qual você poderá ver que mostra o erro na linha 457, na função AcessoAoSistema(), acontece que não havia nada de errado nessa linha. E sim abaixo dela, aonde era verificado a existência do arquivo CDX no banco de dados com a função FILE(cFile), foi só mudar para leto_File(cFile) que o problema foi resolvido. Como eu disse, algo idiota que passou despercebido, erro meu... hehehe Agora vou continuar testando o Leto!!!

Date:14/08/2017 Time: 16:26:30
Error LETO/1021 Erro de abertura: LOGSIGA

Called from DBUSEAREA(0)
Called from NET_USE(329)
Called from RDEXC(272)
Called from ACESSOAOSISTEMA(457)
Called from (b)MAIN(4)
Called from _PROCESSINITPROCEDURE(5828)
Called from _ACTIVATEWINDOW(5579)
Called from DOMETHOD(8990)
Called from MAIN(88)


Desde já peço desculpas pelo incomodo e agradeço mais uma vez toda sua ajuda!

Atenciosamente,
Cisino Junior
HMG 3.4.3 + DBF, Java, MySQL, PostgreSQL, PHP, JavaScript + HTML5 + CSS3, Bootstrap, Spring, Thymeleaf.
Cisino Junior
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 67
Data de registro: 14 Abr 2016 13:12
Cidade/Estado: Rio de Janeiro
Curtiu: 12 vezes
Mens.Curtidas: 5 vezes




Retornar para Banco de Dados

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro