Clipper On Line • Ver Tópico - RDD LETO Sem Mistério
Página 1 de 11

RDD LETO Sem Mistério

MensagemEnviado: 04 Jun 2008 22:31
por sygecom
Bom como peguei para testar e usar em um pequeno sistema a RDD LETO então resolvi postar e deixar aqui o caminho das pedra.

Primeiro devemos baixar o Projeto LETODB, para Isso vou citar três possibilidades:
1º Opção:
1ºBaixar o projeto LetoDB direto do SourceForge.net usando o TortoiseCVS. Deve instalar o TortoiseCVS e reiniciar o micro.Logo após reiniciar o micro vamos agora baixar o projeto(letodb), siga os passo abaixo:
1º Passo) No Explorer, crie uma pasta vazia com o Nome do Projeto que vamos baixar no caso letodb.
2º Passo) Clique com o botão direito do mouse em cima dessa pasta "letodb", e selecione a seguinte opção "CVS Obter Módulo..."
3º Passo) Preencha os campos CVSROOT e MÓDULO da ABA Módulo.
#CVSROOT
:pserver:anonymous@letodb.cvs.sourceforge.net:/cvsroot/letodb
#Módulo
letodb
4º Passo) Clique no botão "OK", logo em seguida o Projeto já vai começar a baixar do sourceforge.net e vai criar todos os seus sub-diretórios automaticamente.

2º Opção:
Pode baixar os fontes do ultima ZIP que foi postado no Projeto Letodb no SourceForge.net. Clique Aqui para baixar

Nota: Não é recomendável baixar os fontes pelo LINK por que as atualizações mais recentes como correções e exemplo não esta incluso. Esse ultimo pacote de fonte que foi postado é do dia: 27/03/2008

3º Opção:
Pode baixar por esse link do 4Shared.com que postei hoje dia 04/06/2008, nesse link tem a RDDLETO.LIB compilada para uso com xharbour 1.0.0 e BCC 5.5.1, junto nesse ZIP, tem também um README.TXT traduzido e com algumas pequenas observações, alem letodb.exe e o manager.exe compilados

Depois em Qualquer uma das três opções acima você pode atualizar a pasta do projeto, basta um clique com o botão direito do mouse sobre a pasta principal, e selecione a seguinte opção "CVS Atualizar". (Tem que ter o TortoiseCVS instalado no micro)

Agora vamos gerar a LIB RDDLETO.LIB.
Vamos dizer que você baixou o projeto do zero, usando a 1º opção. Primeiro para poder compilar com xharbour a RDDLETO tem que remover um # da frente de XHARBOUR = yes no seguinte arquivo: "makefile.bc" (Na terceira opção já esta removido)
Para gerar a LIB deve ter o xharbour e o Bcc configurado e com a seguinte variável de ambiente configurada:
SET HB_PATH=C:\xHARBOUR

Caso não tenha o xharbour e bcc configurado, pode baixar Clicando Aqui, que esse instalador faz tudo sozinho para você.
Tendo tudo configurado, basta entrar no Prompt do Ms-Dos e se posicionar na pasta do projeto "letodb" e rodar o "MAKE_B32.BAT" que o mesmo vai gerar a RDDLETO.LIB e o LETODB.EXE(executavel que fica rodando no servidor como serviço)
Para compilar o manager, deve se posicionar pelo Prompt do Ms-Dos na pasta "\letodb\utils\manager" e digitar: "BLD MANAGER" ele vai gerar o manager.exe(tem que ter as lib da Hwgui compiladas para compilar esse manager.exe), tem um outro console.prg, não testei mas deve ser a mesma coisa "bld console".

Bom agora já temos tudo para iniciar o uso da RDDLETO, para iniciar o uso, deve deixar o letodb.exe rodando no servidor(onde se encontra os DBF) e no aplicativo cliente deve ter no .PRG principal as seguintes linhas:

REQUEST LETO
RDDSETDEFAULT( "LETO" )

Local cServer := "//192.168.254.13"  // endereço do servidor(pode ser um NO-IP ou algum outro DNS)
Local cPorta  := ":2812/"  // essa porta deve esta liberado no modem do servidor

IF ( leto_Connect( cServer+cPorta ) ) == -1
     alert("Não foi possivel conectar ao Servidor")
      Return .F.
   ENDIF
endif

Obs: Tem como usar o "SET PATH TO" para abrir os DBF em pasta diferentes.
Para compilar usando o hbmake, basta pegar a RDDLETO.LIB e colocar dentro da pasta "\xharbour\lib" e marcar uso de LIB's externas e marcar a RDDLETO.LIB na lista de LIB's. Caso use outro make, é só linkar a RDDLETO.LIB.

Em anexo segue o README.TXT traduzido e com algumas observações.

Subi para o 4Shared.com uma agenda em HWGUI com fontes que demostra o uso da RDDLETO.Pode baixar clicando aqui
Vou deixar por 5(Cinco) dias a contar de hoje(04/06/2008) os DBF on-line para quem quiser testar a RDDLETO em ação. Logo após vou parar o letodb.exe do servidor.

Sem Mais...
Leonardo Machado

Re: RDD LETO Sem Mistério

MensagemEnviado: 26 Jun 2008 15:50
por filizola
HbMake v1.17 - xHarbour Make Utility
Copyright (C) 2000-2005 xHarbour project - http://www.xharbour.org
xHarbour build 0.99.70 Intl. (SimpLex) / Borland C++ 5.5.1

Compiling :
+------------[ 0% ]--------------+
¦ ¦
+----------------------------------+

C:\BCC55\BIN\ilink32 @makefile.lnk
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external '_hb_errFuncName' referenced from C:\XHARBOUR\LIB\RDDLETO.LIB|hbip
Error: Unresolved external '_hb_itemPutDTL' referenced from C:\XHARBOUR\LIB\RDDLETO.LIB|leto1
Error: Unresolved external '_hb_numDecConv' referenced from C:\XHARBOUR\LIB\RDDLETO.LIB|leto1
Error: Unresolved external '_hb_itemGetT' referenced from C:\XHARBOUR\LIB\RDDLETO.LIB|leto1

vc poderia me ajudar ?? tenho interesse em utilizar este recurso....

desde já agradeço.

RDD LETO Sem Mistério

MensagemEnviado: 26 Jun 2008 17:56
por filizola
tudo bem compilei com a versão 1.0 e ok conecta como servidor porem nao abre a tabela.

function main()

REQUEST LETO
RDDSETDEFAULT( "LETO" )

cPath :="//192.168.10.27:2812/"

leto_disconnect()
IF leto_Connect( cPath )== -1
   alert("Não foi possivel conectar ao Servidor")
   Return .F.
ENDIF

cls
if leto_file(cPath+"d_placas")
   alert("OK Achou")
   else
   alert("Nao Achou, que lama")
   leto_disconnect()
   close data
   quit
endif

use ( cServer+cPorta+"d_placas")
@ 10,10 say nome
inkey(0)
close data
leto_disconnect()

return nil

Re: RDD LETO Sem Mistério

MensagemEnviado: 27 Jun 2008 13:28
por sygecom
Olá Filizola,
Que erro esta dando ?
Você você baixou o exemplo que postei em Hwgui ?

E veja que linha abaixo seu PATH esta errado, sendo que vc estaria usando somente cPath !!!
use ( cServer+cPorta+"d_placas")

E se baixou a rddlib do link que postei vc deve atualizar ela da CVS ou baixar o link de novo pq houve uma correção de um BUG em LETO_FILE() e criação de novas funções como "LETO_PATH(cPath)".

Opcionalmente vc pode usar tmb. o letodb.ini junto com o "letodb.exe" que vai rodar no servidor.
Abaixo um exemplo de um letodb.ini :
[MAIN]
Port = 2812
DataPath = \dados
Logfile = "letodb.log"
Default_Driver = CDX
EnableFileFunc = 1

Onde:
"Port" é o numero da porta liberada no servidor, e configurada no modem para fazer o redirecionamento para o IP do servidor.
"DataPath" é o local onde se encontra os DBF e CDX lá no servidor, no meu caso coloquei em C:\DADOS no servidor.
"Logfile" é um LOG usado pelo letodb.exe para guardar informações como hora e data que deu o start, stop, e etc...
"Default_Driver" é o tipo de rrd driver que estou usando no caso "CDX" mas pode ser "NTX" tmb.
"EnableFileFunc" é para ativar o uso de funções do LETO_ (leto_file(), leto_ferase(), leto_frename()e etc..)

Re: RDD LETO Sem Mistério

MensagemEnviado: 27 Jun 2008 17:04
por filizola
na verdade nem mudei o path embaixo porque nao passa do if leto_file() . baixei do link, de qualquer forma vou fazer todas as possibilidades novamente. agradeço muito sua atenção. se realmente funcionar será um grande passo para se fazer acesso remoto sem compartilhamento de pastas, cadastramento de senhas em terminal service e etc...

desde já, obrigado.

Re: RDD LETO Sem Mistério

MensagemEnviado: 01 Jul 2008 14:46
por filizola
maravilha, funcionou beleza. agora a duvida é exatamente sobre os bugs abaixo, eu fui pelo cvs e compilei, mas o LETO_FILE() sempre retorna falso e nao consegui funcionar o leto_path(cPath)

ex: IF LETO_FILE(cpath+"d_placas")
alert("Achou o arquivo")
ELSE
alert("Nao Achou")
ENDIF

"E se baixou a rddlib do link que postei vc deve atualizar ela da CVS ou baixar o link de novo pq houve uma correção de um BUG em LETO_FILE() e criação de novas funções como "LETO_PATH(cPath)"."

Re: RDD LETO Sem Mistério

MensagemEnviado: 01 Jul 2008 15:06
por filizola
obs : leto_file() funcionou, faltava a extensão do arquivo, ex leto_file("arquivo.dbf")

agora o leto_path() da o erro abaixo ao compilar

HbMake v1.20 - xHarbour Make Utility
Copyright (C) 2000-2007 xHarbour project - http://www.xharbour.org
xHarbour build 1.0.0 Intl. (SimpLex) / Borland C++ 5.5.1

Compiling :
+------------[ 0% ]--------------+
¦ ¦
+----------------------------------+

C:\BCC55\BIN\ilink32 @makefile.lnk
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external '_HB_FUN_LETO_PATH' referenced from C:\XHARBOUR\PROJ
CT\OBJ\TESTE.OBJ

Re: RDD LETO Sem Mistério

MensagemEnviado: 01 Jul 2008 15:50
por filizola
use indices ntx que esta configurado no leto.ini

como abrir um arquivo com seu indice.

ex: use ( cPath+"d_placas") index ( cPath+"d_placas") new

isso nao esta funcionando .....

Re: RDD LETO Sem Mistério

MensagemEnviado: 04 Jul 2008 23:17
por sygecom
filizola escreveu:use indices ntx que esta configurado no leto.ini

como abrir um arquivo com seu indice.

ex: use ( cPath+"d_placas") index ( cPath+"d_placas") new

isso nao esta funcionando .....


use ( cPath+"nome_dbf") alias nome_alias shared // pode ser excl, readonly e etc...
Set index to ( cPath+"nome_indice")

Re: RDD LETO Sem Mistério

MensagemEnviado: 08 Jul 2008 14:25
por filizola
Eis meu codigo e o error.log

function main()

REQUEST LETO
RDDSETDEFAULT( "LETO" )

cPath :="//192.168.10.27:2812/"

leto_disconnect()
IF leto_Connect( cPath )== -1
   alert("Não foi possivel conectar ao Servidor")
   Return .F.
ENDIF

use ( cPath+"cea400") new
dbedit()                     &&& ate aqui funciona

set index to ( cPath+"ceb400")
dbedit()

close data
leto_disconnect()
return nil


Arquivo log.

----------------------------- xHarbour Error Log ------------------------------

Date...............: 07/08/08
Time...............: 14:31:49

Application name...: C:\xharbour\project\teste.exe
Workstation name...: MARCELO
Available memory...: 52492
Current disk.......: C
Current directory..: xharbour\project
Free disk space....: 21330509824

Operating system...: Windows XP Professional 5.01.2600 Service Pack 2
xHarbour version...: xHarbour build 1.0.0 Intl. (SimpLex)
xHarbour built on..: Nov 8 2007 09:23:44
C/C++ compiler.....: Borland C++ 5.5.1
Multi Threading....: NO
VM Optimization....: 0

Current Area ......:1

-------------------------- Environmental Information --------------------------

SET ALTERNATE......: OFF
SET ALTFILE........:
SET AUTOPEN........: ON
SET AUTORDER.......: 0
SET AUTOSHARE......: 0
SET BACKGROUNDTASKS: OFF
SET BACKGROUNDTICK.: 1000
SET BELL...........: OFF
SET BLINK..........: .T.
SET CANCEL.........: ON
SET CENTURY........: OFF
SET COLOR..........: W/N,N/W,N/N,N/N,N/W
SET CONFIRM........: OFF
SET CONSOLE........: ON
SET COUNT..........: 0
SET CURSOR.........: 1
SET DATE FORMAT....: MM/DD/YY
SET DBFLOCKSCHEME..: 0
SET DEBUG..........: OFF
SET DECIMALS.......: 2
SET DEFAULT........:
SET DELETED........: OFF
SET DELIMCHARS.....: ::
SET DELIMETERS.....: OFF
SET DEVICE.........: SCREEN
SET DIRCASE........: 0
SET DIRSEPARATOR...: \
SET EOL............: 13
SET EPOCH..........: 1900
SET ERRORLOG.......: ERROR.LOG,.F.
SET ERRORLOOP......: 8
SET ESCAPE.........: ON
SET EVENTMASK......: 128
SET EXACT..........: OFF
SET EXCLUSIVE......: ON
SET EXIT...........: OFF
SET EXTRA..........: OFF
SET EXTRAFILE......:
SET FILECASE.......: 0
SET FIXED..........: OFF
SET FORCEOPT.......: OFF
SET GTMODE.........: 1
SET HARDCOMMIT.....: ON
SET IDLEREPEAT.....: ON
SET INSERT.........: OFF
SET INTENSITY......: ON
SET LANGUAGE.......: EN
SET MARGIN.........: 0
SET MBLOCKSIZE.....: 0
SET MCENTER........: OFF
SET MESSAGE........: 0
SET MFILEEXT.......:
SET OPTIMIZE.......: ON
SET OUTPUTSAFETY...: ON
SET PATH...........:
SET PRINTER........: OFF
SET PRINTERJOB.....:
SET PRINTFILE......: PRN
SET SCOREBOARD.....: ON
SET SCROLLBREAK....: ON
SET SOFTSEEK.......: OFF
SET STRICTREAD.....: OFF
SET TRACE..........: ON
SET TRACEFILE......: TRACE.LOG
SET TRACESTACK.....: 2
SET TRIMFILENAME...: .F.
SET TYPEAHEAD......: 50
SET UNIQUE.........: OFF
SET VIDEOMODE......: 0
SET WRAP...........: OFF

---------------------------Detailed Work Area Items----------------------------

Work Area No ......: 1
Alias .............: CEA400
Current Recno .....: 1
Current Filter ....:
Relation Exp. .....:
Index Order .......: 0
Active Key ........:

-------------------- Internal Error Handling Information ---------------------

Subsystem Call ....: LETO
System Code .......: 1021
Default Status ....: .F.
Description .......: Data type error
Operation .........:
Arguments .........:
Involved File .....: -003:21-1003
Dos Error Code ....: 0

Trace Through:
----------------
ORDLISTADD : 0 in Module:
MAIN : 17 in Module: TESTE.PRG

############################## Video Screen Dump ##############################

+--------------------------------------------------------------------------------+
| CODIGO PRODUTO FORNE GRUPO CUSTO |
|ÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄ|
| 0207 ³ ESTANTE CLEAN MARFIM ³ 040 ³ 011 ³ 0.00 |
|Error LETO/1021 Data type error: -003:21-1003 ³ 038 ³ 011 ³ 0.00 |
| 0166 ³ CADEIRA VENUS MARFIM CHENILE PALHA -P UN ³ 030 ³ 005 ³ 0.00 |
|Error at ...: ORDLISTADD(0) in Module: ³ 012 ³ 011 ³ 0.00 |
|Called from : MAIN(17) in Module: TESTE.PRG ³ 015 ³ 014 ³ 0.00 |
| 0208 ³ ESTANTE MODULADOS MADRI MARFIM ³ 041 ³ 011 ³ 0.00 |
| 0206 ³ ESTANTE LARISSA 225 MARFIM ³ 038 ³ 011 ³ 0.00 |
| 0471 ³ BELICHE SUCUPIRA GARCIA ³ 052 ³ 027 ³ 0.00 |
| 0179 ³ BARZINHO SAN REMO MARFIM ³ 032 ³ 006 ³ 0.00 |
| 0240 ³ MESA FONE LIDER MARFIM ³ 005 ³ 013 ³ 0.00 |
| 0584 ³ BAU SUCUPIRA C/ 2 GAVETAS ³ 019 ³ 031 ³ 0.00 |
| 0467 ³ BELICHE SUCUPIRA ³ 056 ³ 027 ³ 0.00 |
| 0468 ³ BELICHE MARFIM ³ 064 ³ 027 ³ 0.00 |
| 0469 ³ BELICHE MOGNO ³ 064 ³ 027 ³ 0.00 |
| 0319 ³ TECIDO BERLIM ³ 011 ³ 019 ³ 0.00 |
| 0332 ³ BICAMA PORTINARI ³ 011 ³ 021 ³ 0.00 |
| 0328 ³ BICAMA SIMPLES ³ 081 ³ 021 ³ 0.00 |
| 0330 ³ BICAMA VERSATIL TECIDO EXTRA ³ 010 ³ 021 ³ 0.00 |
| 0162 ³ BUFFET 4 PTS RIGORE MARFIM ³ 029 ³ 005 ³ 0.00 |
| 0344 ³ GUARDA ROUPA 4 PTS ELEGANCE MARFIM ³ 055 ³ 023 ³ 0.00 |
| 0340 ³ GUARDA ROUPA 3 PTS NOVO HORIZONTE MARFIM ³ 082 ³ 023 ³ 0.00 |
| 0174 ³ CADEIRA GERMANY MARFIM ³ 004 ³ 005 ³ 0.00 |
| 0160 ³ CADEIRA OLINDA MARFIM ³ 029 ³ 005 ³ 0.00 |
+--------------------------------------------------------------------------------+

Re: RDD LETO Sem Mistério

MensagemEnviado: 11 Jul 2008 12:24
por sygecom
Realmente fiz um teste com NTX e deu problema tmb. acontece que com o CDX eu uso SET AUTOOPEN ON que abre os indice automaticamente. se tiver a chance de migrar para CDX e usar com AUTOOPEN, vera que da certo.

Re: RDD LETO Sem Mistério

MensagemEnviado: 11 Jul 2008 15:38
por filizola
obrigado pela atenção, vou mudar e testar

Re: RDD LETO Sem Mistério

MensagemEnviado: 13 Nov 2009 16:01
por Hasse
Boa tarde.

Eu já havia compilado várias vezes uma APP e hoje tentei ir adiante no trabalho, e ao compilar o aplicativo, dá o seguuinte erro:
HbMake v1.30 - xHarbour Make Utility
Copyright (C) 2000-2009 xHarbour project - http://www.xharbour.org
xHarbour build 1.2.1 Intl. (SimpLex) (Rev. 6634) / Borland C++ 5.5.1 (32 bit)

     Compiling :TESTE.PRG
     +------------[ 100% ]--------------+
     ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
     +----------------------------------+

C:\BCC55\BIN\ilink32 @makefile.lnk
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external '_hb_itemPutCLPtr' referenced from C:\XHARBOUR\LIB\RD
DLETO.LIB|leto1
Error: Unresolved external '_hb_timeStampStrGetDT' referenced from C:\XHARBOUR\L
IB\RDDLETO.LIB|leto1
Error: Unresolved external '_hb_vmCDP' referenced from C:\XHARBOUR\LIB\RDDLETO.L
IB|leto1

D:\DEV\LetoDB>


Parece que é alguma LIB faltando..

Alguém pode me dar uma dica ?

Re: RDD LETO Sem Mistério

MensagemEnviado: 29 Nov 2009 11:57
por Itamar M. Lins Jr.
dá o seguuinte erro:

Leu o arquivo readme.txt ?

If you use xHarbour, uncomment a line 'XHARBOUR = yes' in makefile.bc.
Then run the make_b32.bat and you will get server executable file letodb.exe in a bin/
directory and rdd library rddleto.lib in a lib/ directory.


Fez essa modificação ?

Saudações,
Itamar M. Lins Jr.

Re: RDD LETO Sem Mistério

