Página 6 de 13

RDD LETO Sem Mistério

Enviado: 07 Dez 2012 08:39
por asimoes
Itamar,

O meu CVS não baixa nenhuma atualização do letodb a muito tempo.
Houve alguma mudança?

RDD LETO Sem Mistério

Enviado: 07 Dez 2012 08:49
por asimoes
Como eu passei a usar o NETIO faz muito tempo que não acompanho as atualizações do letodb essa que você tá me informando Itamar deve ser recente, porque eu sempre mando o cvs atualizar minigui, harbourboleto e letodb(não traz nada)

[]

RDD LETO Sem Mistério

Enviado: 07 Dez 2012 11:03
por Itamar M. Lins Jr.
Tem muitas, desde que o Pavel criou o ramo BRANCH, deve pegar o branch(ramo) via cvs rel-1-mt.
http://sourceforge.net/projects/letodb/files/, da uma olhada na data.
No seu CVS do leto é só escolher a opção branch ou ramo se estiver em portugues e digita rel-1-mt

Saudações,
Itamar M. Lins Jr.

RDD LETO Sem Mistério

Enviado: 07 Dez 2012 11:07
por asimoes
Itamar, entendi, valeu.

Uma pergunta: você já conseguiu compilar com msvc?

RDD LETO Sem Mistério

Enviado: 07 Dez 2012 11:16
por Itamar M. Lins Jr.
Eu não tentei porque estou usando o Mingw.

Saudações,
Itamar M. Lins Jr.

RDD LETO Sem Mistério

Enviado: 11 Dez 2012 19:34
por jelias
Amigos,

Gostaria de parabenizar os colegas pelo empenho em ensinar o uso do RDD LETO.
Hoje estou usando xHarbour 1.2.1 / BCC 5.8.2 / DBFCDX. Em alguns clientes uso TS.
Estive procurando informações sobre o LETODB e mesmo lendo todo o tópico ainda me restam algumas dúvidas e em alguns casos confirmações.
Não tenho certeza, mais me parece que o amigo Itamar é um dos únicos que está usando em produção, me perdoe se estiver errado.
Para o meu caso irei usar o LETODB para uma rede local,com um servidor windows Server 2008 Enterprise. Estações windows'xp sp3.

Dúvidas

- Com o uso do LETODB irei ter a mesma performance que tenho com TS? Ou melhor, o que poderia esperar como ganho de performance?
- Quanto a segurança, o que o LETODB oferece?
- No meu servidor eu tenho dois HD's. Um deles fica uma pasta onde estão quase todos os banco de dados, que seria: E:\ESTOQ\00001 e os arquivos financeiros em outra pasta E:\FINANC\00001. No outro hd, tenho uma pasta: H:\H\00001 onde ficam informações confidências. Quando estou usando o sistema preciso trabalhar com tabelas localizadas em todas as pastas acima. Isso é possível com o LETODB?
- Pelo que puder entender o processamento das informações acontecem no servidor, seria correto pensar que o tráfego de rede seria somente das respostas obtidas do servidor? Ou seja, segue a mesma idéia de um motor SQL.

Confirmações sobre instalação e uso

- Instalação no Servidor: É só criar uma pasta, e deixar o arquivo LETODB.EXE e iniciar o servidor no autoexec.nt com a seguinte linha: c:\letodb\LETODB install. Não entendi bem, se é necessário também a linha: net start letodb_service

Nas estações
- Em cada estação criar uma pasta onde ficará o executável do sistema e um arquivo INI. Não sei se é necessário usar este arquivo INI ou se posso informar isso direto no FONTE.

