Clipper On Line • Ver Tópico - LetoDb e Harbour, como usar.
Mudar para estilo Clássico
Discussão sobre Banco de Dados e RDDs para Clipper/[x]Harbour.
Postar uma resposta

LetoDb e Harbour, como usar.

05 Abr 2015 16:23

Prezados...

Estou implementando o LetoDB, consegui compilar, gerar as libs, tanto para MinGw, como para Minigui Extended (pois tenho 2 projetos, um console e outro Gui), mas estou me TRAVANDO no FILE(), configurei no letodb.ini, EnableFileFunc = 0, portanto não estou usando leto_FILE, mas insiste em dizer que a tabela tal, não existe...minha tabela se chama ADMIN.ADM, dai também configurei no letodb.ini, EnableAnyExt = 1, o que mais tenho que fazer... segui os passos e parei aqui... portanto, peço ajuda...

F.Freire

LetoDb e Harbour, como usar.

05 Abr 2015 17:02

O engraçado é que retiro o FILE...e dou sequencia...ele abre o arquivo ADMIN.ADM, pois vejo no manager, que esta aberto, mas não funciona se checar se o arquivo existe...segue como estou fazendo...

Aqui ele da msg que o arquivo não existe !!
Código:
// onde _PathAdm = "//127.0.0.1:2812/"
IF !FILE( _PathAdm + 'ADMIN.ADM' )
   TONE( 321, 2 )
   MSGBOX1( 'Arquivo Admin.ADM nÆo existe !!!', 'Erro...',,'&OK' )
   RETURN( .F. )
END


Mas aqui abre o arquivo normalmente
Código:
// na função NETUSE... esta ajustado para o leto ser o RDD