MensagemEnviado: 29 Nov 2009 20:34
por Hasse
Boa noite Itamar.

Baixei o xHarbour 1.2.1-6406 compilado do site http://www.xharbour.org/ para ter certeza de uma versão estável.

O arquivo "rddleto.ch" instalado na pasta C:\xHarbour\Include. No *.prg tem a linha #Include "rddleto.ch".

O arquivo "rddleto.lib" instalado na pastas c:\xHarbour\lib

No arquivo "Makefile.bc" a linha está assim: XHARBOUR = yes

Ao rodar o "hbmake Teste.bc" (ou hbmake Teste.bc -f) ainda apresenta o mesmo erro:
C:\BCC55\BIN\ilink32  @makefile.lnk
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external '_hb_itemGetWriteCL' referenced from C:\XHARBOUR\LIB\RDDLETO.LIB|hbip
Error: Unresolved external '_hb_timeStampStrGetDT' referenced from C:\XHARBOUR\LIB\RDDLETO.LIB|leto1
Error: Unresolved external '_hb_vmCDP' referenced from C:\XHARBOUR\LIB\RDDLETO.LIB|leto1


O arquivo "Teste.log" está tudo OK. A compilação não apresenta erro.

Os erros ocorrem em tempo de linkagem e são apresentados na tela do DOS.

Re: RDD LETO Sem Mistério

MensagemEnviado: 30 Nov 2009 13:57
por frazato
Estou tentando usar o LetoDb, so que nao estou conseguindo gerar a lib, estou usando o xharbour 99.70, gostaria de saber se existem alguem que tenha a lib ja compilada para me enviar. Não estou usando a versao 1.00 do xharbour pois faco uso da Gtwvw, Pdf, Hbcom e fica muito trabalhoso ter que recompilar tudo novamente.

Muito obrigado pela atenção.

frazato@ibest.com.br

frazato

Re: RDD LETO Sem Mistério

MensagemEnviado: 30 Nov 2009 18:52
por sygecom
Buenas,
Com a 9970 o LetoDB não funciona, acho que vale a penas você recompilar suas LIB, se se tiver com um pouco mais de tempo, já de uma olhada no Harbour que está voando baixo e com Letodb roda perfeito, tnato em Windows como Linux.

Re: RDD LETO Sem Mistério

MensagemEnviado: 09 Dez 2009 18:14
por Hasse
Boa noite colegas.

Como não estou mais conseguindo compilar aplicativos com LetoDB acredito que estou com uma tremenda salada de versões, entre LIBS, CH's, etc..

Eu gostaria de tirar isto a limpo.

Alguém poderia fazer a gentileza de encaminhar para o meu e-mail o LetoDB (todos os arquivos auxiliares) compilado para BCC ? Não esquercer de informar qual a versão do xHarbour que devo usar para compilar o aplicativo.

Antecipadamente os meus agradecimentos.

ivo.hasse@fiomaq.com.br

Re: RDD LETO Sem Mistério

MensagemEnviado: 12 Dez 2009 18:44
por sygecom
Olá Hasse,
Com xHarbour não está compilando a versão do CVS, a não ser que compile com a CFLAG: -D__OLDRDD__ , Isso faz ele compilar com uma compatibilidade antes de algumas mudança importantes para Harbour.
Eu compilei com a Versão 1.2.1 do xHarbour, coloquei em anexo o que acabei de compilar.

Re: RDD LETO Sem Mistério

MensagemEnviado: 13 Dez 2009 08:23
por Hasse
Obrigado, Leonardo.

Re: RDD LETO Sem Mistério

MensagemEnviado: 13 Dez 2009 09:29
por asimoes
Pessoal,

Estou tendo este problema na compilação com harbour já algum tempo, se não me engano até uma versão do dia 16/11/09 eu conseguia gerar a lib rddleto.lib e o letodb.exe

A atualizações partir desta data apresentam o erro abaixo.

Alguém está tendo o mesmo problema?

Confirmando foi uma atualização a partir do 16/11/09

Os fontes com problema:
errint.c (letodb)
hbapierr.h (harbour)

[]´s

MAKE Version 5.2  Copyright (c) 1987, 2000 Borland
   bcc32 -c -Iinclude;D:\HARBOURX\include -d   -tWM -D__WIN32__ -D__WIN_DAEMON__  -oobj\b32\leto1.obj source\client\leto1.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
source\client\leto1.c:
   bcc32 -c -Iinclude;D:\HARBOURX\include -d   -tWM -D__WIN32__ -D__WIN_DAEMON__  -oobj\b32\letomgmn.obj source\client\letomgmn.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
source\client\letomgmn.c:
   bcc32 -c -Iinclude;D:\HARBOURX\include -d   -tWM -D__WIN32__ -D__WIN_DAEMON__  -oobj\b32\hbip.obj source\common\hbip.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
source\common\hbip.c:
   bcc32 -c -Iinclude;D:\HARBOURX\include -d   -tWM -D__WIN32__ -D__WIN_DAEMON__  -oobj\b32\net.obj source\common\net.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
source\common\net.c:
   bcc32 -c -Iinclude;D:\HARBOURX\include -d   -tWM -D__WIN32__ -D__WIN_DAEMON__  -oobj\b32\common_c.obj source\common\common_c.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
source\common\common_c.c:
   bcc32 -c -Iinclude;D:\HARBOURX\include -d   -tWM -D__WIN32__ -D__WIN_DAEMON__  -oobj\b32\blowfish.obj source\common\blowfish.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
source\common\blowfish.c:
   D:\HARBOURX\bin\harbour.exe -iinclude;D:\HARBOURX\include -n -q0 -w -es2 -gc0 -d__WIN_DAEMON__   source\client\rddsys.prg -oobj\b32\rddsys.c
   bcc32 -c -Iinclude;D:\HARBOURX\include -d   -tWM -D__WIN32__ -D__WIN_DAEMON__  -oobj\b32\rddsys.obj obj\b32\rddsys.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
obj\b32\rddsys.c:
   IF EXIST "lib\rddleto.lib" del "lib\rddleto.lib" > NUL
   TLIB "lib\rddleto.lib" /0 @MAKE0000.@@@
TLIB 4.5 Copyright (c) 1987, 1999 Inprise Corporation
+obj\b32\leto1.obj &
+obj\b32\letomgmn.obj &
+obj\b32\hbip.obj &
+obj\b32\net.obj &
+obj\b32\common_c.obj &
+obj\b32\blowfish.obj &
+obj\b32\rddsys.obj &
+
   D:\HARBOURX\bin\harbour.exe -iinclude;D:\HARBOURX\include -n -q0 -w -es2 -gc0 -d__WIN_DAEMON__   source\server\server.prg -oobj\b32\server.c
   bcc32 -c -Iinclude;D:\HARBOURX\include -d   -tWM -D__WIN32__ -D__WIN_DAEMON__  -oobj\b32\server.obj obj\b32\server.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
obj\b32\server.c:
   D:\HARBOURX\bin\harbour.exe -iinclude;D:\HARBOURX\include -n -q0 -w -es2 -gc0 -d__WIN_DAEMON__   source\common\common.prg -oobj\b32\common.c
   bcc32 -c -Iinclude;D:\HARBOURX\include -d   -tWM -D__WIN32__ -D__WIN_DAEMON__  -oobj\b32\common.obj obj\b32\common.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
obj\b32\common.c:
   bcc32 -c -Iinclude;D:\HARBOURX\include -d   -tWM -D__WIN32__ -D__WIN_DAEMON__  -oobj\b32\letofunc.obj source\server\letofunc.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
source\server\letofunc.c:
Warning W8004 source\server\letofunc.c 3053: 'pData' is assigned a value that is never used in function leto_Skip
Warning W8066 source\server\letofunc.c 4704: Unreachable code in function thread2
   bcc32 -c -Iinclude;D:\HARBOURX\include -d   -tWM -D__WIN32__ -D__WIN_DAEMON__  -oobj\b32\letoacc.obj source\server\letoacc.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
source\server\letoacc.c:
   bcc32 -c -Iinclude;D:\HARBOURX\include -d   -tWM -D__WIN32__ -D__WIN_DAEMON__  -oobj\b32\leto_win.obj source\server\leto_win.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
source\server\leto_win.c:
   bcc32 -c -Iinclude;D:\HARBOURX\include -d   -tWM -D__WIN32__ -D__WIN_DAEMON__  -oobj\b32\errint.obj source\server\errint.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
source\server\errint.c:
Error E2356 source\server\errint.c 66: Type mismatch in redeclaration of 'hb_errInternalRaw'
Error E2344 D:\HARBOURX\include\hbapierr.h 171: Earlier declaration of 'hb_errInternalRaw'
Error E2356 source\server\errint.c 96: Type mismatch in redeclaration of 'hb_errInternal'
Error E2344 D:\HARBOURX\include\hbapierr.h 170: Earlier declaration of 'hb_errInternal'
*** 4 errors in Compile ***

** error 1 ** deleting obj\b32\errint.obj

Re: RDD LETO Sem Mistério

MensagemEnviado: 14 Dez 2009 17:22
por Hasse
Boa tarde colegas.

F U N C I O N O U . . . . ! ! ! ! :)) :)) :))

Instalei o pacote que o colega Leonardo (Sygecom) disponibilizou e imediatamente a compilação do aplicativo funcionou na primeira tentativa. É claro que também copiei os arquivos da pasta INCLUDE e LIB do LetoDB para as homônimas do xHarbour antes de compilar.

É evidente que havia alguma incompatibilidade entre o xHarbour, a Lib do LetoDB e os arquivos *.ch e *.h da pasta INCLUDE.