No Programa
- Dentro do sistema tenho que criar uma rotina conforme o código do amigo Itamar:
Itamar M. Lins Jr. escreveu://fragmentos do código que eu uso.
02 Local cHost := "//localhost:2812/"
03
04 nConect := leto_Connect( cHost )
05 IF nConect == -1
06 nRes := leto_Connect_Err()
07 IF nRes == LETO_ERR_LOGIN
08 MsgStop( "Falha ao Logar" )
09 ELSEIF nRes == LETO_ERR_RECV
10 MsgStop( "Error ao conectar" )
11 ELSEIF nRes == LETO_ERR_SEND
12 MsgStop( "Erro de envio" )
13 ELSE
14 MsgStop( "Não connectado ao servidor: " + cHost )
15 ENDIF
16 Return .f.
17 ENDIF
18 EndIf
19
20 Function AbreDB(...)
21
22 BEGIN SEQUENCE WITH {| oErr | Break( oErr ) }
23 If lRddLeto
24 If Leto_File(cHost+Db)
25 DbUseArea(.t.,"LETO",cHost+DB,apel,.T.,.F.,'PTISO')
26 Else
27 MsgStop('LetoDb Não Localizou o Arquivo: '+cHost+Db)
28 lRet := .f.
29 EndIf
30 Else
31 DbUseArea(.t.,'DBFCDX',dDados+DB,apel,.T.,.F.,'PTISO')
32 EndIf
33
34 Recover
35 If lRddleto
36 msginfo('Erro, abrindo Arquivo: '+cHost+Db+' Compartilhado')
37 Else
38 msginfo('Erro, abrindo Arquivo: '+dDados+Db+' Compartilhado')
39 EndIF
40 lRet := .f.
41 End Sequence
42
43 if Neterr()
44 MsgInfo('Usado de Forma Exclusiva, Em Outro Lugar.')
45 lRet := .f.
46 endif
- Seria somente implementar as rotinas acima em meus sistemas para que possa trabalhar com o LETODB?

Saudações,
Júlio.

RDD LETO Sem Mistério

Enviado: 26 Dez 2012 13:36
por Itamar M. Lins Jr.
Ola!
Sobre o TS já foi respondido.
Quanto a segurança, o leto tem criptografia de dados, e o acesso é via TCP/IP.
Pass_for_Login = 0 - if 1, user authentication is necessary to
login to the server;
Pass_for_Manage = 0 - if 1, user authentication is necessary to
use management functions ( Leto_mggetinfo(), etc. );
Pass_for_Data = 0 - if 1, user authentication is necessary to
have write access to the data;
Pass_File = "leto_users" - the path and name of users info file;
Crypt_Traffic = 0 - if 1, the data passes to the network encrypted;
Share_Tables = 0 - if 0 (default, this mode server was the only from the
start of a letodb project), the letodb opens all
tables in an exclusive mode, what allows to increase
the speed. If 1 (new mode, added since June 11, 2009),
tables are opened in the same mode as client
applications opens them, exclusive or shared, what
allows the letodb to work in coexistence with other
types of applications.
Sobre a localização dos DBF´s:
Pode rodar várias estâncias do Letodb em portas diferentes.
Por exemplo porta 2812 que é o padrão h:\xyz\financ
outra na porta 2813 g:\xyz\estoques... etc...
Sobre o motor SQL, é o mesmo principio. São feitas solicitações ao servidor e este retorna os resultados.

Como inicializar: ou via serviço do windows ou via autoexec isso irá depender de como o letodb foi compilado.

Código: Selecionar todos

#ifdef __WIN_DAEMON__

      StartServer()

#endif

#ifdef __WIN_SERVICE__

      IF cCommand != NIL
         IF Lower( cCommand ) == "install"
            IF leto_serviceInstall()
               WrLog( "LetoDB service has been successfully installed" )
            ELSE
               WrLog( "Error installing LetoDB service: " + Str( letowin_GetLastError() ) )
            ENDIF
            RETURN
         ELSEIF Lower( cCommand ) == "uninstall"
            IF leto_serviceDelete()
              WrLog( "LetoDB service has been deleted" )
            ELSE
              WrLog( "Error deleting LetoDB service: " + Str( letowin_GetLastError() )  )
            ENDIF
            RETURN
         ELSEIF Lower( cCommand ) == "test"
            StartServer()
            RETURN
         ELSE
            ? "LetoDB_mt { install | uninstall }"
         ENDIF
         RETURN
      ENDIF

      IF ! leto_serviceStart( "StartServer" )
         WrLog( "LetoDB service has had some problems: " + Str( letowin_GetLastError() ) )
      ENDIF

