Página 8 de 13

LetoDBf (fork) -> LetoDb com espinafre

Enviado: 04 Nov 2018 11:29
por Itamar M. Lins Jr.
Ola!
Aqui, se eu tentar conectar com o IP do servidor, não conecta, somente da certo se cPath = "//localhost:2812/"
Vc precisa liberar a porta do FIREWALL do servidor ai e se tem algum antivirus deve verificar isso.
Adicionar regra de exceção no FIREWALL PORTA 2812 do LETODBF.

Saudações,
Itamar M. Lins Jr.

LetoDBf (fork) -> LetoDb com espinafre

Enviado: 04 Nov 2018 12:19
por asimoes
Estranho isso, no servidor eu gravo o IP dele em arquivo
.ini. E a minha aplicação lê o IP não tem erro

LetoDBf (fork) -> LetoDb com espinafre

Enviado: 04 Nov 2018 12:30
por Itamar M. Lins Jr.
Ola!
deixando claro que no Servidor sempre deixo o IP fixo.
Eu padronizo o nome do servidor LetoDbf. E deixo fixo também.
Se a maquina na qual está instalado o LetoDbf, chame-se "servidor", eu deixo em um arquivo .INI, ai posso copiar para qualquer estação esse arquivo.
Bom deixar os IP´s da estações fixos, porque quando muda o IP, cai a conexão.
E altero no roteador para atribuir os IP's dos celulares acima de tal faixa, para não colidir com os IP´s fixos.

Saudações,
Itamar M. Lins Jr.

LetoDBf (fork) -> LetoDb com espinafre

Enviado: 04 Nov 2018 17:13
por asimoes
No roteador é só identificar o mac das placas e atribuir os IP´s
Meu cliente tem 1 servidor e 3 estações, uma rede simples, nunca tive problemas com acesso, só quando o roteador queimou, coisas do tempo.
Foi só trocar o roteador e reatribuir os IP´s, coisa de 10 min no máximo, uma rede grande é melhor atribuir um IP fixo para o servidor e o resto das
estações com DHCP

LetoDBf (fork) -> LetoDb com espinafre

Enviado: 05 Nov 2018 12:38
por porter
Olá pessoal,
Pela estação, estou conseguindo acessar normalmente o servidor, e pela estação, para abrir um arquivo que está no servidor com o USE ESTQ001 SHARED
abre normalmente, mas quando tento abrir outro arquivo dessa mesma forma, da estação está dando o seguinte erro:

Error Base/1132: Erro de limite: acesso de array

Os dois arquivos estão no servidor, e pela estação somente o primeiro abre, o segundo dá o erro descrito acima, tenho que fazer alguma
configuração no letodb.ini ?

LetoDBf (fork) -> LetoDb com espinafre

Enviado: 05 Nov 2018 18:58
por asimoes
Porter,

Esse é o letdb.ini que eu uso, veja o que está diferente no seu.

Código: Selecionar todos