Obrigado a todos que colaboraram. :{ :{ :{

Re: RDD LETO Sem Mistério

MensagemEnviado: 14 Dez 2009 20:05
por alaminojunior
Aproveitando o prestigioso tópico, pergunto aos colegas se seria possível a seguinte situação:

1º Possuo um cliente que possui duas lojas de vestuário;
2º Nestas lojas existe rodando, o meu sistema em xHarbour com DBFCDX;

3º Às vezes surge a necessidade de receber na loja 1, contas que o cliente contraiu na loja 2 e vice-versa, coisa que já foi superada por meio do TS;
4º Em outras ocasiões surge a necessidade de a loja 1, puxar os dados de um cliente que cadastrou-se na loja 2, e vice-versa, e essa é a questão:

Adiantando....

Por hora estou fugindo de ter de migrar tudo para o LetoDB ou MYSQL, em vista do tempo já demandado por outras coisas urgentes como
TEF e PAF.
Também está descartada por hora, a unificação do cadastro de clientes.

Enfim, seria possível continuar trabalhando com DBFCDX, e no momento de precisar transferir os dados de um cliente para outra loja, fazer esta transferência usando simultâneamente os recursos do LetoDB ?
Na prática, imaginei o seguinte:
Eu faço a consulta ao cadastro da outra loja via TS;
Encontrado o cliente desejado, eu armazenaria os dados cadastrais deste cliente e em seguida, em sentido contrário (da máquina remota para a local) o sistema que está na máquina remota, por meio do LetoDB appendava os dados no DBF local.
Não sei se me fiz entender, mas seria possível esta proeza ?

Re: RDD LETO Sem Mistério

MensagemEnviado: 15 Dez 2009 06:45
por asimoes
Alamino,

Tente expor por meio de gráficos, acho que ficaria mais entendivel. Como por exemplo usando a figura de 2 computadores e a sequencia de transmissão/recepção de dados.

[]´s

Re: RDD LETO Sem Mistério

MensagemEnviado: 15 Dez 2009 06:47
por asimoes
Hasse,

Eu baixei os fontes que o Sygecom disponibilizou, tentei compilar com harbour e não funcionou, apresentou ou erro.
Na versão da cvs, pelo menos gera a lib, o letodb.exe, não.

Re: RDD LETO Sem Mistério

MensagemEnviado: 16 Dez 2009 18:23
por alaminojunior
asimoes escreveu:Alamino,
Tente expor por meio de gráficos

Hare Baguandí, daí eu teria que fazer um curso antes.

Mas a idéia é simples:
Os dois sistemas (loja 1 e loja 2) estão trabalhando com xHarbour e DBFCDX;
Em dado momento, o usuário da loja 1 precisa consultar na loja 2 um determinado cliente nela cadastrado (coisa que já funciona atravéz de TS), e trazer o cadastro deste cliente para a loja 1.
Esse "trazer o cadastro" é que preciso resolver.
Aliás, pensando bem e deixando de lado a idéia do post anterior...eu poderia acessar o cadastro da loja 2 via RDDLETO , estando esta loja a usar o DBF com DBFCDX ?
Se me disserem que é possível, eu meto as caras.

Re: RDD LETO Sem Mistério

MensagemEnviado: 16 Dez 2009 21:10
por asimoes
eu poderia acessar o cadastro da loja 2 via RDDLETO , estando esta loja a usar o DBF com DBFCDX ?


Alamino,

Sim perfeitamente, eu já fiz este teste e funciona.

Para isto você vai ter que usar um serviço de dns como por exemplo o no-ip ou dyndns.

Não esquecendo de liberar a porta 2812 no roteador.

Ficaria por exemplo assim: cServidorDB:='//meuservicodns.org:2812/'

Observação: Se você vai fazer consulta da base clientes, sem problemas, mas se for uma base muito grande, pode perder performance.

[]´s

Re: RDD LETO Sem Mistério

MensagemEnviado: 16 Dez 2009 21:36
por alaminojunior
Legal então. Já tenho diversão para o resto da semana :))

asimoes escreveu:Observação: Se você vai fazer consulta da base clientes, sem problemas, mas se for uma base muito grande, pode perder performance.

Deve ter lá os seus 10000 registros.
Mas eu penso em:
No sistema e loja locais, ter um comando onde eu insira o cpf do cliente a consultar, e em seguida escolher em qual loja consultar. Esta escolha poderia ser feita num dbf onde tenha o seguinte:
loja                   ip
loja 01              loja001.no-ip.info
loja 02              loja002.no-ip.info


Com isso o sistema local vai abrir a base de dados de clientes lá na loja remota, e fazer um seek pelo cpf informado, caso encontrar, eu appendo um novo registro na loja local com os dados remotos. Nem precisa exibir em browse, somente confirmar se existe o cpf ou não.
E para finalizar encerro a conexão e já elvis.

Se for isso mesmo ...

Obrigado pela força.

Re: RDD LETO Sem Mistério

MensagemEnviado: 21 Dez 2009 07:53
por asimoes
Senhores,

Alguém já consegiui gerar o binário: letodb.exe com o harbour beta 3?
Desde a ultima atualização do harbour beta 3 de 16/11/2009, só gera a lib: rddleto.lib.

[]´s

Re: RDD LETO Sem Mistério

MensagemEnviado: 22 Dez 2009 17:31
por sygecom
Olá Asimões,
Esse LetoDB, que postei está corrigido para rodar com xHarbour. Mandei para o Russo as alterações para ele commitar no CVS, mas ainda não me respondeu.
Com Harbour nem testei, mas baixe do ZERO do cvs do LetoDB, e tente compilar com o Harbour do SVN. Assim que sobrar um tempinho vou fazer isso.

Re: RDD LETO Sem Mistério

MensagemEnviado: 22 Dez 2009 20:16
por asimoes
Olá Sygecom,

Acabei de atualizar o harbour, uma atualização bem grande.
E o problema continua, só gera a lib rddleto.lib.

[]´s

Re: RDD LETO Sem Mistério

MensagemEnviado: 22 Dez 2009 23:33
por sygecom
Vou baixar essa nova versão do Harbour e atualizar o meu LetoDB da CVS e testar e ver o que da, depois lhe digo algo.

Re: RDD LETO Sem Mistério

MensagemEnviado: 24 Dez 2009 16:46
por asimoes
Olá sygecom,

Antes de mais nada, Feliz Natal para você e Família,

sygecom escreveu:Vou baixar essa nova versão do Harbour e atualizar o meu LetoDB da CVS e testar e ver o que da, depois lhe digo algo.


Você conserguiu fazer o teste?, acredito que quem baixar o harbour beta 2.0x vai ter este problema na compilação do server letodb.exe.

[]´s

Re: RDD LETO Sem Mistério

MensagemEnviado: 27 Dez 2009 14:36
por sygecom
Testei e realmente não está compilando, mandei um e-mail para o Alexander para ver se ele consegue resolver. Vamos aguardar...

Re: RDD LETO Sem Mistério

MensagemEnviado: 04 Jan 2010 08:48
por asimoes
Olá Sygecom,

sygecom escreveu:Testei e realmente não está compilando, mandei um e-mail para o Alexander para ver se ele consegue resolver. Vamos aguardar...


Houve uma atualização no dia 31/12 do letodb que resolveu o problema. Está gerando o letodb.exe agora.

[]´s

Re: RDD LETO Sem Mistério

MensagemEnviado: 07 Jan 2010 08:19
por asimoes
Senhores,

O LetoDb pode gerenciar 2 bases de dados?

Por exemplo eu tenho 2 sistemas com a seguinte estrutura exemplo:

Onde \db ficam os dados e dbfs da aplicação.

\sistema1\db
\sistema2\db

No letodb vou ter que fazer a chamada para cada 1 em pastas diferenciadas, por exemplo:

Pasta \leto1
letodb.ini:
Port = 2812
DataPath =/sistema1/db/
Logfile = "letodb.log"
Default_Driver = CDX
Lower_Path = 0
EnableFileFunc = 1

Pasta \leto2
letodb.ini:
DataPath =/sistema2/db/
..
..

[]´s

Re: RDD LETO Sem Mistério

MensagemEnviado: 14 Jan 2010 18:12
por asimoes
Senhores,

Hoje (14/01) houve uma atualização do LetoDb e está com erro:
Por favor quem puder, informar ao Alexander Kresin.

Atenção: O Alexander Kresin corrigiu o problema de 14/01, já está disponível a atualização.


MAKE Version 5.2  Copyright (c) 1987, 2000 Borland
   bcc32 -c -Iinclude;d:\harbourx\include -d   -tWM -D__WIN32__ -D__WIN_DAEMON__  -oobj\b32\leto1.obj source\client\leto1.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
source\client\leto1.c:
Error E2141 source\client\leto1.c 129: Declaration syntax error
Warning W8019 source\client\leto1.c 4046: Code has no effect in function letoRegisterRDD
Error E2379 source\client\leto1.c 4046: Statement missing ; in function letoRegisterRDD
Error E2451 source\client\leto1.c 4050: Undefined symbol 'errCode' in function letoRegisterRDD
Error E2451 source\client\leto1.c 4050: Undefined symbol 'letoTable' in function letoRegisterRDD
Error E2451 source\client\leto1.c 4051: Undefined symbol 'SUCCESS' in function letoRegisterRDD
Error E2451 source\client\leto1.c 4064: Undefined symbol 'FAILURE' in function letoRegisterRDD
Error E2141 source\client\leto1.c 4077: Declaration syntax error
Error E2451 source\client\leto1.c 4300: Undefined symbol 'symbols_table'
Error E2109 source\client\leto1.c 4300: Not an allowed type in function leto1__InitSymbols
Error E2451 source\client\leto1.c 4303: Undefined symbol 'hb_letoRddInit' in function _hb_leto_rdd_init_
*** 10 errors in Compile ***

** error 1 ** deleting obj\b32\leto1.obj

Re: RDD LETO Sem Mistério

MensagemEnviado: 18 Jan 2010 09:20
por asimoes
Olá a todos,

A atualização do LETODB(15/01), está com o seguinte problema abaixo:

G:\Harbour\DELIVE~1>HBMK2 GERENTE.HBM
hbmk2: Processando opções do ambiente: -compiler=bcc
hbmk2: Processando arquivo de configuração: D:\HARBOURX\BIN\hbmk.cfg
hbmk2: Linkando... gerente.exe
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external '_GetComputerNameA' referenced from D:\HARBOURX\LIB\WIN\BCC\RDDLETO.LIB|net
Error: Unresolved external '_hb_cdpnTranslate' referenced from D:\HARBOURX\LIB\WIN\BCC\RDDLETO.LIB|leto1

hbmk2: Erro: Executando linkeditor. 2
ilink32.exe @C:\TEMP\qyvrvt.lnk

[]´s

Re: RDD LETO Sem Mistério

MensagemEnviado: 20 Jan 2010 10:46
por asimoes
Olá,

Enviei um email pro Alexandre Kresin informando sobre os problemas da compilação da lib referente a última atualização e a resposta dele:
Vamos aguardar.

> Hi Alexander,
>
> It follows in annex (make_b32.log) the error of the compilation of letodb
>
I'll fix it, just shall examine the new Harbour code.

Regards, Alexander.

Re: RDD LETO Sem Mistério

MensagemEnviado: 03 Fev 2010 19:18
por clrod
Olá

Onde tem essas atualizações do LetoDB feitas em janeiro q eu não achei? O Alexander conseguiu deixar estável?

Obrigado.

Re: RDD LETO Sem Mistério

MensagemEnviado: 03 Fev 2010 19:59
por asimoes
Olá,

clrod escreveu:Onde tem essas atualizações do LetoDB feitas em janeiro q eu não achei? O Alexander conseguiu deixar estável?


As atualizações você deve baixar pelo cvs. As dicas estão no inicio deste tópico.
O build atual está estável.

A última atualização fou feita no dia 30/01/2010 19:30:59

[]´s

Re: RDD LETO Sem Mistério

MensagemEnviado: 12 Fev 2010 12:33
por rochinha
Amiguinho Sygecom,

Voce poderia me enviar todos os binários deste projeto, eu não consigo compilar pois meu Harbour é o .46 e se não for pedir muito me enviar os .OBJ de todos os arquivos C do mesmo.

Lembrando que uso Borland.

Agradecido!

Re: RDD LETO Sem Mistério

MensagemEnviado: 23 Fev 2011 14:58
por rochinha
Amiguinho,

Leonardo,

Voce ainda tem o instalador que voce postou neste trecho?
Caso não tenha o xharbour e bcc configurado, pode baixar Clicando Aqui, que esse instalador faz tudo sozinho para você.
Tendo tudo configurado, basta entrar no Prompt do Ms-Dos e...

Re: RDD LETO Sem Mistério

MensagemEnviado: 23 Fev 2011 15:23
por sygecom

RDD LETO Sem Mistério

MensagemEnviado: 03 Mai 2012 20:21
por filizola
Galera, não consegui baixar o letodb pelo cvs.

---------------------------
Subversion Exception!
---------------------------
Subversion encountered a serious problem.
Please take the time to report this on the Subversion mailing list
with as much information as possible about what
you were trying to do.
But please first search the mailing list archives for the error message
to avoid reporting the same problem repeatedly.
You can find the mailing list archives at
http://subversion.apache.org/mailing-lists.html

Subversion reported the following
(you can copy the content of this dialog
to the clipboard using Ctrl-C):

In file
'D:\Development\SVN\Releases\TortoiseSVN-1.7.6\ext\subversion\subversion\libsvn_client\checkout.c'
line 94: assertion failed (svn_uri_is_canonical(url, pool))
---------------------------
OK
---------------------------

RDD LETO Sem Mistério

MensagemEnviado: 03 Mai 2012 21:20
por sygecom
Olá Filizola,
CVS e SVN(Subversion) são maneiras diferentes para baixar projetos, o RDDLETO está usando CVS, então tem que instalar o TortoiseCVS para conseguir baixar o LETODB

RDD LETO Sem Mistério

MensagemEnviado: 03 Mai 2012 21:41
por filizola
valeu sygecom, consegui baixar, agora nao estou conseguindo compilar com o harbour 3.0.0

RDD LETO Sem Mistério

MensagemEnviado: 03 Mai 2012 21:53
por sygecom
Qual seu cenário completo ?
Windows, Linux, MAC e etc...
BCC, MINGW, PELLES e etc...

O LetoDB inclusive roda melhor em Harbour, mas a versão que tenho eu compilava com 2.1 e não tive mais tempo de acompanhar mais. Post os erros.

RDD LETO Sem Mistério

MensagemEnviado: 04 Mai 2012 19:33
por filizola
Windows, harbour 3.0.0, modo console.

RDD LETO Sem Mistério

MensagemEnviado: 05 Mai 2012 14:27
por sygecom
Mas quais os erros ?

RDD LETO Sem Mistério

MensagemEnviado: 09 Mai 2012 22:31
por filizola
Desculpe a demora em responder, na verdade nao consigo criar as lib´s com harbour 3.0, os bats existentes nao sao para harbour. tem para xharbour, etc...

Desde já, agradeço.

RDD LETO Sem Mistério

MensagemEnviado: 14 Mai 2012 23:07
por sygecom
Filizola,
Ainda precisamos de mais detalhes para poder lhe ajudar, qual compilar C está usando, e se postar os erros fica mais fácil de ajudar.

RDD LETO Sem Mistério

MensagemEnviado: 15 Mai 2012 21:10
por filizola
na verdade não dá erro nenhum, estou tentando compilar com o bat make_b32.bat, porem, estou utilizando a versão 3.0 do harbour. entao ele nao compila. tentei utilizar via comando -> hbmk2 letodb.hbp mas nao acontece nada.

RDD LETO Sem Mistério

MensagemEnviado: 16 Mai 2012 21:08
por sygecom
Assim que der vou compilar com a versão atual do Harbour e disponibilizar aqui no fórum.

RDD LETO Sem Mistério

MensagemEnviado: 16 Mai 2012 23:02
por Itamar M. Lins Jr.
Use o hbmk2 para compilar. pegue o letodb usando a opção branch do CVS.
Tem um arquivo com a extenção hbp use o hbmk2 para compilar.

Saudações,
Itamar M. Lins Jr.

RDD LETO Sem Mistério

MensagemEnviado: 23 Mai 2012 23:46
por lucimauro
eu tambem to tentando compilar para o leto ou mediator e ta dando o erro abaixo,alguem pode me ajudar?

C:\fontes\teste>comp

C:\fontes\teste>HBMK2 SCE.hbp /N /M /B
hbmk2: Linkando... SCEPDV.exe
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external '_hb_cdpnTranslate' referenced from C:\HB32\LIB\WIN\B
CC\MEDNTX.LIB|translat
hbmk2: Erro: Executando linkeditor. 2
ilink32.exe @C:\DOCUME~1\Lucio\CONFIG~1\Temp\swchup.lnk
C:\fontes\teste>cd\

RDD LETO Sem Mistério

MensagemEnviado: 24 Mai 2012 14:23
por lucimauro
Sera que alguem pode me dar uma ajuda e encontar essa funcao _hb_cdpntranslate
?

Obrigado.

RDD LETO Sem Mistério

MensagemEnviado: 25 Mai 2012 10:50
por filizola
muito obrigado itamar, vou testar e posto aqui o resultado...

Valeu mesmo.

RDD LETO Sem Mistério

MensagemEnviado: 27 Mai 2012 17:42
por filizola
Não encontrei a opção branch do cvs !

RDD LETO Sem Mistério

MensagemEnviado: 27 Mai 2012 18:42
por filizola
utilizo TortoiseCVS versão, 1.8.31

RDD LETO Sem Mistério

MensagemEnviado: 13 Set 2012 21:09
por Poka
Experimente utilizar o comando de linha do CVS para baixar a versão mais atual do Letodb;
1º Entre no prompt do MS_DOS;
2º Vá para a raiz C:
3º Digite o comando abaixo:
cvs -d:pserver:anonymous@letodb.cvs.sourceforge.net:/cvsroot/letodb checkout -r rel-1-mt letodb
4º Verifique depois do download se criou o diretório c:\letodb
5º Ler o arquivo readme_pt_br que tem as instruções de como compilar, importante carregar a variável SET HB_PATH antes de compilar.

Obs.: utilizo Minigui Extended e Harbour e gerou a biblioteca.

Estou aprendendo não alterei meus sistemas, se tiver alguém que tenha um exemplo para postar agradeço.

RDD LETO Sem Mistério

MensagemEnviado: 15 Nov 2012 20:39
por clipsis
Olá e boa noite a todos!

Sempre vi e li sobre o LetoDB. Agora resolvi realmente testá-lo e ver to que é capaz. Pois tenho recebido muitas reclamações sobre lentidão em alguns sistemas.

Como instruções no início deste tópico baixei o LetoDB via CVS compilei manualmente utilizando os arquivos .hbp na pasta do LetoDB. Gerou o arquivo LetoDB.EXE na pasta BIN e na pasta LIB gerou um arquivo LIBRDDLETO.A.

Pergunta: Não deveria haver um arquivo LIBRDDLETO.LIB (ou algo parecido) na PASTA lib ?

Executei: HBMK2 LETODB.HBP e HBMK2 RDDLETO.HBP

Fiz algo errado ? O que ?

Abraços

RDD LETO Sem Mistério

MensagemEnviado: 16 Nov 2012 00:22
por asimoes
Olá Clipsis,

Qual é a versão do harbour que você está usando? se for a compilada com mingw a extensão da lib será com .a mesmo.
Tenho uma sugestão para você, considere o uso da lib netio que faz parte do projeto harbour, eu utilizo e recomendo.

RDD LETO Sem Mistério

MensagemEnviado: 16 Nov 2012 12:25
por clipsis
Olá ASimoes, valeu pela atenção!

asimoes escreveu:
Qual é a versão do harbour que você está usando? se for a compilada com mingw a extensão da lib será com .a mesmo.

Sim é compilada com o mingw.

asimoes escreveu:
Tenho uma sugestão para você, considere o uso da lib netio que faz parte do projeto harbour, eu utilizo e recomendo.

Já tinha visto alguma coisa a respeito. Mas Três questões são muito importantes:
1 - Quais as vantagens de se usar o netio existe ganho de performance ?
(o meu problema é a reclamação sobre a lentidão do acesso aos dados em ambiente de rede
2 - Quais serias as mudanças necessárias para implantá-la ?
(Tenho sistemas gerados com o GASPro e gostaria de aproveitá-los.)
3 - É possível acesso remoto com a netio ?

Abraços.

RDD LETO Sem Mistério

MensagemEnviado: 16 Nov 2012 18:52
por asimoes
Olá Clipsis,

Respondendo sobre o netio:

clipsis escreveu:1 - Quais as vantagens de se usar o netio existe ganho de performance ?
(o meu problema é a reclamação sobre a lentidão do acesso aos dados em ambiente de rede


1 - Netio faz parte do projeto harbour, já o rddleto apesar de estável, já faz muito tempo que não há evolução.
Sendo o netio uma contribuição do projeto harbour terá sempre até que digam ao contrário, uma manutenção evolutiva/corretiva

Quanto a lentidão, não percebi, nada melhor que os usuários do sistema para informar sobre isso, implementei a 2 anos em um sistema que faço manutenção e nunca houve perda ou corrupção de registros e tão pouco reclamação sobre lentidão.

clipsis escreveu:2 - Quais serias as mudanças necessárias para implantá-la ?
(Tenho sistemas gerados com o GASPro e gostaria de aproveitá-los.)


2- Você terá que fazer algumas alterações no código fonte do seu sistema assim como o faria com o rddleto, para abertura dos dbfs.
Terá que usar o hbnetio ou algum sistema servidor (posso te passar o servidor que eu fiz para netio e exemplos de como usar) e linkar a biblioteca hbnetio no seu projeto de compilação.

clipsis escreveu:3 - É possível acesso remoto com a netio ?


Quanto a acesso remoto, ainda não consegui, hoje eu estava até pesquisando sobre uso com noip, dyndns mas não obtive respostas.
Neste quesito o rddleto funciona.

RDD LETO Sem Mistério

MensagemEnviado: 17 Nov 2012 12:23
por clipsis
Olá ASimoes

Mias uma vez obrigado pela atenção.

asimoes escreveu:
2- Você terá que fazer algumas alterações no código fonte do seu sistema assim como o faria com o rddleto, para abertura dos dbfs.

As alterações seriam mais na abertura dos dbfs ? O restante de uso (inclusão, edição, exclusão, busca) seria o mesmo se usasse o DBFNTX?

asimoes escreveu:
Terá que usar o hbnetio ou algum sistema servidor (posso te passar o servidor que eu fiz para netio e exemplos de como usar) e linkar a biblioteca hbnetio no seu projeto de compilação.


Se puder me indicar ou passar servidor e exemplos de como utilizar e compilar agradeço

Fico no aguardo

Abraços

RDD LETO Sem Mistério

MensagemEnviado: 17 Nov 2012 14:42
por asimoes
clipsis escreveu:As alterações seriam mais na abertura dos dbfs ? O restante de uso (inclusão, edição, exclusão, busca) seria o mesmo se usasse o DBFNTX?

Exatamente igual.
clipsis escreveu:Se puder me indicar ou passar servidor e exemplos de como utilizar e compilar agradeço

Vou preparar um exemplo, assim que estiver pronto posto aqui.

Clipsis, se você der uma pesquisada no forum vai encontrar esse servidor exemplo que eu postei.

RDD LETO Sem Mistério

MensagemEnviado: 17 Nov 2012 16:36
por asimoes
Clipsis,

Baixe o exemplo que eu preparei, qq duvida pergunte.

O compactado tem 3 pastas

Cliente - fonte com executável de como abrir dbf usando netio.
Servidor - fonte com executável do servidor netio que eu fiz
hb32 - harbour compilado baixado hoje (17/11) versão nightly com a hwgui já compilada para usar com o fonte cliente e servidor.

http://www.4shared.com/archive/I4K9j_Zg/exemplo_netio.html

RDD LETO Sem Mistério

MensagemEnviado: 18 Nov 2012 18:33
por filizola
compilei o projeto e obtive a mesma resposta do clipsis

"Como instruções no início deste tópico baixei o LetoDB via CVS compilei manualmente utilizando os arquivos .hbp na pasta do LetoDB. Gerou o arquivo LetoDB.EXE na pasta BIN e na pasta LIB gerou um arquivo LIBRDDLETO.A."

gostaria muito de testar o rddleto com harbour + no-ip ou dyndns. hoje utilizo MSTSC para acessar servidores, mas acho que seria muito mais eficiente e seguro o uso do rddleto.

Alguem teria a lib e o exe para nos passar, para harbour ?

RDD LETO Sem Mistério

MensagemEnviado: 18 Nov 2012 20:12
por alaminojunior
Posso estar enganado, mas essa extensão .a não sería para uso com o Linux ?
Não estaría faltando algum ajuste nos scripts de compilação ?

Segue um trecho do readme.txt referente a compilação.
2. Building binaries

2.1 Borland Win32 C compiler

An environment variable HB_PATH, which defines a path to the Harbour
directory, must be set before compiling. This can be done, for example,
by adding a line in a make_b32.bat:

SET HB_PATH=c:\harbour

If you use xHarbour, uncomment a line 'XHARBOUR = yes' in makefile.bc.
Then run the make_b32.bat and you will get server executable file letodb.exe in a bin/
directory and rdd library rddleto.lib in a lib/ directory.

2.2 Linux GNU C compiler

An environment variable HB_ROOT, which defines a path to the Harbour
directory, must be set before compiling. Or just change the value of HRB_DIR
in the Makefile.linux.

Then run the make_linux.sh and you will get server executable file letodb in a bin/
directory and rdd library librddleto.a in a lib/ directory.

2.3 xHarbour Builder

Run the make_xhb.bat to build binaries with this compiler. Probably,
you will need to change the path to your xHarbour Builder copy in the
make_xhb.bat. Default value is:

set XHB_PATH=c:\xhb

2.4 Mingw C compiler

An environment variable HB_PATH, which defines a path to the Harbour
directory, must be set before compiling. This can be done, for example,
by adding a line in a make_mingw.bat:

SET HB_PATH=c:\harbour

If you use xHarbour, uncomment a line 'XHARBOUR = yes' in makefile.gcc.
Then run the make_mingw.bat and you will get server executable file letodb.exe in a bin/
directory and rdd library librddleto.a in a lib/ directory.

2.5 Building letodb with hbmk

Now there is a possibility to build letodb with a Harbour make utility, provided by
Viktor Szakats. The command line syntax is:

hbmk2 [-hb10|-xhb] rddleto.hbp letodb.hbp [-target=tests/test_ta.prg]

Optional parameters: -hb10 - Harbour version is 1.0 or 1.0.1,
-xhb - xHarbour,
-target="blank"\test_ta.prg - build the test, too.

RDD LETO Sem Mistério

MensagemEnviado: 18 Nov 2012 21:52
por paiva_dbdc
Boa UMA duvida

o letoDB tem alguma forma de segurança MAIOR que o DBF puro ?

ex: Imagine uma tabela DBF no servidor e os usuarios acessando o servidor pelo TS.

ou seja e´como se estivessem trabalhando SOMENTE no servidor.

se utilizarmos o TS e SOMENTE trocar o dbf pelo TETODB a segurança é MAIOR quanto a corrupçoes de Indices ?

ou seria a mesma coisa ?

PAiva

RDD LETO Sem Mistério

MensagemEnviado: 06 Dez 2012 20:54
por Itamar M. Lins Jr.
Ola! asimoes.
1 - Netio faz parte do projeto harbour, já o rddleto apesar de estável, já faz muito tempo que não há evolução.
Sendo o netio uma contribuição do projeto harbour terá sempre até que digam ao contrário, uma manutenção evolutiva/corretiva

Esta equivocado sobre a evolução do LetoDb.
veja as ultimas modificações/correções/adições.
2012-11-30 18:15 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru)
* source/client/leto1.c
* source/server/letofunc.c
+ added support for ordBagClear()
* include/funcleto.h
* updated version (2.10)

2012-11-27 18:10 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru)
* utils/manager/manage.prg
* warnings
+ utils/manager/console.hbp
+ utils/manager/manage.hbp
+ hbmk2 files

2012-11-23 18:10 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru)
* source/client/leto1.c
* source/client/letomgmn.c
* added removal ip from path in the 2nd parameter of leto_FRename()

2012-11-22 18:30 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru)
* source/client/leto1.c
* source/server/letofunc.c
* using set scope in leto_Sum() and leto_groupBy() functions
* added filling recno after commit transaction for appended records.
protocol has been changed, but older versions can evaluated commit transaction
% SELF_RECID() call replaced with SELF_RECNO()
* include/funcleto.h
* updated version (2.09)

2012-11-12 19:20 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru)
* source/server/server.prg
* removed unused cValToChar() function, FilePath() and GetExten()
functions replaced with hb_FNameDir() and hb_FNameExt()
* source/server/letofunc.c
* added error handling in leto_Udf()
* tests/letoudf.prg
* added error handling in UDF_Trans() function

2012-10-18 18:05 UTC+0300 Pavel Tsarenko (tpe2/at/mail.ru)
* include/rddleto.h
* source/client/leto1.c
* source/client/letomgmn.c
* crypt buffer moved to LETOCONNECTION structure
* added "s_" prefix to static variables
* added leto_checkLockError() function
+ support for RDDI_CONNECTION
! fixed leto_SetCurrentConnection()
* source/server/letofunc.c
* formatting



Saudações,
Itamar M. Lins Jr.

RDD LETO Sem Mistério

MensagemEnviado: 06 Dez 2012 20:58
por Itamar M. Lins Jr.
Oi
Posso estar enganado, mas essa extensão .a não sería para uso com o Linux ?
Não estaría faltando algum ajuste nos scripts de compilação ?


Não. É para usar no windows mesmo é a extensaõ do compilador Mingw.
Os scripts estão corretos.

Saudações,
Itamar M. Lins Jr.

RDD LETO Sem Mistério

MensagemEnviado: 06 Dez 2012 21:16
por Itamar M. Lins Jr.
Ola!
Boa UMA duvida

o letoDB tem alguma forma de segurança MAIOR que o DBF puro ?

Sim, porque é o mesmo principio de um servidor SQL. Os dados ficam no servidor e voce não compartilha a pasta.

ex: Imagine uma tabela DBF no servidor e os usuarios acessando o servidor pelo TS.
ou seja e´como se estivessem trabalhando SOMENTE no servidor.
se utilizarmos o TS e SOMENTE trocar o dbf pelo TETODB a segurança é MAIOR quanto a corrupçoes de Indices ?
ou seria a mesma coisa ?


O TS, exporta a tela do servidor com se fosse diversos bitmaps, dependendo da conexão fica muito lento.
Usando o LetoDb ou NetIO é muito mais rápido porque usa o TCP/IP igual a uma conexão SQL.
Quanto a segurança é muito maior, e corrupção de indices muito baixa. Eu uso e não tenho esse problema.

Saudações,
Itamar M. Lins Jr.

RDD LETO Sem Mistério

MensagemEnviado: 06 Dez 2012 21:38
por Itamar M. Lins Jr.
Pergunta: Não deveria haver um arquivo LIBRDDLETO.LIB (ou algo parecido) na PASTA lib ?
Executei: HBMK2 LETODB.HBP e HBMK2 RDDLETO.HBP
Fiz algo errado ? O que ?


Não fez nada de errado, está tudo certo ai.
Para instalar o servidor no win7.
cd \letodb\bin
letodb install
net start letodb_service


Atenção com o arquivo letodb.ini
Port = 2812              
Logfile = "letodb.log"   
DEFAULT_DRIVER = CDX     
DATAPATH = c:\database\
ENABLEFILEFUNC = 1
CRYPT_TRAFFIC = 0
PASS_FOR_LOGIN = 0
PASS_FOR_MANAGE = 0
PASS_FOR_DATA = 0
Share_Tables  = 0
[DATABASE]
DataPath = c:\database\
Driver = CDX