//!!!!!!!!!!!!!!!   DO WHILE win_serviceGetStatus() == WIN_SERVICE_RUNNING

#endif

#ifdef __LINUX_DAEMON__

      IF !leto_Daemon()
         WrLog( "Can't become a daemon" )
         RETURN
      ENDIF

      StartServer()

#endif
Saudações,
Itamar M. Lins Jr.

RDD LETO Sem Mistério

Enviado: 26 Dez 2012 21:00
por sygecom
Existe uma série de questão que devemos levar em conta. Uma delas é o código de como está projetado, muitas vez é desenvolvido para rodar alguns arquivos temporario na maquina local como c:\temp e quando coloca em TS isso vira tudo o mesmo C:\ e pode causar uma série de problemas colaterais.
Sem duvida o TS é muito mais rápido que LETODB(em rede e por internet), e também sem duvida o LETODB é mais seguro e mais rápido que DBFCDX.

RDD LETO Sem Mistério

Enviado: 29 Dez 2012 11:39
por alberto_dias
Amigos,
Parabens pelo incentivo do uso do RDD leto,
Estou testando, e já estou conseguindo, rodar o Servidor letodb.exe, Conectar ao Banco de Dados e Ler os registros,
mas não estou conseguindo usar a função Leto_File
Não sei onde estou errando, abaixo, coloquei uns dados do código, letodb.ini, se alguem puder me ajudar, agraceço muito, :%

Código: Selecionar todos

// TESTES LETODB 29/12/2012 AS 11:30 HS
Function Main
Local corant := SETCOLOR()
   CLS
   Set AutOpen on
   REQUEST DBFCDX,LETO
   DBSETDRIVER("dbfcdx")
   RDDSETDEFAULT( "LETO" )
   
   RESTORE FROM csconfig ADDITIVE
   
   // ARQUIVO LOCAL TEM QUE TER VIA DBFCDX
   USE ( "ARPARLOC" ) VIA "DBFCDX" NEW
   ARMCAMVAR()
   CLOSE 
   
   PRIVATE cPath := ALLTRIM(endserd)
   PRIVATE dirserd :=  cPath
   
   leto_disconnect()   
   IF ( leto_Connect( cPath ) ) == -1
      alert("Nao foi possivel conectar ao Servidor")
      close all
      quit
   endif
   DADOS := leto_mggetinfo()
   @ 01,01 SAY DADOS[1]
   @ 02,01 SAY DADOS[2]
   @ 03,01 SAY DADOS[3]
   @ 04,01 SAY DADOS[4]
   @ 05,01 SAY DADOS[5]
   @ 06,01 SAY DADOS[6]
   @ 07,01 SAY DADOS[7]
   @ 08,01 SAY DADOS[8]
   @ 09,01 SAY DADOS[9]
   @ 10,01 SAY DADOS[10]
   @ 11,01 SAY DADOS[11]
   @ 12,01 SAY DADOS[12]
   @ 13,01 SAY DADOS[13]
   @ 14,01 SAY DADOS[14]
   @ 15,01 SAY DADOS[15]
   @ 16,01 SAY DADOS[16]
   @ 17,01 SAY DADOS[17]
   @ 23,01 SAY cPath+" "+endserd+" "+dddosser 
   @ 24,01 SAY dirserd COLOR "W/B"
   if leto_file( dirserd+"cadprodu.dbf") = .t.  
       ALERT( "ENCONTRADO "+dirserd+" CADPRODU" )
   ELSE
      ALERT( "NAO ENCONTRADO "+dirserd+" CADPRODU" )
   ENDIF   
   use ( dirserd+"CADPRODU" ) New
   SET INDEX TO ( dirserd+"CADPRODU" )
   SET ORDER TO 2
   GO TOP   
   browse(1,1,22,78)
   close all
   LETO_DISCONNECT()
   SETCOLOR(corant)   
   CLS    
   quit
Return Nil

FUNCTION Armcamvar
   nc = FCOUNT()
   FOR av = 1 TO nc
       IF TYPE(FIELD(av)) <> 'M'
          nomecampo := FIELDNAME(av)
          nomevar   := nomecampo + "d"
          PUBLIC &nomevar
          &nomevar := &nomecampo
       ENDIF
   NEXT av