IF !NETUSE( _PathAdm + 'ADMIN.ADM', 'Adm', SHARE )
   MSGBOX1( Erro na abertura do arquivo...', 'Erro...',,'&OK' )
   RETURN( .F. )
END


O arquivo letodb.ini (que esta na pasta, onde esta o letodb.exe)
[Main]
; server port number;
Port = 2812

; connection timeout;
; TimeOut = -1

; path to a data directory on a server;
DataPath = c:\teste

; path and name of a log file;
Logpath = letodb.log

; default RDD to open files on server ( CDX/NTX );
Default_Driver = CDX

; memo type ( FPT/DBT ). Default: FPT for DBFCDX, DBT for DBFNTX;
; Memo_Type = FPT

; if 1, convert all paths to lower case;
Lower_Path = 0

; if 1, using of file functions ( leto_file(),
; leto_ferase(), leto_frename() is enabled;
EnableFileFunc = 0

; if 1, creating of data tables and indexes with
; any extention, other than standard ( dbf,cdx,ntx )
; is enabled;
EnableAnyExt = 1

; if 1, user authentication is necessary to
; login to the server;
Pass_for_Login = 0

; if 1, user authentication is necessary to
; use management functions ( Leto_mggetinfo(), etc. );
Pass_for_Manage = 0

; if 1, user authentication is necessary to
; have write access to the data;
Pass_for_Data = 0

; the path and name of users info file;
; Pass_File = "leto_users"

; if 1, the data passes to the network encrypted;
; Crypt_Traffic = 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.
Share_Tables = 1

; The number of records to read into the cache
; Cache_Records = 10

; Maximum number of shared variables
; Max_Vars_Number = 10000

; Maximim size of a text variable
; Max_Var_Size = 10000

; Global function letodb RDDI_TRIGGER
; Trigger = <cFuncName>

; Global function letodb RDDI_PENDINGTRIGGER
; PendingTrigger = <cFuncName>

; Number of tables
; Tables_Max = 5000

; Number of users
; Users_Max = 500

; Debug level
; Debug = 0

; if 1, SET HARDCOMMIT OFF
; Optimize = 0

; SET AUTORDER setting
; AutOrder = 0

; _SET_FORCEOPT setting
; ForceOpt = 0

;[DATABASE]
Datapath = c:\teste
driver = cdx


F.Freire

LetoDb e Harbour, como usar.

05 Abr 2015 18:55

Está correto.
File() não vai funcionar mesmo.
use: ENABLEFILEFUNC = 1, IF !LETO_FILE( _PathAdm + 'ADMIN.ADM' )

Se está no mesmo servidor use: FILE("c:\teste\admin.adm") sem o IP.

Saudações,
Itamar M. Lins Jr.

LetoDb e Harbour, como usar.

05 Abr 2015 18:57

Mas ja usei leto_file, da forma que vc colocou e também não funciona...habilitando EnableFileFunc = 1 em letodb.ini....

Ou tenho que quando for localhost...usar o caminho (c:\teste\...) para checar se o arquivo existe, e quando os dados estiverem em outra maquina/ip...dai posso usar o ip...é isso ?

LetoDb e Harbour, como usar.

05 Abr 2015 20:05

Não.
Leto_File("//127.0.0.1:2812/adm.adm") tem que funcionar ai. Aqui funciona muito bem.

Aqui eu uso toda hora, e funciona.
Onde está o arquivo 'ADMIN.ADM' ?
O Leto só enxerga onde estiver configurado o arquivo.

; path to a data directory on a server;
DataPath = c:\teste

Coloque mais uma barra: DataPath = c:\teste\

E teste p/ ver se é isso.

Saudações,
Itamar M. Lins Jr.

LetoDb e Harbour, como usar.

09 Abr 2015 20:53

Nobre colega...

Batendo muita cabeça ainda com o Letodb...

Eu notei que onde esta o letodb.exe, é gerado um arquivo de log... dai percebi que quando carrego o serviço do leto... ele grava o seguinte no log...

04/09/15 20:45:00: Leto DB Server has been started.

Leto DB Server v.2.15 ! INIT: DataPath=, ShareTables=0, MaxUsers=500, MaxTables=5000, CacheRecords=10

04/09/15 20:45:00: C:\FFSoft\DESENV\hmg\letodb\bin\letoudf.hrb has been loaded.


Veja que o DataPath, esta em branco... mas no letodb.ini esta configurado C:\FF\, dai não entendi nada, o letodb.ini, esta no mesmo diretório do letodb.exe...

Se esta configurado DataPath = C:\FF\ e também ShareTables=1... pq esta lendo em branco e 0... onde tem que ficar o letodb.ini ??

F.Freire

LetoDb e Harbour, como usar.

09 Abr 2015 21:58

Outra dúvida....

Porque assim funciona...
Código:
x := leto_udf("UDF_CRIPTO",Nome,"R")
ALERT(X)


e assim não...dá ERROR LETO/1001 Função indefinida

Código:
zLetoDB := //127.0.0.1:2812/
_Chave   := 'LETO_UDF("UDF_CRIPTO",Nome,"R")'
_Tag     := ALLTRIM( (_ANtx)->Tag )
_NomeInd := zLetoDB+"Teste"

INDEX ON &(_Chave) TAG &(_Tag) TO &(_NomeInd)


Os 2 códigos no mesmo sistema...portanto, tudo que carrega para um, carrega para o outro...

To ficando mais careca do que ja sou !!!! kkkk

F.Freire

LetoDb e Harbour, como usar.

09 Abr 2015 22:32

Opa... baixei a versão 2.13 e apareceu conforme o letodb.ini... será que a versão 2.15 tem problemas ???

LetoDb e Harbour, como usar.

09 Abr 2015 22:41

Estou usado a versão de hoje do SVN.
Coloque dessa forma seu letodb.ini

Código:
[MAIN]
Port = 2812             
Logfile = "letodb.log"   
DEFAULT_DRIVER = CDX     
DATAPATH = c:\clientes\xyz\
ENABLEFILEFUNC = 1
CRYPT_TRAFFIC = 0
PASS_FOR_LOGIN = 0
PASS_FOR_MANAGE = 0
PASS_FOR_DATA = 0
Share_Tables  = 1
Cache_Records = 100
[DATABASE]
DataPath = c:\clientes\xyz\
Driver = CDX

Código:
Leto DB Server v.2.15 ! INIT: DataPath=c:\clientes\xyz, ShareTables=1
, MaxUsers=500, MaxTables=5000, CacheRecords=100


Minúsculos/maiúsculos, etc... deixa da forma que está esse e teste. Aqui funciona.

Saudações,
Itamar M. Lins Jr.

LetoDb e Harbour, como usar.

09 Abr 2015 22:59

...Função indefinida

O funcionamento é o mesmo de um motor SQL.
Use & ou () antes de indexar.
Código:

cQuery := " cod_client == '" + cCodCl + "' .and. dtos(vencimento) >= '"+dtos(dIni)+"' .and. dtos(vencimento) <= '"+dtos(dFim)+"'"
cOrdBy := " dtos(emissao) + cod_venda "

Index on &cOrdBy Tag re99  for &cQuery temporary eval {||oBar:Step(),.t.}

ou

cQuery := ""
If !empty(cCodFornecedor)
   cQuery += "'" + cCodFornecedor + "' == cod_fornec .AND. "
EndIf
If !Empty(cLoja)
   cQuery += " '" + cLoja + "' == loja .AND. "
EndIf
cQuery += " dtos(data_vcto) >= ["+DToS(dIni)+"] .AND. dtos(data_vcto) <= ["+DToS(dFim)+"] .AND. empty(data_pgto) "
cOrdBy := " dtos(data_vcto)+duplicata "
Index on &cOrdBy TAG pg99 FOR &cQuery temporary additive eval {||oBar:Step(),.T.}



Não pode ter função nenhuma, nem variáveis nas strings enviadas. Há não ser que tenha declarado elas no servidor.

Saudações,
Itamar M. Lins Jr.

LetoDb e Harbour, como usar.

09 Abr 2015 23:02

Sobre o letodb.ini... acabei de copiar conforme me passou e funcionou... devia ser alguma coisa no arquivo...tenho que habilitar alguma opção para enxergar as tabelas dentro do DATAPATH, pois por enquanto, estou tendo que copiar tudo na pasta principal, ou seja, se eu configurar DATAPATH=C:\TESTE\, esta lendo apenas o que esta em C:\TESTE\..... o que esta dentro das sub-pastas, não acha...alguma sugestão ?

Sobre o que relatei da função CRIPTO, agi assim:

Em um arquivo chamado LETOUDF.PRG ficou assim:

Código:
FUNCTION UDF_CRIPTO( nUserStru, aString, vTipo, Serie )

// aString  -- String a ser criptografada/descriptografada
// vTipo    -- Tipo 'C' Criptografa - 'R' Descriptografa
// Serie    -- Utilizada como base no calculo

LOCAL  cWord, cChave, nPos := 1, vChave := 0, nCnt, Chave := ""
LOCAL  cString := aString, nSerie, cRetr := ""

nSerie := STRZERO( Serie, 6 )
nSerie := VAL( SUBSTR( nSerie, 1, 1 ) ) + VAL( SUBSTR( nSerie, 2, 1 ) ) +;
          VAL( SUBSTR( nSerie, 3, 1 ) ) + VAL( SUBSTR( nSerie, 4, 1 ) ) +;
          VAL( SUBSTR( nSerie, 5, 1 ) ) + VAL( SUBSTR( nSerie, 6, 1 ) )

FOR nCnt = 10 TO 60
    Chave += CHR( nCnt + nSerie )
NEXT nCnt

DO WHILE nPos <= LEN( cString )
   cWord  := SUBSTR( cString, nPos, 1 )
   cChave := SUBSTR( Chave,   nPos, 1 )
   IF vTipo = "C"
      vChave := vChave + ASC( cChave )
      cRetr  := cRetr  + CHR( ASC( cWord ) + vChave )
   ELSEIF vTipo = "R"
      vChave := vChave - ASC( cChave )
      cRetr  := cRetr  + CHR( ASC( cWord ) + vChave )
   ENDIF
   nPos++
ENDDO

RETURN( cRetr )


Dai compilei dessa forma:
harbour letoudf.prg -gh -n -w -iC:\HARBOUR\INCLUDE


Gerou o arquivo letoudf.hrb, que coloquei na pasta que esta o letodb.exe... baixo o serviço e carrego novamente o serviço... consequentemente ele lê o arquivo com as funções e coloca no log assim:

04/09/15 23:16:12: Leto DB Server has been started.

Leto DB Server v.2.15 ! INIT: DataPath=c:\ff, ShareTables=1, MaxUsers=500, MaxTables=5000, CacheRecords=100

04/09/15 23:16:12: C:\FFSoft\DESENV\hmg\letodb\bin\letoudf.hrb has been loaded.


Dai como demonstrei acima, executando o LETO_UDF("UDF_CRIPTO",NOME."C")...funciona normal...só da erro quando tento gerar um indice.......o que poderia ser ???

Segui o que o TOLEDO, informou uns posts atrás, será que não fiz alguma coisa ???

F.Freire

LetoDb e Harbour, como usar.

10 Abr 2015 01:04

C:\TESTE\..... o que esta dentro das sub-pastas, não acha...alguma sugestão ?


O leto enxerga as subpastas.
Código:
DATAPATH = c:\dados\

Ele vai enxergar por exemplo,
c:\dados\2015\

Código:
   if Leto_file(dServidor+mAno+"\"+ArqInv) //-> "MeuIp:2812\2015\inventario2015.dbf"

Atenção! Não coloque MeuIp:2812\c:\dados\2015\inventario2015.dbf, desta forma está errado!

Saudações,
Itamar M. Lins Jr.

LetoDb e Harbour, como usar.

10 Abr 2015 08:22

FFreire escreveu:executando o LETO_UDF("UDF_CRIPTO",NOME."C")...funciona normal...só da erro quando tento gerar um indice

Resta saber se é possível usar a função LETO_UDF() em uma macro na criação de índices.

Abraços,

LetoDb e Harbour, como usar.

10 Abr 2015 09:12

Ok... sobre ver nas sub-pastas, entendi, que devo informar ao letodb que o arquivo esta em determinado lugar, tinha entendido que era só apontar para a pasta principal e ele se encarregava de procurar os arquivos, da pasta principal indicada em diante... mas ficou claro.......Obrigado !

Sobre a questão de usar macro, gostaria de saber se alguém ja usou dessa forma, se não tiver jeito terei que fazer de outra forma... mas enfim... vamos ver se tem alguma utilização... fico no aguardo.....

Muito obrigado a todos... e vamos em frente !!!

F.Freire

LetoDb e Harbour, como usar.

10 Abr 2015 11:08

Prezados...

Novamente, venho solicitar ajuda, pois estou tentando o seguinte...

Como não esta funcionando. o esquema da macro na geração do indices, fiz isso:

// Atribuo ao leto a variavel
LETO_VARSET( "Main", "_Chave","Codigo", LETO_VCREAT )

// Se eu mandar exibir, ok também...
x := leto_varGet( "Main","_Chave" )
alert(x) // Exibe "Codigo" que é o que foi atribuido...

// Dai mando indexar...
zLetoDB := "//127.0.0.1:2812/"
INDEX ON LETO_UDF(zLetoDB+"UDF_CRIPTO",(_Chave),"R") TAG &_Tag TO &_NomeIndFim

E da erro...LETO/1003 Variável não existe...

Por favor... alguma luz ??? rs rs

F.Freire
Postar uma resposta