Conectando:
//fragmentos do código que eu uso.
Local cHost := "//localhost:2812/"

   nConect := leto_Connect( cHost )
      IF nConect == -1
          nRes := leto_Connect_Err()
         IF nRes == LETO_ERR_LOGIN
            MsgStop( "Falha ao Logar" )
         ELSEIF nRes == LETO_ERR_RECV
            MsgStop( "Error ao conectar" )
         ELSEIF nRes == LETO_ERR_SEND
            MsgStop( "Erro de envio" )
         ELSE
            MsgStop( "Não connectado ao servidor: " + cHost )
         ENDIF
         Return .f.
      ENDIF
   EndIf

Function AbreDB(...)

   BEGIN SEQUENCE WITH {| oErr | Break( oErr ) }
       If lRddLeto
           If Leto_File(cHost+Db)
            DbUseArea(.t.,"LETO",cHost+DB,apel,.T.,.F.,'PTISO')
           Else
              MsgStop('LetoDb Não Localizou o Arquivo: '+cHost+Db)
              lRet := .f.
           EndIf
       Else
           DbUseArea(.t.,'DBFCDX',dDados+DB,apel,.T.,.F.,'PTISO')
       EndIf

   Recover
    If lRddleto
        msginfo('Erro, abrindo Arquivo: '+cHost+Db+' Compartilhado')
    Else
        msginfo('Erro, abrindo Arquivo: '+dDados+Db+' Compartilhado')
    EndIF
     lRet := .f.
   End Sequence

   if Neterr()
     MsgInfo('Usado de Forma Exclusiva, Em Outro Lugar.')
     lRet := .f.
   endif



Saudações,
Itamar M. Lins Jr.

RDD LETO Sem Mistério

MensagemEnviado: 07 Dez 2012 07: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

MensagemEnviado: 07 Dez 2012 07: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

MensagemEnviado: 07 Dez 2012 10: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

MensagemEnviado: 07 Dez 2012 10:07
por asimoes
Itamar, entendi, valeu.

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

RDD LETO Sem Mistério

MensagemEnviado: 07 Dez 2012 10: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

MensagemEnviado: 11 Dez 2012 18: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

MensagemEnviado: 26 Dez 2012 12: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.
#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

MensagemEnviado: 26 Dez 2012 20: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

MensagemEnviado: 29 Dez 2012 10: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, :%
// 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

[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

MensagemEnviado: 29 Dez 2012 17: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

MensagemEnviado: 30 Dez 2012 12: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:
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?
//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

MensagemEnviado: 31 Dez 2012 14: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

MensagemEnviado: 01 Jan 2013 09: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")

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

MensagemEnviado: 01 Jan 2013 10: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

MensagemEnviado: 01 Jan 2013 10: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())

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

RDD LETO Sem Mistério

MensagemEnviado: 03 Jan 2013 08:36
por jelias
Amiguinhos,

Muito obrigado pelos esclarecimentos.
Ainda estou com algumas dúvidas.
1 - Pelo que posso entender (se não estiver errado) quando abrimos um arquivos DBF "DBUSEAREA()" que está no servidor, todo o conteúdo do arquivo trafega via rede até a computador do usuário (estação), isso claro, gera um trâfego, que dependendo do tamanho do DBF pode ser enorme. Como funciona isso com o LETODB, ao abrir um arquivo todo o seu conteúdo trafega pela rede ou somente quando exite uma solucitação ao LETODB que o dado solicitado trafegará pela rede?
Exemplo:
DBFCDX
use clientes index indcli // banco de dados com 100.000 registros
-> Neste momento há um trâfego na rede, transportando todos os registros do servidor para a máquina do usuário!

LETODB
use clientes index indcli VIA "LETODB"
-> Não há trâfego na rede, somente quando houver uma solicitação.
DBSEEK(), ORDSCOPE(), replace, set filter, browser(), etc.
-> Somente usando estes comandos que irá trabalhar com os dados?

2 - Ao abrir uma tela de cadastro mostro um browser com alguns clientes, é possível trazer somente por exemplo 30 registros?

Saudações,

Júlio.

RDD LETO Sem Mistério

MensagemEnviado: 25 Mar 2013 19:19
por Mário Isa
Amigos,
Agora não dá mais....
Chega de .DBF + lentidão na rede + .dbf paulado + coisa estranha + saci pererê e etce tal...

Agora estou instalando mysql 5.5.

E vou para o LETODB ou para o MYSQL ???

Acham melhor o mysql ? Mas daí eu tenhoq instalar o mysql em todas as maquinas ou só no servidor?

Obrigado
Mário
:%

RDD LETO Sem Mistério

MensagemEnviado: 25 Mar 2013 23:00
por alberto_dias
Olá,
Mario,
Seguindo as instruções do pessoal,
Já estou utilizando o LetoDb em 3 clientes
que estavam com "Problemas"
As vantagens que percebi usando o letodb foram:
Fácil adaptação do código fonte(muito pouca mudança),
Facilidade de instalação do Serviço no Servidor,
Facilidade na configuração das Portas( Saida e Entrada)
Aumento da velocidade da comunicação pelas estações,
Até agora nenhum problema ocorreu, nada misterioso,
Conclusão,
Estou surpreso pela velocidade e estabilidade do LetoDb,
Parabens a este trabalho do grupo, muito obrigado, :-Y :-Y
Alberto Dias

RDD LETO Sem Mistério

MensagemEnviado: 26 Mar 2013 11:28
por sygecom
Olá Mario,
Mário Isa escreveu:Acham melhor o mysql ? Mas daí eu tenhoq instalar o mysql em todas as maquinas ou só no servidor?

Não precisa instalar o MYSQL em cada maquina, a não ser que você use OBDC, ai tem que instalar o driver obdc para Mysql em cada maquina( que acho pouco produtivo)
O SQLRDD usa o Mysql de forma que apenas você deve distribuir junto com seu EXE as DLL do Mysql,ou Postgresql.

O resto respondi em seu outro tópico.
viewtopic.php?f=42&t=13486

RDD LETO Sem Mistério

MensagemEnviado: 26 Mar 2013 15:43
por Mário Isa
Hasse disse:
Instalei o pacote que o colega Leonardo (Sygecom) disponibilizou e imediatamente a compilação do aplicativo funcionou na primeira tentativa. É claro que também copiei os arquivos da pasta INCLUDE e LIB do LetoDB para as homônimas do xHarbour antes de compilar.

Mas eu preciso startar o servidor como o colega Itamar disse?

Itamar disse:
Não fez nada de errado, está tudo certo ai.
Para instalar o servidor no win7.
Expandir visualizacaoVer codigo
1 cd \letodb\bin
2 letodb install
3 net start letodb_service
4

Eu faço um pequeno .bat e coloco o atalho dele no inicializar ?

E ainda disse:
Atenção com o arquivo letodb.ini
Expandir visualizacaoVer codigo
01 Port = 2812
02 Logfile = "letodb.log"
03 DEFAULT_DRIVER = CDX
04 DATAPATH = c:\database\
05 ENABLEFILEFUNC = 1
06 CRYPT_TRAFFIC = 0
07 PASS_FOR_LOGIN = 0
08 PASS_FOR_MANAGE = 0
09 PASS_FOR_DATA = 0
10 Share_Tables = 0
11 [DATABASE]
12 DataPath = c:\database\
13 Driver = CDX

Eu posso trabalhar com Driver = NTX?
Porque repetiu a DataPath 2 vezes ?

Conectando:
Expandir visualizacaoVer codigo
01   //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


Onde vc criou as variáveis
a) dDados
b) DB
c) apel

?

Alberto Dias:
PRIVATE cPath := ALLTRIM(endserd)
PRIVATE dirserd :=  cPath


essa variável cPath é onde ficarão seus .dbfs ??

e ainda disse:
DADOS := leto_mggetinfo()


Para que serve a função leto_mggetinfo() ?
Carregar a estrutura do arquivo ?
Os dados de um registro ??

Mario

RDD LETO Sem Mistério

MensagemEnviado: 26 Mar 2013 18:29
por Mário Isa
Testando aqui o exemplo do NETIO. Enviado pelo colega asimoes..
sendo assim. consegui compilar o cliente e fiz algumas mudanças...
segue o .prg e o .exe já compilado.

No modem
=========
Abra a porta cujo numero está em porta.txt (da pasta cliente) no modem..

No servidor
==========
Coloque a pasta "servidor" em d:\servidor e starte o servidor.exe
Coloque a pasta "cliente" se vc quiser q o próprio servidor tb acesse os dados e atualize a porta em porta.txt e o IP do SERVIDOR em ip.txt

No cliente
==]======
coloque a pasta "cliente" em d:\cliente, atualize a porta em porta.txt e o IP do SERVIDOR em ip.txt

Nota
O arquivo bancos.dbf está com mais de 1.000.000 de registros...

Testem a performance e coloquem aqui.... eu achei um tanto lento.
Mas quero ver no teste de vocês...

Peguem o arquivo em www.stoq2000.com/netio.rar

Mário

RDD LETO Sem Mistério

MensagemEnviado: 26 Mar 2013 19:25
por Mário Isa
:'( :'( :-o
Infelizmente. pelo teste que eu fiz não posso "ainda" aprovar o NETIO.

Fiz umas mudanças em 2 .prg's da pasta cliente para testar a performance.

Num primeiro momento eu compartilhei a pasta DB (onde está o bancos.dbf)
Daí mapeei uma unidade U: para fazer o primeiro teste com o .DBF aberto na "unidade mapeada" que é o que faço atualmente...

Depois fechei esta base e abri pelo NETIO.

Ele se mostrou simplesmente "pior" que as unidades mapeadas.... (chegou a travar)
Seguem os .prgs para vcs substituirem no netio.rar publicado logo atrás.

Mario

CLIENTE.PRG
* --------------------------------------------------------------
#include "inkey.ch"
#include "setcurs.ch"
#include "error.ch"
#include "achoice.ch"
#include "fileio.ch"
#include "common.ch"
#include "dbinfo.ch"
#include "hbver.ch"
#include "hbdyn.ch"
#include "wvtwin.ch"
#include "hbgtinfo.ch"
#include "hbgtwvg.ch"
#include "wvgparts.ch"
#include "hbcompat.ch"
#include "windows.ch"

FUNCTION MAIN
 
   Alert("Vou abrir a base")
   use u:\bancos
   Alert("Já abri a base")
   if !file('bancos.ntx')
    Alert("vou indexar agora.")
    index on banco to bancos
    Alert("Terminei de indexar agora.")
   end

   set filter to internet = 'www.bancofidis.com.br'
   Alert("Vou fazer o filtro agora.")
   dbgotop()
   
   DBEDIT(2,0,24,MaxCol())
   dbclearfilter()
   
   clear

   Alert("Vou fazer localizar o registro 700000")
   locate for recno() = 700000
   Alert("Localizei")


   Alert("Vou fazer localizar o XUNICARD")
   if dbseek('XUnicard')
    Alert("Localizei")
   else
    Alert("Não Localizei")
   end

   ferase('bancos.ntx')

   close data
   ferase('bancos.ntx')
   Alert("Fechei a base")

   IF !AbreDBF("BANCOS")
      DbCloseAll()
      RETURN Nil
   ENDIF

   @ 0,0 SAY cServidorDB
   
   @ 1,0 TO 1,MaxCol()

   set filter to internet = 'www.bancofidis.com.br'
   Alert("Vou fazer o filtro agora.")
   dbgotop()
   
   DBEDIT(2,0,24,MaxCol())

   clear

   dbclearfilter()

   Alert("Vou fazer localizar o XUNICARD")
   if dbseek('XUnicard')
    Alert("Localizei")
   else
    Alert("Não Localizei")
   end

   Alert("Vou fazer localizar o registro 700000")
   locate for recno() = 700000
   Alert("Localizei")

RETURN Nil

INIT FUNCTION AppSetup()
  LOCAL  nVezes
  PUBLIC cServidorDB, cIpAddServer:=Verifica_IP(), cPortaServer:=memoread('porta.txt') // "2816"
  PUBLIC hWnd,;
         oSayMsg,;
         oDlgHabla,;
         cTituloJanela,;
         oTimer,;
         cPrinter:= WIN_PrinterGetDefault()

   //cIpAddServer:=Obter_Ip_Maquina("nome do computador onde est  rodando o servidor netio")

  REQUEST DBFNTX
  RddSetDefault('DBFNTX')
  REQUEST HB_LANG_PT
  REQUEST HB_CODEPAGE_PT850
  HB_LANGSELECT("PT")
  HB_CDPSELECT( "PT850" ) //pt850

  REQUEST HB_GT_GUI_DEFAULT
  REQUEST HB_GT_WVG
  REQUEST HB_GT_WVT
  REQUEST HB_GT_WGU

  SETMODE(25,80)
  SET TYPEAHEAD TO 0
  SET INTENSITY ON
  SET SCOREBOARD OFF
  SET DELETED ON
  SET SAFETY OFF
  SET DATE BRITI
  SET ESCAPE ON
  SET CENTURY ON
  SET DELIMITERS TO
  SET EXCLUSIVE OFF
  SET EPOCH TO 1920
  SET OPTIMIZE ON
  SET AUTOPEN OFF
  SET DBFLOCKSCHEME TO DB_DBFLOCK_CLIP
  SET MESSAGE TO 24 CENTER

  IniciaJanela()
   
  nVezes:=0
 
  DO WHILE !NetIO_Connect(cIpAddServer,Val(cPortaServer),1000,"senha")
     @ 24,00 SAY PADC("Aguarde, tentando acesso ao servidor NETIO "+StrZero(nVezes,2)+"/10",80)
     IF nVezes > 10
        Alert("Verifique se o servidor netio est  executando.")
        QUIT
     ENDIF
     nVezes++
  ENDDO
 
  cServidorDB:='net://'+cIpAddServer+':'+cPortaServer+':db'+HB_PS() 
 
  hb_gtInfo( HB_GTI_COMPATBUFFER, .T. )

RETURN Nil

FUNCTION IniciaJanela(nLi,nCi,nLf,nCf)
LOCAL oCrt

DEFAULT nLi TO 0,;
        nCi TO 0,;
        nLf TO MaxRow(),;
        nCf TO MaxCol() 
 
  cTituloJanela:="TESTE COM SERVIDOR NETIO"

  oCrt := WvgCrt():New( , , { nLi,nCi }, { nLf,nCf}, , .T. )
  oCrt:lModal := .F.
  oCrt:icon := ''
  oCrt:create()
  oCrt:resizable :=.F.
  WVT_SetFont("Lucida Console")
  WVT_SetTitle(cTituloJanela)
  WVT_SetAltF4Close(.F. )
  HB_gtInfo( HB_GTI_SPEC, HB_GTS_WNDSTATE, HB_GTS_WS_MAXIMIZED )
  hJanela:=HWG_FindWindow(0 ,cTituloJanela)
  hwg_BringWindowToTop( hJanela )
  ShowWindow( hJanela, SW_MAXIMIZE )
RETURN Nil

FUNCTION Verifica_IP
LOCAL aHosts, cName, cEstacao:=memoread('ip.txt') // "192.168.0.31" //NetName(.F.)
HB_InetInit()
aHosts := HB_InetGetHosts( cEstacao )
IF aHosts == NIL
   aHosts := HB_InetGetAlias( cEstacao )
ENDIF
IF Empty(aHosts)
   aHosts := HB_InetGetAlias( cEstacao )
ENDIF
HB_InetCleanup()
RETURN  aHosts[1]

FUNCTION Obter_Ip_Maquina(cMaquina)
LOCAL aHosts:={}
   HB_InetInit()
   aHosts:=HB_InetGetHosts( cMaquina )
   IF aHosts == NIL
      aHosts:=HB_InetGetAlias( cMaquina )
   ENDIF
   IF Empty(aHosts)
      aHosts:=HB_InetGetAlias( cMaquina )
   ENDIF
   HB_InetCleanup()
RETURN IF(Len(aHosts)>0,aHosts[1],"")


PFDATA.PRG
#include "common.ch"
#include "dbstruct.ch"
#include "hbcompat.ch"

FUNCTION AbreDBF(cDataBase,lShared)
LOCAL nArea, cServer:=cServidorDB, lOk:=.T., lAbriu:=.F.

DEFAULT lShared TO .T.

   // ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
   //  Abre o Arquivo necessario na rotina.
   // ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
   TRY
      FOR nArea:=0 To 150
         IF !Empty((nArea)->(Alias()))
            IF Upper(RTrim((nArea)->(Alias()))) == Upper(cDataBase)
               &cDataBase.->(DbCloseArea())
               EXIT
            ENDIF
         ENDIF
      NEXT
   CATCH
   END
   
   DO CASE
   CASE UPPER(cDataBase) = 'BANCOS'
        TRY
           IF !Netio_FuncExec("EXISTE","BANCOS.NTX")
              &cDataBase.->(DbCloseArea())
              NetUse(cServer,cDataBase,.T.)
   Alert("vou indexar agora.")
              INDEX ON BANCO TO (cServer+"BANCOS.NTX")
   Alert("Terminei de indexar agora.")
              &cDataBase.->(DbCloseArea())
           ENDIF
           IF SELECT(cDataBase) == 0
              lOk:=NetUse(cServer,cDataBase,lShared)
           ENDIF
           SET INDEX TO (cServer+"BANCOS.NTX")
           lAbriu:=.T.
        CATCH
           lAbriu:=.F.
        END
   ENDCASE
RETURN lAbriu

RDD LETO Sem Mistério

MensagemEnviado: 26 Mar 2013 19:40
por rochinha
Amiguinho,

Qual foi o conjunto que voce usou, Harbour e bibliotecas e de que datas são os binários ou os .PRGs originais(não so compilados após obtenção)?

Voce está fazendo testes paralelos entre NetIO e LetoDB?

RDD LETO Sem Mistério

MensagemEnviado: 26 Mar 2013 20:14
por lucimauro
Mario no meu caso eu uso o http://www.otc.pl/index.asp?s=21 e nao tenho nada a reclamar.
instalo o mediator no servidor
instalo o mysql no servidor
instala o driver odbc no servidor
nos terminais so seto o ip do servidor e pronto nao preciso mais instalar nada.
lembrando que no mysql free tenho ate 100 usuarios, para outros bancos so 5 usuarios.

RDD LETO Sem Mistério

MensagemEnviado: 27 Mar 2013 07:45
por Mário Isa
Muito bom Lucimauro.
Você comprou o mediator ?
Qual versão usar ?

Seria o
a) Mediator for MS SQL v.5 ou
b) Mediator for MySQL ou ainda
c) Mediator for MS SQL ???

E na página deles também apresenta um
a) Mediator clients
Qual deles devo comprar/baixar/testar/pagar ???

Mário

Mediator for Oracle
Mediator for MS SQL
Mediator for PostgreSQL
Mediator for MySQL
Mediator clients
Delphi and COM components
Terminal - server and client
xHarbour/Harbour

Mediator for Oracle v.5
Mediator for MS SQL v.5
Mediator for PostgreSQL v.5
Mediator for MySQL v.5
Mediator clients v.5
Delphi and COM components v.5

RDD LETO Sem Mistério

MensagemEnviado: 27 Mar 2013 08:46
por Poka
Mário Isa disse
Ele se mostrou simplesmente "pior" que as unidades mapeadas.... (chegou a travar)
Seguem os .prgs para vcs substituirem no netio.rar publicado logo atrás.


Á algum tempo atrás tentei usar o LetoDb, mas não consegui fazer funcionar e acabei desitindo, pelos relatos parece que fica rápido.
Testei utilizar o Netio, deu tudo certo. Fiz um teste simples. Organizei os arquivos de um terminal. Resultado. Muito lento, mais que o normal. Desisti.

Agora estou pensando em sair mesmo do dbf/cdx. Eu não posso reclamar do DBF.

Tenho sistema em uma empresa há quase 25 anos, e nunca , mas nunca mesmo corrompeu banco de dados, e índices poucas vezes, isso quando era ntx, com cdx praticamente nunca. E tinha empresa que estava sempre corrompendo . Obs . ( o cliente tinha o computador instalado perto do forno fazer pão, em outros os funcionários passavam por cima do fio da rede e por aí vai). Acho que o problema está mais na instalação das maquinas do que no banco de dados.

É só ver na internet que os outros bancos de dados também se corrompem . No DBF sabemos como fazer voltar a funcionar, agora nesses outros bancos de dados não sei como vai ser .

Mas não tem jeito, temos que mudar. Hoje existe empresas que não aceitam mais o seu sistema se for em DBF.