RETURN(.T.)

* FIM DESTE MODULO

Código: Selecionar todos

[MAIN]
Port = 2812
DataPath = G:\SISTEMA
Logfile = "letodb.log"
Default_Driver = CDX
Lower_Path = 0             ; 1, converter todos os caminhos para minúsculas
EnableFileFunc = 1         ; 1, Ativa leto_file(), leto_ferase(), leto_frename()
EnableAnyExt = 0           ; 1, é Ativado a criação de arquivos de dados (DBF)
Pass_for_Login = 0         ; 1, autenticação do usuário é necessária p/ acessar
Pass_for_Manage = 0        ; 1, a autenticação necessária p/ func Leto_mggetinfo()
Pass_for_Data = 0          ; 1, a autenticação necessária acesso aos dados
Pass_File = "leto_users"   ; caminho, arquivo de informações dos usuários
Crypt_Traffic = 0          ; 1, passa os dados pela a rede cripitografado

[DATABASE]
DataPath = G:\SISTEMA
Driver = CDX 

; NAO ALTERAR SEM CONSULTA PREVIA
; LETODB.INI ALTERADO EM 29/12/2012 AS 11:06 HS
; ANALISTA PARA CONSULTA: ALBERTO DIAS
; CENTRAL SOFTWARE INFORMATICA LTDA
; SERVIDOR ATUAL 192.168.0.11 PORTA 2812

Estou utilizando:
Harbour 3.0.0 (Rev. 16951)
Copyright (c) 1999-2011, http://harbour-project.org/
=============================================
Borland C++ 5.82 for Win32 Copyright (c) 1993, 2005 Borland
==============================================================
Leto DB Server v.2.09 ! INIT: DataPath=G:\SISTEMA, ShareTables=0, MaxUsers=500, MaxTables=5000, CacheRecords=10
======================================================================================================

RDD LETO Sem Mistério

Enviado: 29 Dez 2012 18:12
por asimoes
Prezados,

Alguém já testou o acesso com usuário e senha? não estou conseguindo sucesso.

RDD LETO Sem Mistério

Enviado: 30 Dez 2012 13:41
por asimoes
Pessoal,

Estou tentando o uso de uma função que eu fiz e funciona com o servidor netio no letodb.

Primeiro criei essa função no server.prg (\source\server)

E estou usando a função LETO_UDF()

Estou fazendo assim:

Código: Selecionar todos

cPasta:="BOLETOS_DB_"+HB_DTOC(Date(),"YYYY_MM_DD")+"-"+Left(StrTran(Time(),":"),4)
LETO_UDF("UDF_Backup",cPasta,"numero.dbf") 
Ocorre que os parametros passados para a função UDF_Backup estão entrando nulos, será que é um erro da função LETO_UDF?

Código: Selecionar todos

//Função no server.prg
FUNCTION UDF_Backup( cPasta, cArquivo )
LOCAL I, lErro:=.F., nErro
   HB_Default(@cArquivo,"")
   HB_Default(@cPasta,"DB_"+HB_DTOC(Date(),"YYYY_MM_DD")+"-"+Left(StrTran(Time(),":"),4))
   TRY
      IF !IsDir(cPasta)
         DirMake(cPasta)
      ENDIF
      __CopyFile("DB"+HB_PS()+cArquivo,cPasta+HB_PS()+cArquivo)
   CATCH
      lErro:=.T.
   END
RETURN lErro
Estou fazendo alguma coisa errada?
A versão do letodb é a 2.09

RDD LETO Sem Mistério