;Server = \\192.168.56.1
;IP = 127.0.0.1
Port = 2812
DataPath = DB
;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 = 21
;Max_Vars_Number = 1000
;Max_Var_Size = 67108864
;Tables_Max  = 999
;Users_Max = 99
Debug = 1
Optimize = 1
;HardCommit = 0 ver readme.txt
;AutOrder = 0
;ForceOpt = 0
;TimeOut = 360
;Zombie_Check = 30
;Server_User = advantage
;Server_UID = 1000
;Server_GID = 4
;BC_Services = letodb;
;BC_Interface = eth2
;BC_Port = 2812
DataBase = DB
;Backup = C:\Users\cisin\Documents\GitHub\LetoDBf\bin\backup
Mask = *.dbf,*.dbt,*.ntx
Lock = 1
Seconds = 30
Wait = 1
ArcCmd = tar -cvzf /tmp/backup/leto.tar.gz /tmp/backup/*

LetoDBf (fork) -> LetoDb com espinafre

Enviado: 05 Nov 2018 20:20
por porter
Olá Asimões, obrigado por responder.
Fiz as modificações, conforme o seu arquivo letodb.ini, o comando USE ESTQ001 SHARED executa e em seguida da a mensagem de erro: Error Base/1132: Erro de limite: acesso de array, só consegue acessar apenas o primeiro arquivo do servidor, quando tenta acessar o segundo arquivo, da erro, não consegui descobrir ainda onde estou errando.

LetoDBf (fork) -> LetoDb com espinafre

Enviado: 05 Nov 2018 21:09
por Itamar M. Lins Jr.
Ola!
Porter, vc pŕecisa criar os exemplos e postar para todos nós testarmos.

Código: Selecionar todos

FUNCTION MAIN
LOCAL aStru := {} 
IF LETO_CONNE...
Cria estrutura do DBF vazio, indexar, etc...
BROWSE()
Dessa forma que vc está fazendo as suas perguntas fica muito cansativo, agente tentar adivinhar o que pode ser.
Isso não é erro do LetoDbf, tá parecendo que tem uma função ligada na abertura do arquivo(indice) não sei, e o LetoDb não enxerga.
Cadê esse arquivo ? cadê os códigos ?
Posta ai, agora bem simplificado.
A mesma coisa ocorre com outras pessoas que estão querendo usar o Letodbf.
Tem que aprender isolar o problema, linha por linha, fazer teste com códigos pequenos para que todos nós possamos testar. Pode ser um BUG do LetoDb e pode não ser.

Código: Selecionar todos

Function main
local aStru := {{"nome","c",10,0}} //criar um DBF com apenas uma linha
local cPath := '//192...
 IF leto_Connect( cPATH ) < 0
alert("erro...

  IF dbCreate( cPath + aStru)
      ? "Arquivo criado via leto..."
   ENDIF

Ai todo mundo vai saber te ajudar.

Saudações,
Itamar M. Lins Jr.

LetoDBf (fork) -> LetoDb com espinafre

Enviado: 05 Nov 2018 22:11
por asimoes
Porter,

Tem que usar o bom e velho debug, habilita o -b no hbp ou hbm, e coloca o altd() antes da abertura dos dbf´s, outra coisa mostra pra gente a sua rotina de abertura dos arquivos, pode ter algo errado ai

LetoDBf (fork) -> LetoDb com espinafre

Enviado: 05 Nov 2018 22:29
por asimoes
Porter,

Tenta isso:

USE ESTQ001 SHARED NEW ( a cláusula new é para atribuir uma nova área pro dbf )

LetoDBf (fork) -> LetoDb com espinafre

Enviado: 06 Nov 2018 17:47
por porter
Olá,
O erro ocorre quando bloqueio um registro de PRODUTOS por exemplo para gravar e em seguida tento abrir CLIENTES por exemplo, eu não estava descobrindo o erro
porque o arquivo era aberto em outra parte do sistema, então não imaginava que o motivo era esse, então alterei e coloquei a
abertura do arquivo logo abaixo.

Código: Selecionar todos

BloqReg( "PRODUTOS" )
REPLACE ULTVENDA WITH DATE()
UNLOCK
USE CLIENTES SHARED  -->> Error Base/1132: Erro de limite: acesso de array nessa linha, se bloquear registro para gravar.

FUNCTION BLOQREG(ARQ)
      SAVE SCREEN
      IF RLOCK()
         RETURN .T.
      ELSE
         DO WHILE .T.
            IF !RLOCK()
               MENSAGEM("Registro Indisponível!  ( " + ARQ + " ) " )
               RESTORE SCREEN
               LOOP
            ENDIF
            EXIT
         ENDDO
      ENDIF
      RETURN .T.


LetoDBf (fork) -> LetoDb com espinafre

Enviado: 06 Nov 2018 18:15
por Itamar M. Lins Jr.
Ola!
Porter use ALIAS no rlock() e em todo lugar, não sabemos que área está aberta, abrimos no início, e vamos só direcionando.

Código: Selecionar todos

(cAlias)->(Rlock())
Da forma que vc mostrou o código, está embolando as áreas(tabelas)

Código: Selecionar todos

BloqReg( "PRODUTOS" )
produtos->ULTVENDA := DATE() //não precisa do replace.
produtos->(DbUNLOCK())
IF SELECT("CLIENTES") > 0
  //JA TÁ ABERTO
ELSE
   USE CLIENTES SHARED  
ENDIF
//NA FUNÇÃO BLOQREG
FUNCTION BLOQREG(cAlias)
LOCAL lOk := .T.
hb_default(@cAlias,alias())
Do While .t.
      IF (cAlias)->(RLOCK())
          exit
      else
          IF neterr()
               MENSAGEM("Registro Indisponível!  ( " + ARQ + " ) " )
         lOk := .F.
...
ENDDO
Return lOk
Entendeu a lógica ?

Saudações,
Itamar M. Lins Jr.

LetoDBf (fork) -> LetoDb com espinafre

Enviado: 06 Nov 2018 19:44
por asimoes
Eu acrescentaria USE CLIENTES SHARED NEW

NEW para informar que está sendo aberto em uma área nova, se não fizer isso vai "matar" alguma área previamente informada

LetoDBf (fork) -> LetoDb com espinafre

Enviado: 07 Nov 2018 15:40
por Itamar M. Lins Jr.
Ola!
A cláusula NEW, deve ser usada apenas para o numero 1,2,3,4,5... não colidir
O correto é verificar se está ou não aberto com SELECT() para não abrir várias vezes o mesmo DBF sem necessidade.
Se precisar usar um PACK, e não souber onde o DBF está aberto(área 1,2,3..) ? ou um flock/rlock travando ?

Código: Selecionar todos

SELECT([<cAlias>]) --> nWorkArea

Código: Selecionar todos

SELECT()
 Determine the work area number of a specified alias
------------------------------------------------------------------------------
 Syntax

     SELECT([<cAlias>]) --> nWorkArea

 Arguments

     <cAlias> is the target work area alias name.

 Returns

     SELECT() returns the work area of the specified alias as an integer
     numeric value.

 Description

     SELECT() is a database function that determines the work area number of
     an alias.  The number returned can range from 0 to 250.  If <cAlias> is
     not specified, the current work area number is returned.  If <cAlias> is
     specified and the alias does not exist, SELECT() returns zero.

     Note:  The SELECT() function and SELECT command specified with an
     extended expression argument look somewhat alike.  This should not be a
     problem since the SELECT() function is not very useful on a line by
     itself.

 Examples

     .  This example uses SELECT() to determine which work area
        USE...NEW selected:

        USE Sales NEW
        SELECT 1
        ? SELECT("Sales")            // Result: 4

     .  To reselect the value returned from the SELECT() function, use
        the SELECT command with the syntax, SELECT (<idMemvar>), like this:

        USE Sales NEW
        nWorkArea:= SELECT()
        USE Customer NEW
        SELECT (nWorkArea)
Saudações,
Itamar M. Lins Jr.

LetoDBf (fork) -> LetoDb com espinafre

Enviado: 07 Nov 2018 16:27
por porter
Olá Itamar e asimões
Com DBFCDX, dá certo tanto da forma que eu vinha fazendo, como também dá certo, do jeito que você sugeriu,
mas com o LetoDbf, o mesmo erro ainda persiste, o erro ocorre quando executo o sistema na estação, o LetoDbf conecta normalmente tanto local como na estação, estou achando que o erro não está na forma como estou bloqueando o registro, ainda não descobri onde estou errando, USE CLIENTES SHARED NEW,
também dá o mesmo erro.
No servidor tenho uma pasta chamada LETODBF, e nessa pasta tenho esses arquivos:
leto.sh
letodb.exe
LETODB.INI
letodbf.log

letodbf.log

Código: Selecionar todos

11.07.2018 15:47:38 INFO: connected  192.168.0.100:1967 estoque.exe CP: PT850  DF: dd/mm/yy  conn-ID 0
11.07.2018 15:47:46 INFO: disconnect 192.168.0.100:1967 estoque.exe users=(1 : 1 : 2), tables=(0 : 4)