Comecei a estudar o Mysql, mas me parece que não é free. Desisti.

PostgreSql . parece que não tem como criar 2 bancos de dados em lugares diferentes, preciso disto no meu sistema, para fazer Backup e usar em outros computadores parece que meio complicado também , desisti também.

Firebird. Parece ser esse mesmo a ser utilizado. Já testei, vc cria banco de dados em vários lugares, e é assim que eu preciso. Não estou conseguindo conectar, está dando erro, mas vou tentando por aqui. O erro que está dando está em outro post “FIREBIRD NO XHARBOUR”.

Poka

RDD LETO Sem Mistério

MensagemEnviado: 27 Mar 2013 09:03
por Pablo César
Ei pessoal, seria conveniente utilizar as tags adequadas para citações e para exibir códigos fontes. Estão confundindo a utilização das tags. Usem CODE tags para código fontes não para citações. Aviso antes de que isso vire moda...

RDD LETO Sem Mistério

MensagemEnviado: 27 Mar 2013 09:35
por Mário Isa
oi Pablo
é que às vezes se vc for colocar um quot / quote a coisa é muito grande o code /code deixa ele pequeno...

tem como fazer uma "citação" quote /quote e deixar pequeno ??

Mário

RDD LETO Sem Mistério

MensagemEnviado: 27 Mar 2013 10:57
por Pablo César
Entedi Mario, vou ver o que podemos fazer sobre isso.

RDD LETO Sem Mistério

MensagemEnviado: 17 Abr 2013 12:27
por Itamar M. Lins Jr.
Ola!
Mas eu preciso startar o servidor como o colega Itamar disse?

O Letodb roda como um serviço do windows, mesma coisa para MySQL, PGSQL, etc...
Eu faço um pequeno .bat e coloco o atalho dele no inicializar ?

Não precisa, basta instalar e depois ativar o servidor apenas uma vez.
>letodb install //Instalando o servidor.
>net start letodb_service  //ativando o servidor.

Tanto faz se no windows XP ou Win 7.
Eu posso trabalhar com Driver = NTX?
Porque repetiu a DataPath 2 vezes ?

Teste para ver se funciona o NTX. Eu uso CDX. Segundo o manual funciona tanto com NTX ou CDX.
4.1 letodb.ini

You may provide configuration file letodb.ini if you isn't satisfied with
default parameters values. Currently following parameters exists ( default
values are designated ):

Port = 2812 - server port number;
TimeOut = -1 - connection timeout;
DataPath = - path to a data directory on a server;
Log = letodb.log - path and name of a log file;
Default_Driver = CDX - default RDD to open files on server ( CDX/NTX );
Memo_Type = - memo type ( FPT/DBT ). Default: FPT for DBFCDX, DBT for DBFNTX;
Lower_Path = 0 - if 1, convert all paths to lower case;
EnableFileFunc = 0 - if 1, using of file functions ( leto_file(),
leto_ferase(), leto_frename() is enabled;
EnableAnyExt = 0 - if 1, creating of data tables and indexes with
any extention, other than standard ( dbf,cdx,ntx )
is enabled;
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.
Cache_Records - The number of records to read into the cache
Max_Vars_Number = 10000 - Maximum number of shared variables
Max_Var_Size = 10000 - Maximim size of a text variable
Trigger = <cFuncName> - Global function letodb RDDI_TRIGGER
PendingTrigger = <cFuncName>- Global function letodb RDDI_PENDINGTRIGGER
Tables_Max = 5000 - Number of tables
Users_Max = 500 - Number of users
Debug = 0 - Debug level
Optimize = 0 - if 1, SET HARDCOMMIT OFF
AutOrder = 0 - SET AUTORDER setting
ForceOpt = 0 - _SET_FORCEOPT setting

It is possible to define [DATABASE] structure if you need to have a
directory, where files are opened via other RDD:

[DATABASE]
DataPath = - (mandatory option)
Driver = CDX - ( CDX/NTX )

You can define as many [DATABASE] sections, as needed.

In Windows environment the letodb.ini must be placed in a directory, from
where server is started.
In Linux the program looks for it in the directory from where the server
is started and, if unsuccessfully, in the /etc directory.


Leia os arquivos responde uma serie de perguntas.
Os exemplos tambem.
Onde vc criou as variáveis
a) dDados
b) DB
c) apel

A variavel dDados é onde estão os DBF´s
Por exemplo:
 dDados := "c:\dados\lojaxyz"

DB é o nome do DBF em questão.
db := "clientes.dbf"

e apel é o apelido (alias)
apel := "cl" //alias de clientes.dbf

Mais isso é irrelevante, porque isso está até mal atribuido, são codigos velhos que preciso atualizar.

Saudações,
Itamar M. Lins Jr.

RDD LETO Sem Mistério

MensagemEnviado: 18 Abr 2013 22:48
por alaminojunior
Mario, não sei se já tomou uma decisão, mas pondere a respeito de usar a SQLRDD. Aliás, me perdoem os moderadores por 'desviar' o foco da thread, mas notei um leve sofrimento no semblante do colega.

Minha 'pouca' experiência na questão é a seguinte:

LetoDB, deixei rodando algum tempo em produção num cliente, porém tive sérios problemas com Set Scope e algumas rotinas onde precisa gerar códigos de pedidos. Quando DBFCDX funcionava 200%, e ao migrar para LetoDB, infelizmente não deu certo. Talvez tenham corrigido tais defeitos.

Netio, não conheço.

SQLRDD, foi a qual adotei há dois anos com ajuda do Mestre Leonardo Machado, e uso até hoje.
Motivos principais:
1º Me permitiu usar a mesma sintaxe DBFCDX até me sentir em casa com ela;
2º Depois de acostumado, só uso sintaxe SQL em rotinas novas, mantendo sintaxe DBFCDX em rotinas à atualizar;
3º Trabalhar com bancos SQL abre inúmeros horizontes, tornando possível a criação dos mais diversos relatórios gerenciais e administrativos, por exemplo;
4º Torna fácil a conexão com bases remotas, abrindo mais alguns horizontes.

Basta compilar seus projetos com as lib´s da SQLRDD, ter o servidor MySQL ou PostGres instalado no servidor, um arquivo .ini nos clientes informando os parâmetros de conexão e somente isso.

RDD LETO Sem Mistério

MensagemEnviado: 21 Abr 2013 19:05
por alberto_dias
Prezado AlaminoJunior
===================
Primeiramente, a possibilidade de usar SQL nos projetos é maravilhosa,( excelente para todos nós que usamos DBFCDX), :)Pos
"Usei muito no tempo do FOXPRO 2.5 e era uma ferramenta PODEROSA, PRÁTICA E RÁPIDA para se usar com o Banco de Dados DBFCDX"
Estou trocando gradualmente os meus clientes para o LETO, estou sem problemas no momento, não uso o SET SCOPE.
Faço isso pois tive vários problemas, principalmente quando em rede, com as novas máquinas que estão chegando são de 64 bits,
e quando colocava em rede com as máquinas que já existiam de 32 Bits, ai o bicho pegava, os CDX quebravam e eu não conseguia nem dormir. :?
Novamente agradeço ao este Grupo, me ajudou em muito, troquei os clientes para o Leto e consegui dormir de novo, Obrigado, :-Y
Estou aqui lendo sua mensagem e gostaria de perguntar, pois a possibilidade de usar SQL daria uma grande força para o meu trabalho,
e para muitos que estão lendo estas mensagens, pois poder usar o SQL, abre grandes Horizontes.( Meu pode acreditar).
============================================================================================
SE PUDER RESPONDER,
============================================================================================
1-) Roda junto com estruturas diferentes 64 bits X 32 bits ? ("O Leto possibilitou isso e não degrada os CDX")
2-) Como fica o trafego na Rede ? ("O Leto deixou as estações rápidas")
3-) Tem algum comando que não funciona ? ("No leto não consigo usar LetoFile()")
4-) Precisa mudar muito os Prgs atuais ? ("No leto foi muito fácil, quase nada mudou")
5-) Uso Harbour 3.0 + Bcc 5.8.2 + Gtwvg + Leto, será que tem algum Problema ao usar junto com o RDDSQL ?
============================================================================================
ALBERTO DIAS :D

RDD LETO Sem Mistério

MensagemEnviado: 22 Abr 2013 11:36
por alaminojunior
1. Roda perfeitamente. Tenho clientes usando terminais com 32 e/ou 64 bits e até o momento está perfeito.
Inclusive ultimamente, quando preciso formatar ou dar alguma manutenção em servidores, tenho optado por instalar a versão 64bits do MySQL (quando o hardware permite, claro), aí sim a coisa fica boa.

2. A princípio você vai notar um ligeiro ganho de velocidade, eu disse ligeiro. No item 4 explico o porquê.

3. Não tenho notado.

4. A princípio, assim como no LetoDB, precisa colocar o trecho responsável pela conexão com o banco.
Feito isso, o seu sistema rodará da mesma forma como rodava antes.
Agora, para poder extrair algum poder a mais do banco SQL, é preciso (e recomendável) fazer uso de instruções SQL.
Com o auxílio de um bom cliente SQL como o HeidiSQL, vá criando e testando suas query´s com calma. Com isso, a sua experiência vai aumentando e você irá tirar ótimos resultados.

5. O primeiro entrave é que SQLRDD não funciona com Harbour.
Eu utilizo xHarbour 1.2.3 + BCC 6.40, e para a parte gráfica GTWVG e HWGUI. Mas é possível trabalhar com ambas as RDD´s. Basta indicar a padrão que será usada na abertura das tabelas, e depois para abrir tabelas específicas, use a cláusula 'VIA' do comando de abertura, indicando a RDD a utilizar.

RDD LETO Sem Mistério

MensagemEnviado: 22 Abr 2013 19:36
por Itamar M. Lins Jr.
...porém tive sérios problemas com Set Scope e algumas rotinas onde precisa gerar códigos de pedidos.

Uso o SET SCOPE o tempo todo, e não me deu problema, tenho mais de 5 contadores, pedidos, NFe, Orçamento, OS, etc... todos funcionando sem problemas.

PS. Recomendar o uso do xHarbour neste momento, penso que não é uma coisa boa, tem uma serie de problemas já resolvidos no Harbour.
Outra coisa é comparar DBF com SQL, não tem nada haver e o LETODB não é uma ferramenta comercial.
Na minha opnião se for mudar para SQL irei usar o SQLMIX do Harbour que é gratuito e realmente estarei usando uma coisa moderna, o SQLRDD é um simulador.
Quanto está custando o SQLRDD ?

Saudações,
Itamar M. Lins Jr.

RDD LETO Sem Mistério

MensagemEnviado: 22 Abr 2013 19:49
por Itamar M. Lins Jr.
Exemplo de indice temporário via LETODB e Hwgui.

   cQuery := " dtos(vencimento) >= '"+dtos(inicio)+"' .and. dtos(vencimento) <= '"+dtos(fim)+"' .and. empty(pagamento) .and. '"+cVenda+"' == cod_venda"
  OrdBy  := "dtos(vencimento) + cod_client "

If lRddLeto
   Index on &OrdBy Tag re99 to &cTemp  for &cQuery temporary
Else
   tRec   := re->(OrdKeyCount())
   oBar   := HProgressBar():NewBox( "Processando, "+lTrim(str(nRec,9))+" De "+lTrim(str(tRec,9))+" Registro(s)",,,400,, 5,tRec,,.T. )
   Index on &OrdBy Tag re99 to cTemp for &cQuery temporary eval {||oBar:Step(),.t.}
   oBar:Close()
EndIf


Desliguei o barra de progresso quando uso o LETODB.

Saudações,
Itamar M. Lins Jr.

RDD LETO Sem Mistério

MensagemEnviado: 22 Abr 2013 19:52
por Itamar M. Lins Jr.
Ola!
Usando CDX Harbour 3.2 Letodb ou CDX.

************************************************
Function FiltraPorEquivalencia(cStrFiltro,oBPes)
************************************************
*
*
Local aFiltro := {}, oDlg, Titulo := "Filtrando: "+ cStrFiltro, oFont,oBrw, nReg, lAcao := .T.
If empty(cStrFiltro)
   hwg_Msgexclamation("Digite algo !")
   return .t.
EndIf

cStrFiltro := alltrim(cStrFiltro)
eq->(OrdSetFocus(2))
el->(OrdSetFocus(1))
el->(OrdScope(0,nil))
el->(OrdScope(1,nil))
el->(DbGoTop())
Do While el->(OrdWildSeek( "*"+cStrFiltro+"*", .t. ))
   If eq->(DbSeek(el->cod_mercad))
      AAdd( aFiltro, {eq->cod_mercad,eq->mercadoria,eq->avista,eq->quantidade} )
   EndIf
EndDo
nReg := len(aFiltro)

If nReg > 0

   PREPARE FONT oFont NAME "MS Sans Serif" WIDTH 0 HEIGHT -14

   INIT DIALOG oDlg CLIPPER NOEXIT TITLE Titulo Font oFont AT 0,0 SIZE 800,400  STYLE WS_VISIBLE+WS_SYSMENU+WS_CAPTION+DS_CENTER

   @ 5,05 Browse oBrw array of oDlg Size 780,380 Style WS_VSCROLL ;
   On Click {|| hwg_EndDialog() } ; //Tecla ENTER

   hwg_CREATEARLIST(oBrw,aFiltro)

   oBrw:aColumns[1]:heading := "Código"
   oBrw:aColumns[2]:heading := "Descrição"
   oBrw:aColumns[3]:heading := "Preço"
   oBrw:aColumns[4]:heading := "Quantidade"

   ACTIVATE DIALOG oDlg //NOMODAL
   If eq->(DbSeek(oBrw:aColumns[1]:Value))
      oBPes:Refresh()
      lESC := .F.
   Else
      hwg_Msginfo("Não achou")
      lAcao := .F.
   EndIf

Else
   hwg_Msginfo("Equivalência não encontrada !")
   oBPes:Refresh()
   lAcao := .F.
EndIf

Return lAcao

RDD LETO Sem Mistério

MensagemEnviado: 22 Abr 2013 20:16
por Itamar M. Lins Jr.
3-) Tem algum comando que não funciona ? ("No leto não consigo usar LetoFile()")


Aqui sempre funcionou, verificou esse "FLAG": ENABLEFILEFUNC = 1

*************************
Function ordena_planoctas
*************************
*
*
Local cFunc := iif(lRddLeto,"leto_file(dServidor+'planoctas.cdx')","file('planoctas.cdx')" )

If !&cFunc
   AbreDb('planoctas.dbf','pl',.f.)

   nReg := 0 ;  tReg := pl->(RecCount())
   oBar := HProgressBar():NewBox( "Criando indices planoctas, "+lTrim(str(nReg,9))+" De "+lTrim(str(tReg,9))+" Registro(s)",,0,400,, tReg, tReg,,.f. )

   index on reduzida tag pl01 eval {||oBar:Set(,Recno()),.t.}
   index on conta    tag pl02 eval {||oBar:Set(,Recno()),.t.}
   index on reduzida tag pl03 for tipo = 'A'  eval {||oBar:Set(,Recno()),.t.}
   index on nome     tag pl04 for tipo = 'A'  eval {||oBar:Set(,Recno()),.t.}
   FechaDb('pl')
   oBar:Close()

endif
RETURN Nil

//dServidor pode ser //locahost:2812/ ou //meuip.xyz.com.br:2812/ ou //192.168.1.1:2812/...
//O PATH do leto eu informo no arquivo letodb.ini

Port = 2812             
Logfile = "letodb.log"   
DEFAULT_DRIVER = CDX     
DATAPATH = c:\dados\xyz\
ENABLEFILEFUNC = 1
CRYPT_TRAFFIC = 0
PASS_FOR_LOGIN = 0
PASS_FOR_MANAGE = 0
PASS_FOR_DATA = 0
Share_Tables  = 0
[DATABASE]
DataPath = c:\dados\xyz\
Driver = CDX



Saudações,
Itamar M. Lins Jr.

RDD LETO Sem Mistério

MensagemEnviado: 22 Abr 2013 23:06
por alaminojunior
Itamar M. Lins Jr. escreveu:PS. Recomendar o uso do xHarbour neste momento, penso que não é uma coisa boa, tem uma serie de problemas já resolvidos no Harbour.


Itamar, leio isso quase que constantemente em fóruns e mais uma vez pergunto:
Que problemas são estes ?
Sei que MultiThread no xHarbour realmente tem os seus pepinos, mas tirando isso que aliás não uso ... quais são concretamente estes problemas ?

Até onde eu entendo e uso de xHarbour, funciona maravilhosamente bem. Pode ser que se um dia eu experimentar o Harbour, possa mudar de opinião, mas ...

RDD LETO Sem Mistério

MensagemEnviado: 23 Abr 2013 10:18
por Itamar M. Lins Jr.
On Sat, 19 Jan 2013, Andi Jahja wrote:

Hi Andi,

> Seems no comment at all, particularly from what ppl call *nix users. BTW,
> does anyone here have a thought about it?

I think that xHarbour lost most of them.

> FYI, we stuck releasing versions officially because there's no-one
> interested in building that *nix stuffs.

In the last year you made a lot to break *nix builds. Now after your
recent modifications you break them again so maybe few really advanced
users who are patient enough to fix your modifications can create *nix
xHarbour builds - others migrated to Harbour.

> I would suggest to leave *nix if there's no longer interest in it.
> Usability is much more important than what is called portability.
> Furthermore, I'd swear that 99.99% of xHarbour users are on Windows OS,
> so the rest 0.01% can be disregarded (read: not worthy)

Bad idea, it will only help to hide bugs which appeared recently in
xHarbour. Some of them can be exploited also on MS-Windows, i.e. custom
memcpy() broke all 64bit builds. Also WIN 64 ones though here xHarbour
applications GPFs when user address space reach 2^32. On serious platforms
such addresses are default at application startup just to catch such buggy
code ASAP and fix it. To be more funny advanced compilers make such
optimizations much better with optimized autoinlined code so it also
reduces the speed.

There are other serious development reasons to keep support for *nixes,
i.e. there is no tool like VALGRIND for MS-Windows so you won't be able
to catch some serious problems, i.e. I see that in last weeks you started
to fix memory leaks in xHarbour compiler code. But you haven't discovered
yet that it's not possible to make it well in classic way due to bison
behavior. Bison authors also saw this problem so they introduced
expression destructors which should help in such process. Anyhow these
functionality still does not work as expected in some cases what can be
well seen in valgrind logs and you want to drop support for platforms
were such important tool can be used. In practice it means that there is
very small chance that you will ever reach sufficient results in compiler
memory leak fixes.
BTW I've seen your message on xHarbour user list that such memory leaks are
only in compiler. It's not true. Memory leaks which appear due to wrong
syntax are usually caused by unreleased bison grammar expressions so they
exist also in macrocompiler and are runtime memory leaks which can be
exploited in all programs which macrocompile user expressions.
To resolve this problem in Harbour few years ago I created garbage collector
for expressions. To not hide other memory leaks in compiler mode it's
activated on syntax errors only. This job is still before you and you want
to drop support for platform were important helper tools can be used.
Finally it means that you want to drop support for platforms which begins
to be the most popular one on the all world used in most "smart" devices
so it will be very important signal about xHarbour future for users.

> We should not stop because of it.

IMHO before new release you should fix some critical problems introduced
in last months.
Porting some things from Harbour you made few typos which later have
unpredictable results, i.e. typo in really small patch which fixed very
slow source code browsing in debugger caused that Luiz (who wrongly check
that the problem was fixed in Harbour) used in xHarbour debugger RTL
classes so now it's not possible to debug them or even use debugger by
users who overloaded some part of RTL classes used in debugger.
Your "improvements" in macro compiler speed caused that now maximum
macrocompiler string size is 8191 bytes in xHarbour. Before your
modifications it was ~32768 and longer strings could cause unpredictible
results (memory corruption) due to bugs in HVM part of macro compiler
code. In Harbour all such bugs have been fixed long time ago and it's
guarantied that Harbour can compile any macro expression up to 16MB and
if longer expressions cannot be compiled then it's guarantied that clean
RT error is generated without any hidden memory corruption. And to compare
Harbour macro compiler is about 3 times faster then xHarbour ones and is
fully reentrant safe so it does not need and MT locks. The whole MT mode
in xHarbour is sth what should be rewritten from scratch. Now number of
MT applications in [x]Harbour community is growing up and they have to
be compiled by Harbour because xHarbour MT mode is unusable for code which
needs stability and some more advanced MT functionality. Good example is
LETO server which cannot be compiled by xHarbour due to critical xHarbour
bugs, missing functionality and wrong MT model.
There are also other problems introduced recently like wrong casting which
pacified warnings when in fact they were bugs exploited in 64bit mode. Now
it's horrible job to clean xHarbour code and make it fully functional for
Win64 bit mode - you hide the most helpful thing: compiler warnings so
you will have to find someone who will check whole xHarbour code line by
line and fix all related code. Of course at the beginning he should have
clear vision what should be done and which types should be used. I do not
thing it's possible to realize it in resonable time so this should not
stop you anyhow I signal serious problem.