Enviado: 31 Dez 2012 15:24
por Itamar M. Lins Jr.
Sem duvida o TS é muito mais rápido que LETODB(em rede e por internet), e também sem duvida o LETODB é mais seguro e mais rápido que DBFCDX.
Depende, pois o TS manda as TELAS BMP para a estação, enquanto os dados de um DBF pode ser muito menor, por isso temos a opção no TS de diminuir as CORES, quanto mais resolução mais lento fica.
Já o LetoDB não tem nada disso, algumas vezes eu usei TS e Letodb, o Letodb foi mais rápido.
Seria o mesmo que afirmar que o TS é mais rápido que uma aplicação usando algum motor SQL tipo Oracle, PGSQL...
Uma coisa é retornar uma consulta SQL com 1.000.000 de registros outra coisa é otimizar para receber apenas 50 registros.
Podemos usar até HTML+hbscript/cgi+Letodb para aplicações WEB.
Outra coisa, numa rede local o letodb sempre foi mais rápido que o TS quando eu testei, é até mais rápido (as vezes) que uma aplicação usando DBFCDX local pois o LETODB tem "memória CACHE", buffers...
O TS depende do servidor, CPU, memória, configuração, se por algum motivo ficar algo consumindo os recursos no servidor, por exemplo aquele programinha anti virus ordinário, as estações ficam muito lentas usando TS, já os motores SQL´s da vida não sente tanto assim a lerdeza do servidor, sem falar no encomodo de fazer dois logins.
Qualquer browse, faz a renderização no lado do cliente o TS manda as telas já redenrizadas para a estação. Isso me encomoda eu não gosto, é similar a esses programas que existe de suporte remoto, logmein, teamviewer...

Saudações,
Itamar M. Lins Jr.

RDD LETO Sem Mistério

Enviado: 01 Jan 2013 10:13
por asimoes
Pessoal,

Descobri o problema do parêmetro:

Obrigatoriamente para o letodb no server.prg ou letoudf.prg deve ser informado o parâmetro nUserStru (1º parâmetro!!!) depois os parâmetros que realmente sua função vai usar.
Na chamada da função:

Com Leto_UDF:

Leto_UDF("UDF_Backup","TESTE","TESTE.DBF")

Código: Selecionar todos

FUNCTION UDF_Backup( nUserStru, cPasta, cArquivo )
LOCAL I, lErro:=.F., nErro
   HB_Default(@cArquivo,"")
   HB_Default(@cPasta,"DB_"+HB_DTOC(Date(),"YYYY_MM_DD")+"-"+Left(StrTran(Time(),":"),4))
   TRY
      IF !IsDir(cPasta)
         DirMake(cPasta)
         //strfile(cArquivo+HB_EOL(),"TESTE.LOG",.T.)
      ENDIF
      __CopyFile("DB"+HB_PS()+cArquivo,cPasta+HB_PS()+cArquivo)
   CATCH
      lErro:=.T.
   END
RETURN lErro

RDD LETO Sem Mistério

Enviado: 01 Jan 2013 11:23
por asimoes
O que eu mais gostei nesta versão do LetoDb é a criação de serviço windows pelo próprio letodb, algum tempo atrás eu usava um programa de terceiros para isso.
A possibilidade de rodar funções UDF no servidor eu achei muito legal. O letodb no momento está oferecendo muito mais recursos que o seu irmão netio do harbour.

RDD LETO Sem Mistério

Enviado: 01 Jan 2013 11:37
por asimoes
Se for rodar como serviço tem que usar a função hb_dirbase(), problemas do windows...
Não sei é isto, quando você cria o serviço não tem a pasta de trabalho para informar.
Percebi isso, porque eu fiz uma versão console e outra serviço, com a versão console usei o camilho relativo para criar a pasta e copiar o arquivo, com a versão serviço fui obrigado a usar o caminho absoluto (hb_dirbase())

Código: Selecionar todos

FUNCTION UDF_Backup( nUserStru, cPasta, cArquivo )
LOCAL I, lErro:=.F., nErro
   HB_Default(@cArquivo,"")
   HB_Default(@cPasta,"DB_"+HB_DTOC(Date(),"YYYY_MM_DD")+"-"+Left(StrTran(Time(),":"),4))
   TRY
      IF !IsDir(hb_dirbase()+cPasta)
         DirMake(hb_dirbase()+cPasta)
      ENDIF
      __CopyFile(hb_dirbase()+"DB"+HB_PS()+cArquivo,hb_dirbase()+cPasta+HB_PS()+cArquivo)
   CATCH
      lErro:=.T.
   END
RETURN lErro