I'll only add that you may have problems with code copied from Harbour.
xHarbour GC does not support custom user mark functions so you should
expect random memory corruptions after GC activation. Very hard to
locate and fix problems. Unlike Harbour xHarobur does not detect them
automatically so it will cause random GPFs in different subsystems.
User will report them but fixing such things using information from
users is like fighting with a ghosts so I strongly suggest to do sth
with it.

best regards,
Przemek

RDD LETO Sem Mistério

MensagemEnviado: 23 Abr 2013 10:24
por Itamar M. Lins Jr.
Correção na função do xHarbour para o Harbour poder roda o SQLRDD.
I've just committed it:

2013-01-21 16:36 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
* harbour/src/rtl/itemseri.c
+ added support for deserialization xHarbour HB_SERIALIZE() output.
All types except codeblocks are supported. I haven't added support
for xHarbour serialized data with cyclic references. If it will be
really necessary then I can implement it.
I also added workaround for bug in xHarbour serialization code so
now Harbour correctly decodes data with LONGLONG numbers though
xHarbour cannot correctly decode its own stream.
Now Harbour can deserialize xHarbour data encoded by HB_SERIALIZE()
and stored somewhere. It can be important in migration process, i.e.
SQLRDD uses HB_SERIALIZE() to encode data in memos so now SQLRDD
port for Harbour should read old tables and decode xHarbour items
correctly. The same is for any other tool which saved HB_SERIALIZE()
output in xHarbour.

best regards,
Przemek

RDD LETO Sem Mistério

MensagemEnviado: 23 Abr 2013 10:27
por Itamar M. Lins Jr.
Vale lembrar que depois desse post ai em cima o Andi, deixou o projeto do xharbour.

Saudações,
Itamar M. Lins Jr.

RDD LETO Sem Mistério

MensagemEnviado: 23 Abr 2013 10:40
por Itamar M. Lins Jr.
Tem muita coisa.
Para um simples usuário como eu pode não significar nada porém para o pessoal que desenvolve aplicações comerciais do porte do Xailer,FiveWin, ADS, etc... é muito importante essas correções.
Além do mais quem é a equipe do xHarbour neste momento ?
Já ouviu falar no QT ? Verificou o que o Pritipal tem feito, os exemplos ?

On Mon, 28 Jan 2013, Ron Pinkas wrote:

Hi,

Sorry for late respone.

>> Please only remember that I was not alone in Harbour modifications in
>> last years. Viktor made really great job in general code and used types
>> cleanup. Mindaugas added important extensions to compiler and HVM/RTL
>> code, Pritapl is extensively working on set of addons like HBIDE, HBQT,
>> HBXBPP. Also many other people worked on Harbour.
> Thanks for your modesty, but I am convinced that none of this would
> ever take place, unless you first revived Harbour, single handedly,
> as you did, and even after, those IMO, are minor, and superficial
> contributions, compared to your work.

Thanks for nice words but it's not really true. I think that
people using HBMK2 found Viktor modifications as the most
important ones because they allow him to easy move to Harbour
and without any doubts such basic functionality is the most
important for them so for sure it was extremely important for
the whole project.
Anyhow I'm most interested in the future of both projects
so lets leave this discussion. I feel that I can hurt someone
continuing it, i.e it was not my intention to discard Andi
work. I only wanted to point that some not working ports may
create false imaginations about real functionality of original
code and competitions of its authors. I hope that Andi seriously
rethink his decision because I'm finding him as the very important
person in the future modifications.

>> In Harobur there is text filewhere I tried to discribe main differences
>> between both projects:
>> http://http://harbour-project.svn.sourc ... t?view=log
>> This may show you what should be done. I'll try to update this file
>> and add some information about other differences.
>> As you can seen not too much. I think that in less then month all
>> modifications can be finished.
> Actually this is not shocking for me, and I was debating it my self.
> I am not sure what would be easier, as it mostly depends on the
> DRIVE of the specific individual[s] interested in caring this task.
> Sadly, I am not in a position to volunteer for this Job, for many
> personal reasons, so I can not suggest what would be easier. I trust
> that the person willing to take on this Job, will have his
> preference.

The most important differences between both project are well known.
Anyhow it's also something that it was not very popular in news list
but it's very important for general language description in the future:
small incompatibilities to Clipper and anomalies in implementation
(also in Clipper) which where cleaned or at least documented in
Harbour. We do not have to follow exactly some decisions anyhow
it's much easier to operate on code where some problems are resolved
even to add again some extensions because programmer can see some
interactions which were unknown for him in initial implementation.
It also allows to eliminate duplicated code or code which is to
danger and may break HVM code.
Good example is OOP implementation. Many of __cls*() and __obj*()
functions are repeated or very similar and I can onlu guess that
no one exactly knows what each of them and what are the differences
without careful xHarbour core code analyzing. Here the situation
in Harbour is also bad. I left many functions just for backward
compatibility but without any doubts some of them should be removed
and rest replaced by new small set of functions with precisely
defined actions. We should also agree some extensions so they can
be implemented in all places. If we do not understand something
in current implementation then we should remove it - I'm serious
there are things which never worked or stop to work correctly long
time ago and now it's not possible to guess why we have them and
what they should exactly do. In last week I tried to document
xHarbour HVM OOP functions and compare the to Harbour. Also with
other functionality and it's really gray area. I.e. why xHarbour
has PUBLISHED scope. Looks that it's the same as EXPORT + persistent
flag or at least it duplicates such functionality but with separate
set of functions (also duplicated). For serialization code new
duplicated functions were added which tries to merge both functionality.
To make it more complicated we have yet another serialization method
by HBPRESISTENT class which is merged with other serializations with
many side effects, etc.

>> The windows only extensions and windows API wrappers have WIN_ and
>> WAPI_ prefixes in Harbour and are part of HBWIN library. I think it's
>> good solution because it well separates non portable MS-Windows only
>> code what helps users to create portable programs and isolate local
>> to system extensions.
> Agree, except, I would in general prefer resolution by means of
> namespace support. IMO, NameSpaces are critical feature of any
> modern compiler, and long ago we should have implemented and
> standardized namespace usage to have code like this:
> USING NAMESPACE Clipper
> To force usage of STRICT Clipper compatible RTL Functions, vs.
> USING NAMESPACE Harbour
> To prefer EXTENDED Clipper RTL. or of course manual overrriding:
> Clipper.SubStr(...) vs. Harbour.SubStr(), etc.
> As well as:
> USING NAMESPACE Windows
> I hope you agree that it is more flexible, and elegant, then using prefixes.

I agree that namespace is very important. Anyhow it is much more wider
problem which has many interactions with compiler and with HVM at runtime
when dynamic libraries are loaded and unloaded during application life.
In case of [x]Harbour it also interacts with macrocompiler so we need
dynamic code execution context. Such context should resolve also other
things like limited functionality (sandboxes) for foreign code. Finally
it should also include support for named parameters with default
values what seems to be very important in current days, i.e. I have
dynamic JSON RPC (1.0 and 2.0) server, client and peer connection library
for Harbour so I can exchange data with most of other languages but without
named parameters in core Harbour code it has reduce functionality to
position parameters or dedicated user functions which can decode default
parameter values from partial parameters in hash array.
A lot of things have to be changed to fully implement everything and
I'm not sure it can be done in reasonable time by volunteers.

>> The namespace support is sth what you will have to make yourselves.
>> I'm not familiar with this code.
> It has been many years since I wrote it, and I know it is not 100%
> elegant, due to reliance on PP code, and having to use multiple
> compilation when cyclic reliance between 2 sources exists, but I
> believe it to be very complete and stable, and it offers great
> flexibility and full namespace support, to both C code, and PRG
> code, as well as Macro executed code. I would strongly appreciate
> your review \xharbour\doc\namespaces.txt for the full set of
> functionality it offers, in terms of a Namespace MODEL, then we
> could discuss the code, which I am really much less interested in.

OK, I'll try to look at it in spare time.

>> In Harbour compiler can be used at runtime. It means that
>> program which works like xBaseScript can be implemented in just few
>> lines and .prg files are executed with full speed just like
>> after -gc2 compilation.
> Interesting - what about the copyright exception which was NOT given
> to the Compiler sources?

Still exists so such programs have to be released on GPL license.
In fact in Harbour the folowing files do not contain Harobur excption:
cmdcheck.c
genc.c
genhrb.c
harbour.y
hbfunchk.c
hbgenerr.c
hbident.c
hbmain.c
A lof of code inside is written by me but not all so I still have on
my TODO list to rewrite them. It can be done quite easy starting
from macrocompiler grammar rules and creating new flow control for
compiler mode. It should resolve many bad things which are forced
by current grammar rules defined in harbour.y
Anyhow it's not critical for me and I do not find anything wrong
that HBRUN in Harbour is on GPL license.

>> I even create hbscript which can be used as active script in
>> MS-Windows. I haven't committed it yet. It covers similar functionality
> >from xHarbour.com - I tested it with xHarbour examples and they
>> worked well.
>
> Very good

I'll try to commit it soon so you can see it in action.
It was written by me and Mindaugas.
It's pure C code though it defines C++ objects for COM/OLE
interface. If you agree then I would like to attach one of
your html example file from xBaseScript just for comparison.
I'm not MS-Windows programmer so this code to be alive needs
support from Windows users.

>> The real problem can appear at runtime and is caused by binary
>> compatibility with older code.
>> HB_SERIALIZE() gives incompatible results. It means that
>> HB_DESERIALIZE() from Harbour cannot decode data encoded by
>> current xHarbour HB_SERIALIZE().
>> HB_SERIALIZE() is used by SQLRD so this problem is not such trivial
>> because it may block migrating to new xHarbour version.
>> Probably this can be resolved adding support for signatures used
>> by xHarbour in serialization code. I haven't though about it
>> before. I'll look at it closer and if it's possible I'll commit
>> such patch to Harbour.
> Saw you already committed.

Yes and I added also support for decoding data with cross refrences,
objects and HBPERSITENT objects. I also recognizes correctly serialized
codeblocks skipping their body (decoded as NIL).
It means that now everything except codeblocks serialized directly
or indirectly by xHarbour version of HB_SERIALIZE() is correctly
decoded by Harbour. When I was checking xHarbour serializtion code
I've found some problems which definitely have to be fixed.
I'll commit critical fixes soon.

>> hb_valToExp() gives different results then ValToPrg() but in fact
>> Harbour creates real expressions which can be macrocompiled so it's
>> rather like a fix for current xHarbour behavior.
> Mmm, are you not aware of xHarbour's ValToPrgExp()?

I have to missed it or I exploited some problems with it in the past.
When I touched HB_SERIALIZE() I also checked other serialization code
with some OOP functionality in Harbour and xHarbour. As result I
created new general functions __obj{Set,Get,Restore}IVars() which
can be used as general serialization function regardless of object
definition. They can serialize whole object instance area also
overloaded by descendant classes which needs super casting or
have nonvirtual hidden messages. These functions can be used to
replace all other __obj*() and __cls*() functions which tries to
operate on object instance variables. I also updated hb_valToExp()
to use them so now the serialization is more similar to xHarbour
though it does not use PRIVATE variables so deserialization is
reentrant safe.
In the future I will want to document how programmer can control
which object items should be serialized automatically.
I plan to add support for VAR ... NOSAVE like in xBase++ to
explicitly disable serialization for given variables. For
backward compatibility if objects has variables with PERSISTENT
attribute then only this variables will be saved. It should cover
HBPERSITENT class functionality. Pointer items and codeblock
will be eliminated. Exported persitent variables will give
functional replacement for published scope.

Looking at different serialization code implemented in xHarbour
I tried to document some most important things I found. It should
help in creating one centralized and well documented serialization
code:

1. HB_SERIALIZE()
- it does not serialize timestamp values "T"
- it wrongly serialize LONGLONG values and then cannot desrialize
data containing LONGLONG values
- it does not serialize pointer items "P"
- for objects it uses:
HBPersistent:SaveToText()
or
__ClsGetPropertiesAndValues( oObj )
- stores CODEBLOCKs as "B" + HB_SERIALIZE( HB_SaveBlock( <bCode> ) )

2. ValToPrg() / ValToPrgExp()
- it does not correctly serialize timestamp values "T"
- potential problems with strings containig chr(0) or "\" characters
StringToLiteral() does not work correctly.
- it does not serialize memo strings "M"
- it converts pointer items to numbers "P"->"N"
- no support for cross and cyclic references in hashes
- deserialization by macrocompiler is not reentrant safe so if
execution of macrocompiled data activates some code which may
internally use deserialization of other ValToPrg() values then
it breaks upper level data because it operates on common private
variable. It is not unusual situation, i.e. it cannot be used
with code where objects retrieve their initial state from
serialized data inside constructors.
- for objects it uses:
__objGetValueDiff( oObj )
effectively it works like __ClsGetPropertiesAndValues( oObj ) in
HBPersistent():SaveToText() but saves also EXPORTED variables and
does not saves private and hidden vars declared with PERSISTENT
attribute.
Unfortunately it wrongly saves CLASSVARs with some unexpected
values extracted from object instance area - this is serious
bug because it badly interacts with deserialization code.

3. HBPersistent():SaveToText()
- it does not correctly serialize hashes (generates broken output)
because it wrongly uses ValToPrg() instead of ValToPrgExp() for
types which are not directly supported.
- no support for cross and cyclic references
- to serialize objects which are HBPersistent class descendant
(so also Self) it uses:
__ClsGetPropertiesAndValues( oObj )
but reduces the properties list to the ones which have different
values different then in object created by:
__ClsInst( Self:ClassH )
- other objects in instance variables are not serialized.

4. Functions to clone complex items at runtime.
They are not strictly serialization functions but share some similar
problems like cross references and creating next object instances so
they have to be synced with serialization code. Now xHarbour has:
AClone(), HClone(), __objClone()
- HClone() in xHarbour does not clone anything, it's simple HCOPY()
so it has to be fixed and bound with AClone() code so they cab use
common references list.
- AClone() - clones only arrays but doesn't clone hashes and does not
make any deeper check for hash contents so items like:
a := { { "V" => NIL } }
a[1,"V"] := a
are not correctly cloned. It means that both functions have to use
common internal clone engine like in Harbour. So far in xHarbour
only HB_SERIALIZE() tries to follow internal references in arrays,
object and hashes.
- __objClone() - it does not clone nested objects - only instance
area is cloned. In xHarbour there is support for class method
declared with CONSTRUCTOR attribute. Such methods are executed with
HB_OO_MCLSCTOR_INSTANCE parameter when new object is created and
with HB_OO_MCLSCTOR_CLONE parameter inside __objClone() function.
It means that theoretically it's possible to implement some custom
initialization for cloned objects and deeper cloning for object
items. Unfortunately it's not bound with internal list of cross
references so user cannot implement custom deep cloning for objects
with internal cross references. Also AClone() is not bound with
it and ignores object with defined clone/copy/init constructor.
This have to be resolved yet also in Harbour. We should agree
how to define copy/init constructors or which messages send to
new objects when they are cloned or deserialized - now
deserialization code completely ignores copy constructors, in
opposite Xbase++ sends :notifyLoaded() message to deserialized
objects so programmer can overload it and make some necessary
initialization.
We should also add support for nested cloning so user can access
cloned item list and redirect it to common clone engine or at
least define that objects support deep cloning so we can use
standard array cloning method for such objects.

I also checked some helper functions used in serialization/clone
operations and here are some notes:
- HB_SaveBlock( <bCode> ) does not serialize detached locals so it's not
necessary to detect cyclic references between them and other data.
Anyhow general codeblock serialization may support it and in such
case it's necessary to bind it with common list of references.
- StringToLiteral() does not work correctly, use HB_STRTOEXP() instead
which gives correct results also for binary strings and it's much
faster.
BTW I'm the author of this function not David
- __objGetValueDiff( oObj )
It uses __clsGetIVarNamesAndValues( Self, HB_OO_CLSTP_EXPORTED + ;
HB_OO_CLSTP_PUBLISHED )
but reduces the properties list to the ones different then in
__clsGetIVarNamesAndValues( __ClsInst( Self:ClassH ), ;
HB_OO_CLSTP_EXPORTED + ;
HB_OO_CLSTP_PUBLISHED )
This reduction (just like in HBPersistent():SaveToText()) does not
work correctly for complex items because they are cloned during
object initialization and deep comparison is not implemented so
it never reduce arrays used in INIT clause in class definition.
- __ClsGetPropertiesAndValues( oObj )
It looks for HB_OO_CLSTP_PUBLISHED or PERSITENT messages which
have non zero uiData index.
It means that it gives wrong results for
CLASS VAR
declared as PUBLISHED and
METHOD/ACCESS/ASSIGN ... INLINE
declared as PERSISTENT or PROPERTY
because they use uiData internally as index to diffeent structures,
this is serious bug.
- __clsGetIVarNamesAndValues( oObj, nScope )
It looks for variables with given scope (or all if scope is 0)
checking message function hb___msgGet*Data().
It gives wrong results for
CLASS VAR
this is serious bug,
fortunately ignores shared vars due to 0 in uiData PMETHOD member.

I also found that either Harbour and xHarbour cannot serialize correctly
supercast objects. In fact the results are unpredictable because it
creates two objects of given class but the first one has only one
element instance are and in this element it has real object. Definitely
it has to be fixed in both compilers. I already added it to my TOFIX list.

Enough, lot about serialization code but binary compatibility with
existing data stored somewhere is usually the most important thing
which can block future development and extensions. This is the
reason why I never liked to add extensions to RDD if they are not
precisely defined and can create anomalies (i.e. SIx3 encryption in
memos). RDDs is yet another thing anyhow here the differences are
much smaller.

In general RDD is subject for separate discussion but here situation
is much simpler. xHarbour has few copies of DBFCDX called BMDBFCDX,
DBFMDX, REDBFCDX, REDBFFPT, DBFNET, etc. All such RDDs can be safely
removed because they do not give any new functionality in comparison
to pure DBFCDX in Harbour core code and BM* RDDs in contrib. There
are some differences in DBF headers but as I can see most of them
you have to remove when people begins to report serious compatibility
problems with Clipper and other xbase compatible languages.

>> I believe that you can quite fast catch all such differences and
>> agree what to do with them.
> Yes, tough I suspect there are many more hidden, such as extension
> to Clipper RTL functions, that in Harbour were either not
> implemented, or implemented as new HB_<SomeFunc>().

Yes but most of them are documented in XHB library so it should
be easy to update the code.

Enough. Now I really have to return to my own work.

best regards,
Przemek

RDD LETO Sem Mistério

MensagemEnviado: 23 Abr 2013 16:38
por alaminojunior
Não pergunto nunca mais, desisto !
Ou quem sabe surge alguém melhor preparado e intencionado para responder.

Foi uma pergunta direta e pratica, esperando quem sabe uma resposta direta e pratica, e o que recebo é novamente uma verborréia alienígena que não me leva a conclusão nenhuma.
Se não tem argumentos diretos e práticos para discutir, por favor não fique denegrindo a imagem desta ferramenta.

Novamente repito: Para o que eu (e muitos colegas) se propõem a fazer, o xHarbour funciona muitíssimo bem. Quem quiser utilizar o Harbour, que use, sem problemas.
Mas ficar denegrindo (sem argumentação) a imagem de uma ferramenta que é o ganha pão de alguns profissionais como eu, é no mínimo infantil.

Desculpe o desabafo, mas tem gente aqui querendo ter um filho do russo.

RDD LETO Sem Mistério

MensagemEnviado: 23 Abr 2013 18:05
por Itamar M. Lins Jr.
Melhor o Sr. me respeitar.
Não lhe devo satisfação nenhuma.
Sua ignorância não deixa ver o óbvio que está escrito muitas coisas nos textos, como falei não é para qualquer um...
Vai estudar mais e pare de indicar porcaria aos outros.
Totalmente no sense vem aqui ofender os outros pula no tópico do letodb para falar mal nem sabe usar o letodb, que dirá entender essas coisas que postei, ainda em inglês, desculpe se te aborreci.
Bem sei quais são as armas da arrogância e da prepotência.

Saudações,
Itamar M. Lins Jr.

RDD LETO Sem Mistério

MensagemEnviado: 23 Abr 2013 18:16
por alaminojunior
Itamar M. Lins Jr. escreveu:Bem sei quais são as armas da arrogância e da prepotência.Itamar M. Lins Jr.


É evidente que sabe !

RDD LETO Sem Mistério

MensagemEnviado: 23 Abr 2013 19:47
por Itamar M. Lins Jr.
O tópico é sobre como usar o letodb...
Sua insatisfação não tem nada a ver, em está denegrindo a ferramenta que muitos estão usando.
Quanto ao xHarbour a turma já sabe muito bem minha opinião, mataram a galinha dos ovos de ouro.
O Antonio, e alguns brasileiros... aproveitadores...Quanto pagou para usar o SQLRDD ? está satisfeito ? então beleza! está usando o VXH ? que bom!
Porém todos estão migrando para o Harbour e o próprio pessoal do Harbour 4 apenas estão fazendo algo, e não sabemos quanto tempo mais eles irão tocar o barco, para o pessoal do xHarbour, copiar quase tudo, para depois vender.

Não estou indicando nada que a pessoa não possa testar antes, avaliar, etc, e ainda sou tratado dessa forma.

Saudações,
Itamar M. Lins Jr.

RDD LETO Sem Mistério

MensagemEnviado: 23 Abr 2013 22:56
por rochinha
Amiguinhos,

Em toda e qualquer discussão, às vezes nossos ânimos se elevam com facilidade, pois estamos defendendo nossas ferramentas.

Mas vejamos que estamos defendendo e brigando por algo intangível, ou seja, idéias.

Portanto deixemos de lado toda e qualquer diferença e voltemos ao que realmente interessa.

Eu não uso o LetoDB, apesar de achar o nome muito bonito, mas na prática, não fiz uso. Mas o assunto me interessa pois para colocar algo em produção preciso saber de quem já usa, o que fez, como fez e a avaliação.

Toquemos os tópicos com perguntas relacionadas ao mesmo afim de aprofundar nossos conhecimentos.

Postem as dúvidas sobre o mesmo e se possível exemplos(sou do tempo que livros de programação vinham recheados de exemplos práticos). Precisamos testar para avaliar.

Não vou pedir desculpas a ninguém e nem mesmo chamar a atenção também. Somos profissionais, somos mestres, mas somos também aprendizes.

Queremos ver neste tópico, informações, vantagens e criticas sobre LetoDB.

Valeu!

RDD LETO Sem Mistério

MensagemEnviado: 25 Abr 2013 11:31
por frazato
Bom dia ! Após tentar usar o LetoDB a um tempo atras e não conseguir fazer oque queria, tinha deixado ele de lado, mais a uns dias atras tive que fazer um modulo de cotação online, pegue um codigo do qual eu já tinha em xharbour 99.70 com gtwvw e mudei para harbour e fiz algumas mudança na maneira de tratar os dados mesmo sendo em DBF e boa consegui rodar a unica coisa que está me dando um trabalho mais já desisti foi de fazer a tela fica maximizada mais isso e coisa da Gtwvw que também não pretendo mudar a curto prazo.

caso alguém queira dar uma olha, segue o link para baixar o executável.

Tá mais rápido do que o acesso normal, a unica coisa que não funcionar e trabalhar na mesma pasta do sistema, ou seja, ou acesso o DBF pelo LetoDB ou pelo DBFCDX ao mesmo tempo não funciona.

http://www.4shared.com/file/v2wW_Bwm/cotacao_local.html

Qq duvida me avise.

Frazato

frazato@ibest.com.br

RDD LETO Sem Mistério

MensagemEnviado: 26 Abr 2013 08:59
por Itamar M. Lins Jr.
Ola!
Testou com essa variável ?
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.

Irei testar isso em breve... estava funcionando depois parou, agora eu não sei.

Saudações,
Itamar M. Lins Jr.

RDD LETO Sem Mistério

MensagemEnviado: 26 Abr 2013 11:28
por frazato
Bom dia! fiz um teste rápido e funciona, mais vou testar melhor, só que não tinha esta opção em meu arquivo de configuração do Leto, cara isso ira me resolver vários problemas, pois não preciso ficar sincronizando dados mais, gostei mesmo, obrigado.

Frazato

RDD LETO Sem Mistério

MensagemEnviado: 17 Jun 2013 20:13
por jc101b
Ola Pessoal...
eu tb to mexendo no letodb...
Essa para o Itamar...
em algum lugar eu vi uma implementação que vc, acho, fez no errorsys.prg para letodb, no caso da perda de conexão de rede.
ou se alguem ai tiver esse codigo poderia mandar pra mim ou postar aqui para os demais colegas..

atenciosamente,
JC

Copiar Arquivo do Servidor para o Cliente usando o LetoDB

MensagemEnviado: 04 Jul 2013 19:59
por jc101b
Tem alguma função no letodb que copie um arquivo do servidor para o cliente(computador local)???
ou alguem tem uma ideia de como executar essa copia via letodb??
Atenciosamente,
JC

RDD LETO Sem Mistério

MensagemEnviado: 05 Jul 2013 09:59
por jc101b
Ola Pessoal...
eu precisava essa função pra copiar o executavel do Servidor para o pc do Cliente.
estudando cheguei a essa função.. funciona blz
--------------------------------------------------------------------------
FUNC letoFileCopy(cFile,cNew) // leto_FileRead( cFile, nStart, nLen, @cBuf )
local nH,nLenFile,tm,xx,cBuf
nLenFile:=Leto_FileSize(cFile) ; nH:=fCreate(cNew,FC_NORMAL) ; xx:=0
while xx<nLenFile
cBuf:=Space(2048)
if (tm:=Leto_FileRead(cFile,xx,2048,@cBuf))>0 ; xx+=tm ; fWrite(nH,cBuf) ; end
end
fClose(nH)
return xx==nLenFile
--------------------------------------------------------------------------

RDD LETO Sem Mistério

MensagemEnviado: 20 Out 2013 21:08
por jelias
Amiguinhos,

Não estou conseguindo atualizar o LETODB. Por gentileza, se alguém puder me dar uma força. Segue informações de como estou fazendo:

Na pasta do LETODB estou clicando com o botão direito do mouse e em CVS Obter Módulo..., que está configurada assim:

ABA MÓDULO
CVSROOT :pserver:anonymous@letodb.cvs.sourceforge.net:/cvsroot/letodb checkout -r rel-1-mt letodb
PROTOCOLO: Servidor de Senha
PARÂMETROS DO PROTOCOLO:
SERVIDOR: letodb.cvs.sourceforge.net
PORTA:
PASTA DO REPOSITÓRIO: /cvsroot/letodb checkout -r rel-1-mt letodb
NOME DE USUÁRIO: anonymous
MÓDULO: letodb

ABA REVISÃO
Marquei
(x) Escolher Marcador ou Ramo
Nome do ramo ou marcador: rel-1-mt

Recebo como retorno:
Erro, operação do cvs falhou:

E abre uma tela onde me pede senha:
Já digitei de tudo.

Aproveitando a mensagem, quero compartilhar com os amigos que consegui rodar o LETODB em um cliente com a ajuda do Basso e do Leonardo Machado, depois de apanhar bastante. Por falta de conhecimento, deixei escapar um detalhe importante na configuração do servidor e por isso gostaria de compartilhar aqui os detalhes:

-Minha estrutura de rede é composta por um servidor usando Windows Server 2008 Enterprise. Estações Windows´XP e Windows 7.
- Após a instalação do LETODB no servidor, seguindo os passos já apresentados no tópico, não conseguia estabelecer conexão com o servidor. O fato é que é necessário liberar no Firewall a porta :2812 usada pelo LETODB. Para tanto, irei deixar este link aos interessados nos detalhes destes procedimentos de configuração.
http://www.maxsistem.com.br/ajuda/index/secao/id/66/assunto/suporte-tecnico-como-liberar-porta-no-firewall-do-windows-xp-7-e-server-2008
Sei que muitos já devem saber disso, mais como esbarrei neste detalhe, penso ser prudente compartilhar com os colegas.

Após várias tentativas sem sucesso, enfim obtive sucesso e fui aos testes. Uma grande motivação, foi a busca de reduzir o tempo de um relatório de vendas que é muito usado em análise no dia-a-dia de trabalho. Este relatório lista todos os itens, de forma acumulada por período. Fiz um teste com este cenário em uma mesma estação.

Vendas de Produtos 01/01/2013 à 30/03/2013 -> DBF/CDX: 480-segundos Terminal Service: 4-segundos LETODB: 86-segundos
Vendas de Produtos 01/01/2012 á 31/12/2013 -> DBF/CDX: 1.746-segundos Terminal Service: 11-segundos LETODB: 303-segundos

LETODB foi muito mais rápido que DBF/CDX nativo, entretanto teve grande diferença para o Terminal Service. Como pode haver algum detalhe relacionado ao código, deixo abaixo o mesmo para apreciação dos colegas.

#include "INKEY.CH"
#include "CLUBE.CH"
FUNCTION REL_VENDPR(aPhis)
local Atel:=savescreen(00,00,24,79)
local tyAp:=type("aPhis")
ABREARQ(,{"AL_SAIDA","AL_CLIEN","AL_VENDE","AL_SAISN","AL_CIDAD","AL_PEDSN","AL_ESTOQ","AL_PEDID","AL_ITPED","AL_ITPSN","AL_GRUPO"})
do whil .t.
   rest screen from aw_tel_master
   SETBLINK(.F.)
   WIN3D("Informe o per¡odo",04,02,06,54,2,"9")
   v_dat1=CTOD("  /  /  ")
   v_dat2=CTOD("  /  /  ")
   @ 05,03 say "Per¡odo de     = " get v_dat1 pict"@D" VALID( v_dat1 != CTOD("  /  /  ") )
   @ 05,33 say "At‚  = "           get v_dat2 pict"@D" VALID( v_dat2 != CTOD("  /  /  ") )
   read
   if (LASTKEY()==27)
      SETBLINK(.T.)
      ABREARQ(,.F.)
      RESTSCREEN(00,00,24,79,Atel)
      retu
   end
   a1=time()
   sele AL_SAIDA
   DBSETORDER(2)
   ORDSCOPE(0,DTOS(v_dat1))
   ORDSCOPE(1,DTOS(v_dat2))
   DBGOTOP()

   sele AL_SAISN
   DBSETORDER(6)
   ORDSCOPE(0,DTOS(v_dat1))
   ORDSCOPE(1,DTOS(v_dat2))
   DBGOTOP()

   sele AL_SAIDA
   if EOF()
      MENSAGEM("Aten‡Æo, nÆo foi econtrado dados neste per¡odo !!!",3)
      loop
   end
   WIN3D("",10,02,12,46,2,"9"); @ 11,04 say "Gerando relatorio, Aguarde ..............."
   vDados:={}
   vRuim:={}
   sele AL_SAIDA
   bQua:=bVal:=0
   @ 20,01 say a1
   a2=time()
   @ 20,15 say a2
   do whil !EOF()
      if ((AL_SAIDA->tiposa#"01" .and. AL_SAIDA->tiposa#"02") .or. cancel="*")
    skip
    loop
      end
      bSeek=ncarga+codped
      sele AL_ITPED
      DBSEEK(bSeek)
      do whil (!EOF() .and. ncarga=AL_SAIDA->ncarga .and. codped=AL_SAIDA->codped)
    if condic=" "
       IF ASCAN(vDados, {|a| A[1] = AL_ITPED->codite })#0
          vVar=ASCAN(vDados, {|a| A[1]=AL_ITPED->codite })
          sele AL_ESTOQ
          DBSETORDER(1)
          DBSEEK(AL_ITPED->codite)
          vDados[vVar][3]=(vDados[vVar][3]+AL_ITPED->quanti)
          vDados[vVar][5]=(vDados[vVar][5]+(AL_ITPED->quanti*AL_ESTOQ->pesoun))
          vDados[vVar][6]=(vDados[vVar][6]+AL_ITPED->pretot)
          if AL_ITPED->pretot<=0
        AADD(vRuim, AL_SAIDA->ncarga+AL_SAIDA->codped)
          end
       else
          sele AL_ESTOQ
          DBSETORDER(1)
          DBSEEK(AL_ITPED->codite)
          AADD(vDados, {AL_ITPED->codite,AL_ESTOQ->descri,AL_ITPED->quanti,0,(AL_ITPED->quanti*AL_ESTOQ->pesoun),AL_ITPED->pretot,AL_ESTOQ->codgru})
          if AL_ITPED->pretot<=0
        AADD(vRuim, AL_SAIDA->ncarga+AL_SAIDA->codped)
               end
       end
       bQua=(bQua+AL_ITPED->quanti)
       bVal=(bVal+AL_ITPED->pretot)
    end
    sele AL_ITPED
    skip
      end
      sele AL_SAIDA
      skip
   end
   sele AL_SAISN
   do whil !EOF()
      if ((AL_SAISN->tiposa#"01" .and. AL_SAISN->tiposa#"02") .or. cancel="*")
    skip
    loop
      end
      bSeek=ncarga+codped
      sele AL_ITPSN
      DBSEEK(bSeek)
      do whil (!EOF() .and. ncarga=AL_SAISN->ncarga .and. codped=AL_SAISN->codped)
    if condic=" "
       IF ASCAN(vDados, {|a| A[1] = AL_ITPSN->codite })#0
          vVar=ASCAN(vDados, {|a| A[1]=AL_ITPSN->codite })
          sele AL_ESTOQ
          DBSETORDER(1)
          DBSEEK(AL_ITPSN->codite)
          vDados[vVar][4]=(vDados[vVar][4]+AL_ITPSN->quanti)
          vDados[vVar][5]=(vDados[vVar][5]+(AL_ITPSN->quanti*AL_ESTOQ->pesoun))
          vDados[vVar][6]=(vDados[vVar][6]+AL_ITPSN->pretot)
          if AL_ITPSN->pretot<=0
        AADD(vRuim, AL_SAISN->ncarga+AL_SAISN->codped)
               end
       else
          sele AL_ESTOQ
          DBSETORDER(1)
          DBSEEK(AL_ITPSN->codite)
          AADD(vDados, {AL_ITPSN->codite,AL_ESTOQ->descri,0,AL_ITPSN->quanti,(AL_ITPSN->quanti*AL_ESTOQ->pesoun),AL_ITPSN->pretot,AL_ESTOQ->codgru})
          if AL_ITPSN->pretot<=0
        AADD(vRuim, AL_SAISN->ncarga+AL_SAISN->codped)
               end
       end
       bQua=(bQua+AL_ITPSN->quanti)
       bVal=(bVal+AL_ITPSN->pretot)
         end
    sele AL_ITPSN
    skip
      end
      sele AL_SAISN
      skip
   end
   a3=time()
   @ 20,30 say time()
   inkey(0)
   vb_texto=" Periodo de "+DTOC(v_dat1)+" Ate "+DTOC(v_dat2)
   Opc_Rel(08,50,22,75,1,Date())
   if (trab_nkey==17 .or. trab_nkey==27 .or. trab_nkey==4)
      restscreen(00,00,24,79,Atel)
      loop
   elseif (trab_nkey==1)
      trab_impr:='I'
      set print on
      set devi to print
   elseif (trab_nkey==2 .or. trab_nkey==3)
      trab_impr:='V'; v_arqt=iif(trab_nkey==2,'.\textos\spool.prn',GERAREL())
      set print to &v_arqt
      set devi to print
   end
   v_tot1=0.00
   v_tot2=0.00
   v_tot3=0.00
   v_tot4=0.00
   v_tot5=0.00
   v_tot6=0.00
   v_tot7=0.00
   v_tot8=0.00
   x_tot1=0.00
   x_tot2=0.00
   x_tot3=0.00
   x_tot4=0.00
   x_tot5=0.00
   x_tot6=0.00
   x_tot7=0.00
   l=99
   p=1
   oDados:=ASORT(vDados,,, {|x,y| x[7]+x[2] < y[7]+y[2]} )
   vTotk=0 ; vTotr=0
   for i:=1 to LEN(vDados)
       vTotk=(vTotk+vDados[i][5])
       vTotr=(vTotr+vDados[i][6])
   next
   vCont=1
   cCodGrupo=""
   do whil (LEN(oDados)>=vCont .and. inke()!=27)
      if l>=58
    Cabecalho("RELATORIO DE VENDAS/PRODUTO",130,p,'chr(15)','chr(14)+chr(15)')
         @ 08,01  say "|"+vb_texto
         @ 08,130 say "|"
    @ 09,01  say "+-------------------------------------------+------+---------------------------------------------------------+-------------------+"
    @ 10,01  say "|                                           |      |    A N A L I S E    D O    Q U A D R O    V E N D A S   |   VALORES (R$)    |"
    @ 11,01  say "|                                           |      +----------+----------+------------+---------------+------+-------------+-----+"
    @ 12,01  say "|              NOME DO PRODUTO              |CODIGO|1a. Quin. |2a. Quin. |   TOTAL    |   TOTAL (kg)  | (%)  |    VENDAS   | (%) |"
    @ 13,01  say "+-------------------------------------------+------+----------+----------+------------+---------------+------+-------------+-----+"
    p++
    l=14
      end
      if VAL(oDados[vCont][1])=0
    vCont++
    if LEN(oDados)<vCont .or. l>=58
       @ l,01  say "+-------------------------------------------+------+----------+----------+------------+---------------+------+-------------+-----+"
       @ l+1,1 say "|                VALOR TOTAL ====>          |      |"+TRANS(v_tot1,"999999.999")+"|"+TRANS(v_tot2,"999999.999")+"|"+TRANS(v_tot1+v_tot2,"99999999.999")+"|"+TRANS(v_tot4,"999999999999.999")+"|      |"+TRANS(v_tot5,"@E 99,999,999.99")+"|     |"
       @ l+2,1 say "+-------------------------------------------+------+----------+----------+------------+---------------+------+-------------+-----+"
       @ l+3,1 say "+"+REPL("=",128)+"+"
       @ l+4,1 say "+------------------------------------+"
       @ l+5,1 say "| Valor dos Cortes => "+TRANS(v_tot6,"@E 999,999.99")+"     |"
       @ l+6,1 say "| (%) dos Cortes   => "+TRANS( (v_tot6/bVal)*100,"99.99")+"          |"
       @ l+7,1 say "+------------------------------------+"
    end
    loop
      end
      if cCodGrupo#oDados[vCont][7]
    sele AL_GRUPO
    DBSETORDER(1)
    DBSEEK(oDados[vCont][7])
    @ l,1      say "+-------------------------------------------+------+----------+----------+------------+---------------+------+-------------+-----+"
    if trab_impr="I"
       @ l+1,1   say CHR(27)+"E"+"|       Grupo : "+oDados[vCont][7]+" - "+AL_GRUPO->descri
       @ l+1,132 say "|"+CHR(27)+"F"
    else
       @ l+1,1   say "|       Grupo : "+oDados[vCont][7]+" - "+AL_GRUPO->descri
       @ l+1,130 say "|"
    end
    @ l+2,1   say "+-------------------------------------------+------+----------+----------+------------+---------------+------+-------------+-----+"
    l=l+3
    cCodGrupo=oDados[vCont][7]
      end
      @ l,01 say "|"+LEFT(oDados[vCont][2],43)+"|"+LEFT(oDados[vCont][1],6)+"|"+TRANS(oDados[vCont][3],"999999.999")+"|"+TRANS(oDados[vCont][4],"999999.999")+"|"+TRANS(oDados[vCont][3]+oDados[vCont][4],"99999999.999")+"|"+TRANS(oDados[vCont][5],"99999999999.999")+"| "+;
       TRANS( ((oDados[vCont][3]+oDados[vCont][4])/bQua)*100,"99.99")+"|"+TRANS(oDados[vCont][6],"@E 99,999,999.99")+"|"+TRANS( (oDados[vCont][6]/bVal)*100,"99.99")+"|"
      v_tot1=(v_tot1+oDados[vCont][3])
      v_tot2=(v_tot2+oDados[vCont][4])
      v_tot3=(v_tot3+0.00)
      v_tot4=(v_tot4+oDados[vCont][5])
      v_tot5=(v_tot5+oDados[vCont][6])
      v_tot6=(v_tot6+0.00)
      x_tot1=(x_tot1+oDados[vCont][3])
      x_tot2=(x_tot2+oDados[vCont][4])
      x_tot3=(x_tot3+0.00)
      x_tot4=(x_tot4+oDados[vCont][5])
      x_tot5=(x_tot5+oDados[vCont][6])
      x_tot6=(x_tot6+0.00)
      vCont++
      l++
      if LEN(oDados)<vCont .or. IIF(LEN(oDados)>=vCont,cCodGrupo#oDados[vCont][7],)
    @ l,01  say "+-------------------------------------------+------+----------+----------+------------+---------------+------+-------------+-----+"
    if trab_impr="I"
       @ l+1,1 say CHR(27)+"E"+"|       TOTAL VENDAS DO GRUPO ===>          |      |"+TRANS(x_tot1,"999999.999")+"|"+TRANS(x_tot2,"999999.999")+"|"+TRANS(x_tot1+x_tot2,"99999999.999")+"|"+TRANS(x_tot4,"99999999999.999")+"|"+TRANS(((x_tot4/vTotk)*100),"999.99")+"|"+TRANS(x_tot5,"@E 99,999,999.99")+"|"+TRANS(((x_tot5/vTotr)*100),"99.99")+"|"+CHR(27)+"F"
    else
       @ l+1,1 say "|       TOTAL VENDAS DO GRUPO ===>          |      |"+TRANS(x_tot1,"999999.999")+"|"+TRANS(x_tot2,"999999.999")+"|"+TRANS(x_tot1+x_tot2,"99999999.999")+"|"+TRANS(x_tot4,"99999999999.999")+"|"+TRANS(((x_tot4/vTotk)*100),"999.99")+"|"+TRANS(x_tot5,"@E 99,999,999.99")+"|"+TRANS(((x_tot5/vTotr)*100),"99.99")+"|"
    end
    @ l+2,1 say "+-------------------------------------------+------+----------+----------+------------+---------------+------+-------------+-----+"
    l=l+3
    x_tot1=0.00
    x_tot2=0.00
    x_tot3=0.00
    x_tot4=0.00
    x_tot5=0.00
    x_tot6=0.00
    x_tot7=0.00
      end
      if LEN(oDados)<vCont
    @ l,01  say "+-------------------------------------------+------+----------+----------+------------+---------------+------+-------------+-----+"
    @ l+1,1 say "|                VALOR TOTAL ====>          |      |"+TRANS(v_tot1,"999999.999")+"|"+TRANS(v_tot2,"999999.999")+"|"+TRANS(v_tot1+v_tot2,"99999999.999")+"|"+TRANS(v_tot4,"99999999999.999")+"|      |"+TRANS(v_tot5,"@E 99,999,999.99")+"|     |"
    @ l+2,1 say "+-------------------------------------------+------+----------+----------+------------+---------------+------+-------------+-----+"
    @ l+3,1 say "+"+REPL("=",128)+"+"
    @ l+4,1 say "+------------------------------------+"
    @ l+5,1 say "| Valor dos Cortes => "+TRANS(v_tot6,"@E 999,999.99")+"     |"
    @ l+6,1 say "| (%) dos Cortes   => "+TRANS( (v_tot6/bVal)*100,"99.99")+"          |"
    @ l+7,1 say "+------------------------------------+"
      elseif l>=58
    @ l,01  say "+-------------------------------------------+------+----------+----------+------------+---------------+------+-------------+-----+"
    @ l+1,1 say "+"+REPL("=",128)+"+"
      end
   end
   if (trab_impr=='V'); set print to ; end
   if (trab_impr=='I'); eject; end
   set devi to screen
   if (trab_nkey==3)
      set print to
      Rel_Video(subs(v_arqt,10))
      Dele file &v_arqt
   end
   restscreen(00,00,24,79,Atel)
endd



Sds,

Júlio.

RDD LETO Sem Mistério

MensagemEnviado: 18 Nov 2013 10:32
por clrod
Para o Julio e os demais:

O Letodb é uma boa opção sem dúvida, embora nada se compare a refazer tudo p/ usar o SQL (puro, não SQLRDD, uma das maiores atrocidades que já vi). Já se falou bastante das vantagens disso e não vou entrar em detalhes. Não discuto que o Letodb ajuda bem, funciona legal mas não é a solução definitiva que deveria ser tomada. Porém tem uma solução muito melhor que o LetoDB para quem não pode ir para uma solução melhor. E o Julio achou ela.

Se você acha que precisa do LetoDB, você deveria então usar o Terminal Service ou outra ferramenta (VNC, SSH em Linux, etc) para acessar a aplicação remotamente no servidor e não acessar o dbf remotamente principalmente direto. O LetoDB já ajuda bem na performance e confiabilidade mas não é a melhor solução. Fazer a aplicação rodar efetivamente no servidor e acessar o dbf direto será mais vantajoso que usar o LetoDB porque terá muito mais performance, terá pelo menos a mesma confiabilidade, diminuirá tráfego da rede, facilitará a administração de tudo, evitará concorrência real já que tudo terminará mais rápido e não precisará mudar nada no código, nem uma linha sequer.

Se você fizer isso e tiver qualuer problema com acesso aos arquivos, coisa que já deveria ser rara mesmo fazendo do jeito pior (acessando o dbf diretamente pela rede) você pode procurar por sérios problemas em sue programa. DBF acessado localmente, principalamente no Harbour que está bem mais livre de bugs para dar problema, é difícil a não ser que o programa colabore. DBF e principalmente seus índices tem que ser bem administrado pelo programador. SQL é mais automático, mas DBF exige entendimento do programador do que pode ou não fazer.

Já vi mais de 1000 terminais simultâneos acessando aplicação no servidor (Linux) e acessando o dbf direto pelas instâncias das aplicações rodando nele sem problemas e rapidamente. Escolher essa opção é revolucionário. Achava que muitas pessoas já tinham descoberto isso. Hoje um servidor de menos de 5 mil reais pode rodar centenas de instâncias de uma aplicação console acessando dbf. Um computador pouco ultrapassado roda dezenas.

RDD LETO Sem Mistério

MensagemEnviado: 28 Nov 2013 15:09
por Itamar M. Lins Jr.
Ola!
Muito bom seu post, eu usei LINUX lá da época do Conectiva Linux, estava naquele boom!
Não tem comparação uma aplicação harbour no linux via ssh usei muito tempo. Nunca me deu dor de cabeça, usava Conectiva+RaiserFs+SSH+Harbour.
Porém naquela época tinha problema de suporte com drive disso, drive daquilo que não rodava no linux :( Impressão vixi! era o calcanhar de Aquiles do linux.
Via TS também é outra boa alternativa.
Outra causa que deixei de usar o linux foi o ECF, NFe e outras tantas que na época não tinha no Linux, hoje quem sabe já tem essas coisas com mais facilidade.

Porém o LETODB se encaixa no caso das bases não poderem rodar todas em um único servidor, ou em uma LAN (interna) com 20/30 maquinas.
No windows tem o problema das licenças do TS, que o Letodb resolve.
Empresas com CNPJ diferente, que precisa dos estoques, contas a receber, clientes, no próprio local, para posteriormente serem integrados via algum relatório...
É uma solução rápida, enquanto o programador procura outra melhor.

Isso p/ quem usa console ainda, pois tela gráfica no linux é mais complicado p/ quem usa [x]Hb.

Saudações,
Itamar M. Lins Jr.

RDD LETO Sem Mistério

MensagemEnviado: 20 Dez 2013 14:10
por rossine
Boa tarde,

Segui as dicas dos companheiros para atualizar o leto aqui e está pedido senha no CVS.

Qual seria esta senha ou estou fazendo o procedimento de atualização errado ?

Obrigado,

Rossine.

RDD LETO Sem Mistério

MensagemEnviado: 16 Jan 2014 12:03
por Itamar M. Lins Jr.
Repassando msg do Alexander...
Hello,

thanks for the interest to LetoDb.
The current working repository is the Sourceforge CVS, rel-1-mt branch, it isn't outdated, the last update was today ( the information in the Sourceforge's letodb main page isn't correct - that's result of a bug in Sourceforge software ).
You may use the following console command to download it:

cvs checkout -r rel-1-mt -P letodb

The github repository is my personal, I use it for testing purposes.

Regards, Alexander.

I used

cvs -d:pserver:anonymous@letodb.cvs.sourceforge.net:/cvsroot/letodb checkout -r rel-1-mt letodb

and work fine

Regards

RDD LETO Sem Mistério

MensagemEnviado: 17 Mar 2014 10:25
por runner
Olá a Todos.

Estou fazendo um teste com a LETODB e felizmente conseguir gerar as libs, só que estou com dificuldade de saber qual e a ultima versão estável desta ferramenta para comparar com a que peguei, se puderem me dar um caminho agradeço.

Runner

RDD LETO Sem Mistério

MensagemEnviado: 17 Mar 2014 13:42
por runner
Ola, Pessoal.

Consegui baixar a versão mais recente, só que agora quando executo o LETODB.EXE no arquivo de log aparace a seguinte mensagem :

LetoDB service has had some problems: 1063

Já fiz a instalação do serviço, com letodb.exe install e continua não inicializando o servidor, se alguém tiver alguma dica, por favor....

RDD LETO Sem Mistério

MensagemEnviado: 18 Mar 2014 12:26
por runner
Olá, Pessoal.

Consegui fazer funcionar o LETODB com a MINIGUI EXTENDED, segui os detalhes deste tópico e fui feliz, agradeço a todos que deixaram seus comentários e sugestões. Claro que não foi muito simples mas está no ar.

RDD LETO Sem Mistério

MensagemEnviado: 19 Mar 2014 09:14
por runner
Olá, Pessoal.

Agora estou tentando compilar a LETODB no linux Ubuntu, baixei o HARBOUR 3.0.0 e também a LETODB, segui as instruções do README_PT_BR, mas logo de cara não encontra os includes, mesmo configurando o MAKEFILE.LINUX com o diretório do HARBOUR, que no meu caso está em /usr/bin.

Sé alguém puder ajudar ....

Runner

RDD LETO Sem Mistério

MensagemEnviado: 21 Mar 2014 08:37
por runner
Olá pessoal.

Consegui compilar o LETODB no linux, ajustei o arquivo MAKEFILE.LINUX só que agora esta aparecendo uma mensagem de erro :

unknown type name PHP_MACRO no arquivo LETOFUNC.C

Se alguém já teve este problema e só ajudar

Runner

RDD LETO Sem Mistério

MensagemEnviado: 23 Mar 2014 18:57
por Itamar M. Lins Jr.
Já usou o hbmk2 p/ compilar ?

Saudações,
Itamar M. Lins Jr.

RDD LETO Sem Mistério

MensagemEnviado: 25 Mar 2014 05:38
por runner
Olá, Itamar

Realmente o HBMK2 funciona apesar dele só criar o executável, o meu erro foi baixar a versão 3.0 do harbour binário, quando na verdade o correto e baixar os fontes da versão 3.2 e compilar tudo. Está dica consegui com o próprio Alexander no forum do LETODB, vou criar um tópico separado com todos os detalhes para ficar como referência para futuras pesquisas.

Grato ...

Runner

RDD LETO Sem Mistério

MensagemEnviado: 15 Jun 2014 19:38
por filizola
sygecom vc teria a rddleto.lib compilada com harbour nightly (32) pois nao consigo gerar a mesma seguindo os passos deixados aqui.

Desde já agradeço.

RDD LETO Sem Mistério

MensagemEnviado: 15 Jun 2014 20:24
por Toledo
Filizola, baixe o código fonte e tente compilar usando o hbmk2, segue o link:

http://letodb.cvs.sourceforge.net/viewvc/letodb/letodb/?view=tar&pathrev=rel-1-mt

Descompactar o arquivo do link acima, mantendo a estrutura de pastas existente no arquivo.

Para compilar com o HB32 e Borland BCC, setar a pasta bin:

set path=C:\hb32\bin;C:\Borland\bcc55\bin;%path%
set HB_COMPILER=bcc


Para compilar com o HB32 e MingW:

set path=C:\hb32\bin;C:\hb32\comp\mingw\bin;%path%
set HB_COMPILER=mingw


Depois use o hbmk2 para compilar as LIB:

hbmk2 leto.hbp

hbmk2 rddleto.hbp

hbmk2 letodb.hbp

Abraços,

RDD LETO Sem Mistério

MensagemEnviado: 15 Jun 2014 20:29
por filizola
obrigado toledo vou testar desta forma.

Agradeço muito a ajuda.

RDD LETO Sem Mistério

MensagemEnviado: 15 Jun 2014 20:37
por filizola
Obrigado pela ajuda toledo. com bcc criou as lib´s. agora só pra esclarecer, como usaria com a mingw vendo que ela gera as extensões .a ?

Agradeço sua ajuda.

RDD LETO Sem Mistério

MensagemEnviado: 15 Jun 2014 20:58
por Toledo
Filizola, com o Borland BCC os arquivos de bibliotecas tem a extensão .LIB, já com o MingW, os arquivos tem o prefixo lib antes do nome da LIB e a extensão .a.

Para compilar o seu programa com o Borland BCC ou MingW, basta setar a pasta BIN, conforme exemplo postado na minha mensagem anterior, e usar o hbmk2 para compilar.

Abraços,

RDD LETO Sem Mistério

MensagemEnviado: 15 Jun 2014 21:00
por filizola
Perfeito. Obrigado.

RDD LETO Sem Mistério

MensagemEnviado: 20 Out 2014 13:26
por filizola
Boa tarde, será que posso usar assim ?

cPath :="//192.168.10.27:2812/"

set path to &cPath.

testei e funcionou.

RDD LETO Sem Mistério

MensagemEnviado: 20 Out 2014 21:28
por sygecom
Eu uso assim a anos em um sisteminha de agenda.

RDD LETO Sem Mistério

MensagemEnviado: 03 Dez 2014 20:02
por asimoes
Pessoal

Fiz uma atualização dos fontes do LeoDb gerei o executável letodbconsole

O problema que eu estou tendo com esta atualização é indexando com a clausula FOR

cFiltro:="DtVenc + "+LTrim(Str(nDiaMais))+" <= BoM(Date())-1 .AND. Cobranca .AND. DataPg == CTOD('') .AND. "
cFiltro+="!Deleted()"

INDEX ON Apto+DTOS(DataPg) TAG TEMPBOL TO TEMPBOL FOR &cFiltro.

RDD LETO Sem Mistério

MensagemEnviado: 03 Dez 2014 20:45
por asimoes
Pessoal,

O problema foi resolvido.

O problema estava na função BOM da HbCt

Resolvi incluindo a lib no script de compilação e fazendo um REQUEST BOM nos fontes para versão console e serviço.

RDD LETO Sem Mistério

MensagemEnviado: 01 Abr 2015 17:40
por Lucio
Saudação a todos.

Tenho um sistema em clipper e estive lendo este topico sobre o letodb.
Nao trabalho com Harbour nem mysql ainda, mas me interessei usar letodb para melhorar a velocidade
dos dbfs em rede.
Não tenho nem ideia de como começar. Alguem de voces que ja passaram pelos caminhos poderia me ajudar com um passo-a-passo? ou tem algum topico ja com esta função ?
Posso usar o letodb com o clipper puro, seus DBFs e NTX ?
O que realmente esse letodb faz ? ele trabalha com indices diferentes ou usa outros metodos que melhoram o desempenho da aplicação?

Agradeço desde ja.

Lucio.

RDD LETO Sem Mistério

MensagemEnviado: 02 Abr 2015 17:08
por janio
O que o Leto faz eh simular um ambiente cliente/servidor com nossos dbf's. Ou seja, se vc usar seu sistema em mais de um computador, não precisa sair mapeando em cada maquina uma pasta compartilhada no servidor, basta apenas apontar seu sistema para o ip do servidor. Resultado disso: base de dados fica mais segura la no servidor e a velocidade fica incrível, não importando o tanto de maquinas q existam na rede.

O restante ele nao muda nada. Vc pode continuar usando seus indices do mesmo modo... mesmo rdd... tudo igual. Não muda nada.

Ele não funcionar no clipper. So xHarbour ou Harbour.

Vc primeiro deve migrar de clipper para (x)harbour. Ha dezenas e dezenas de topicos que falam sobre isso. Depois de tudo funcionando no harbour... ae vc vai pro leto!

Janio

RDD LETO Sem Mistério

MensagemEnviado: 02 Abr 2015 23:24
por lugab
Ola amigos, olá Leonardo...

O assunto é esta postagem do Leonardo na primeira página deste tópico :
Caso não tenha o xharbour e bcc configurado, pode baixar Clicando Aqui, que esse instalador faz tudo sozinho para você.


Só agora eu comecei a precisar do LetoDB e como nao tenho o xharbour+Bcc do exemplo postado pelo Leonardo na primeira página, tentei usar o link q ele postou pra baixar e instalar os 2 produtos, porém http://www.4shared.com/file/67805627/21604cb0/hwgui_xharbour100.html já não funciona mais, está quebrado

Alguém pode re-postar, pra que eu siga todos os passos e venha a ter sucesso??

Obrigado

RDD LETO Sem Mistério

MensagemEnviado: 16 Abr 2015 15:15
por Lucio
Quero agradecer ao Janio pela resposta.
Realmente preciso migrar para o Harbour. A questão é sempre o tempo curto apesar de ja ter os tópicos que ajudam. :-´ Se alguém se interessar em fazer uma assessoria (cobrada) para que eu possa ganhar tempo, entre em contato por favor.

Obrigado.

lucio3105@hotmail.com

RDD LETO Sem Mistério

MensagemEnviado: 16 Abr 2015 17:15
por Toledo
Lucio escreveu:Realmente preciso migrar para o Harbour.

Amigo, veja este tópico:
Migrar Clipper para Harbour

Veja também:
LetoDb e Harbour, como usar

Abraços,

RDD LETO Sem Mistério

MensagemEnviado: 02 Fev 2017 16:56
por tchadrack
Estou com um problema, acho que pode ser um BUG no leto:

Fiz algumas alterações no meu sistema, ao ponto que está sendo possível conectar remotamente utilizando o leto.

O sistema até funciona, mas dá este bug ao tentar executar uma determinada função do programa que realiza diversas operações de leitura e escrita no banco de dados sequencialmente, e rapidamente.

As outras partes do sistema em que as operações no banco não são tão rápidas, funciona normalmente

Segue o log do letodb:

02/02/17 17:21:26: Leto DB Server has been started.
Leto DB Server v.2.17b3 ! INIT: DataPath=C:\SCL, ShareTables=0, MaxUsers=500, MaxTables=5000, CacheRecords=50

----------------->>>>> ERROR! thread2() leto_SockRecv LETO_MSGSIZE_LEN <<<<<<<<<-----

Alguém sabe como eu resolvo isto? :%

editado: só um detalhe, também estou começando a usar o leto agora, pode ser algum erro meu.. eu tenho que alterar alguma coisa na maneira como acesso o banco de dados?

RDD LETO Sem Mistério

MensagemEnviado: 03 Fev 2017 10:25
por tchadrack
Obs.: o leto foi compilado em meu computador, eu não baixei ele pré-compilado (poderia ser erro de compilação?)
Nunca usei leto, na verdade não estou acostumado a programar em clipper / harbour.

Fiz um backup dos prg (fontes) antes de iniciar as alterações. Estou fazendo esses testes para saber se vai ficar bom com o letodb e portanto decidir se vou ou não implementar definitivamente o leto.

Complementando a mensagem anterior, hoje estava fazendo mais alguns testes, está dando erro na função
DBSEEK (QUANDO EXECUTADO DE UM COMPUTADOR REMOTO) ( Seek wposicao)

Este erro não acontece ao rodar o sistema no mesmo computador onde o leto está instalado, mesmo usando o RDDLETO.

Apesar disto, algumas telas do sistema onde deveria por exemplo aparecer uma lista com dados, simplesmente não aparece nada quando estou usando localmente (no mesmo computador onde o leto está instalado)

Alguém lança uma luz?

RDD LETO Sem Mistério

MensagemEnviado: 06 Fev 2017 22:12
por tchadrack
Já resolvi o problema.

Além de utilizar o leto, também migrei o sistema para utilizar o cdx.
Até agora nos testes (ainda preciso fazer mais testes) o sistema aparentemente está funcionando bem.
Não sei porque o problema acima aconteceu, mas depois que recompilei o leto e até agora não deu problema mais..

Antes o sistema usava NTX (quando deu o problema).

não conheço o leto nem procurei perder tempo com isso, mas a julgar pela mensagem do erro, ERROR! thread2() leto_SockRecv LETO_MSGSIZE_LEN
poderia ser erro de buffer overflow?

Se for erro de bof, existe a possibilidade de o servidor leto ser potencialmente vulnerável, o que vocês acham?

Quanto ao meu sistema ele lê um determinado arquivo ini e pode ser configurado para usar a rdd leto ou para ser utilizado da maneira tradicional facilmente.

As 'listas vazias' aconteciam porque ao usar o leto (ou cdx) a tabela era carregada no final do arquivo (eof). Então depois de localizar o problema com o debug, adicionei um pequeno trecho de código para resolver o problema.

Ainda preciso fazer testes mais exaustivos nas diversas funções que compõe
o sistema antes de 'colocar em produção' mas parece que está funcionando.

Agradeço aos que ajudaram.