LetoDb e Harbour, como usar.

Fórum sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

LetoDb e Harbour, como usar.

Mensagem por Toledo »

Minduim escreveu:Toledo;

no post anterior, entendo que você implementou a função 'volserial' no 'leto' de sua aplicação;
observe na 'imagem 001' e 'imagem 002' que o retorno da função é sempre em relação ao driver 'C';
você também observa isto ou estou fazendo algo errado?
Amigo, nas funções que você criar no arquivo letoudf.prg, obrigatoriamente o primeiro parâmetro em cada função (mesmo que a função não tenha nenhum parâmetro) tem que ser nUserStru, então a sua função ficaria assim:

Código: Selecionar todos

function UDF_VOLSERIAL( nUserStru, cLabel )
Agora, quando for chamar a função com Leto_Udf(), não precisar passar este parâmetro nUserStru, por exemplo:

Código: Selecionar todos

PathServ   :=  "//localhost:2812/"
nSerial := Leto_Udf(PathServ+"UDF_VOLSERIAL","C:\")
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Minduim
Usuário Nível 2
Usuário Nível 2
Mensagens: 59
Registrado em: 06 Abr 2011 13:02
Localização: Santo andré - SP

LetoDb e Harbour, como usar.

Mensagem por Minduim »

Toledo;

agradeço sua pronta atenção;
segue abaixo a 'imagem 002' corrida
Anexos
imagem 002
imagem 002
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

LetoDb e Harbour, como usar.

Mensagem por Itamar M. Lins Jr. »

Ola!
A função Leto_directory() só funciona no PATH do LetoDb. Só "enxerga" através do LetoDb.

Se no LetoDb está assim:
cPath := "//localhost:2812/MeuDB/"

Não adianta pedir p/ ele enxergar fora Leto_Directory("//localhost:2812/User/Documents/"...)


Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Minduim
Usuário Nível 2
Usuário Nível 2
Mensagens: 59
Registrado em: 06 Abr 2011 13:02
Localização: Santo andré - SP

LetoDb e Harbour, como usar.

Mensagem por Minduim »

bom dia colegas;

a implementação do letodb em meu sistema esta quase pronta;
agora estou tentando juntar os programas 'LETOTRAY.PRG' E 'MANAGE.PRG' que estão na pasta '\LETODB\UTILS' e estou encontrando alguma dificuldade;

1 - ao clicar em 'STAR SERVER', no arquivo de log aparece a mensagem:

Código: Selecionar todos

LetoDB service has had some problems:       1063
2 - ao clicar em 'USERSINFO', apresenta a mensagem de erro:

Código: Selecionar todos

Error BASE/1004  No exported method: HIDE
Called from ->HIDE(0)
Called from letotray_manage.prg->USERSINFO(80)
Called from letotray_manage.prg->(b)MAIN(30)
Called from source\winapi\hwindow.prg->ONCOMMAND(528)
Called from source\winapi\hwindow.prg->(b)HMAINWINDOW(231)
Called from source\winapi\hwindow.prg->HMAINWINDOW:ONEVENT(317)
Called from ->HWG_ACTIVATEMAINWINDOW(0)
Called from source\winapi\hwindow.prg->HMAINWINDOW:ACTIVATE(306)
Called from letotray_manage.prg->MAIN(37)

HWGUI 2.18 Build 1
Date:07/03/14
Time:10:19:39
arquivo letotray+manage

Código: Selecionar todos

#include "hwgcompat.ch"
#include "hbclass.ch"  // manage.prg
#include "hwgui.ch"  // manage.prg
#include "hxml.ch"  // manage.prg
#include "rddleto.ch"  // manage.prg

Static cPath
Static cIp := '127.0.0.1'
Static nPort := 2812


Function Main
Local oMainWindow, oTrayMenu, oIcon := HIcon():AddResource("ICON_1")
Private oApp  // manage.prg

   oApp := HApp():New() // manage.prg

   cPath := DiskName() + ":\" + CurDir() + "\"

   IF ! File( cPath + "letodb.exe" )
      MsgInfo("letodb.exe not found")
      Return nil
   ENDIF

   INIT WINDOW oMainWindow MAIN TITLE "LetoDB server"

   CONTEXT MENU oTrayMenu
      MENUITEM "Start letodb" ACTION StartServer()
      MENUITEM "Stop letodb"  ACTION StopServer()
      MENUITEM "UsersInfo"    ACTION UsersInfo( cIp )  // manage.prg
      SEPARATOR
      MENUITEM "Exit"         ACTION EndWindow()
   ENDMENU

   oMainWindow:InitTray( oIcon,, oTrayMenu, "LetoDB server" )

   ACTIVATE WINDOW oMainWindow NOSHOW
   oTrayMenu:End()
   Return Nil


Function StartServer
  ShellExecute( cPath + "letodb.exe",,, cPath )
  Return nil


Function StopServer
  ShellExecute( cPath + "letodb.exe",, "stop", cPath )
  Return nil


Static func Connect
   Return Leto_Connect("//" + cIp + ":" + LTrim(Str(nPort)) + "/") != -1


Static Function UsersInfo( cAddress )  // manage.prg
   oApp:nItemCurr := 0
   IF cAddress != Nil
      IF ( arr := GetIpFromPath( "//" + cAddress + "/" ) ) != Nil
         cIp := arr[1]
         nPort := arr[2]
         oApp:nItemCurr := Ascan( oApp:aServers, cIp )
      ENDIF     
   ENDIF

   INIT WINDOW oApp:oMainWnd MAIN TITLE "Server management utility" ;
     AT 200,0 SIZE 600,400 FONT HFont():Add( "Georgia",0,-15,,204 )

   InfoUsers()
	 
   oApp:oBtnKill:Hide()
   IF oApp:nItemCurr > 0
      oApp:oCombo:SetItem( oApp:nItemCurr )
   ENDIF
   ACTIVATE WINDOW oApp:oMainWnd
   Return Nil


Static Function InfoUsers() // manage.prg
   Local aInfo, i, nUsers
   IF oApp:lSend
      oApp:nRequest = 2
      Return .T.
   ENDIF

   oApp:lSend := .T.
   IF ( aInfo := leto_MgGetUsers() ) == Nil
      oApp:lSend := .F.
      Return .F.
   ENDIF
   oApp:lSend := .F.

   oApp:oBtnLock:Hide()
   oApp:oBtnKill:Show()
   nUsers := Len( aInfo )
   oApp:oBrw1:aArray := Array( nUsers, 5 )
   FOR i := 1 TO nUsers
      oApp:oBrw1:aArray[i,4] := aInfo[i,1]
      oApp:oBrw1:aArray[i,1] := aInfo[i,2]
      oApp:oBrw1:aArray[i,2] := aInfo[i,3]
      oApp:oBrw1:aArray[i,3] := aInfo[i,4]
      oApp:oBrw1:aArray[i,5] := Padl(Ltrim(Str(Int((Val(aInfo[i,5])%86400)/3600))),2,'0') ;
         +":"+ Padl(Ltrim(Str(Int((Val(aInfo[i,5])%3600)/60))),2,'0') +":"+ ;
         Padl(Ltrim(Str(Int(Val(aInfo[i,5])%60))),2,'0')
   NEXT

   IF oApp:nInfoType != 2
      oApp:nInfoType := 2
      oApp:oBrw1:aColumns := {}
      oApp:oBrw1:AddColumn( HColumn():New( "Ip",{|v,o|o:aArray[o:nCurrent,1]},"C",16,0 ) )
      oApp:oBrw1:AddColumn( HColumn():New( "Host",{|v,o|o:aArray[o:nCurrent,2]},"C",18,0 ) )
      oApp:oBrw1:AddColumn( HColumn():New( "Module",{|v,o|o:aArray[o:nCurrent,3]},"C",18,0 ) )
      oApp:oBrw1:AddColumn( HColumn():New( "Timeout",{|v,o|o:aArray[o:nCurrent,5]},"C",15,0 ) )
      oApp:oBrw1:bPosChanged := Nil
      oApp:oBrw1:bPosChanged := {||Tables4User()}
      oApp:oBrw1:lChanged := .T.
      oApp:oBrw1:nCurrent := oApp:oBrw1:rowPos := 1
   ENDIF
   oApp:oBrw1:Refresh()
   Tables4User()
   Return .T.


Static Function Tables4User() // manage.prg
   Local aInfo, i, nTables
   IF !Empty( oApp:oBrw1:aArray ) .AND. ;
         Len( oApp:oBrw1:aArray ) >= oApp:oBrw1:nCurrent .AND. ;
         Valtype( oApp:oBrw1:aArray[oApp:oBrw1:nCurrent] ) == "A" .AND. ;
         Len( oApp:oBrw1:aArray[oApp:oBrw1:nCurrent] ) >= 4
      oApp:lSend := .T.
      IF ( aInfo := leto_MgGetTables( oApp:oBrw1:aArray[oApp:oBrw1:nCurrent,4] ) ) == Nil
         oApp:lSend := .F.
         oApp:oBrw2:aArray := {}
      ELSE
         oApp:lSend := .F.

         nTables := Len( aInfo )
         oApp:oBrw2:aArray := Array( nTables,2 )
         FOR i := 1 TO nTables
            oApp:oBrw2:aArray[i,2] := aInfo[i,1]
            oApp:oBrw2:aArray[i,1] := aInfo[i,2]
         NEXT
      ENDIF
   ELSE
      oApp:oBrw2:aArray := {}
   ENDIF

   IF oApp:oBrw2:aColumns == Nil .OR. Len(oApp:oBrw2:aColumns) == 3
      oApp:oBrw2:aColumns := {}
      oApp:oBrw2:AddColumn( HColumn():New( "Name",{|v,o|o:aArray[o:nCurrent,1]},"C",24,0 ) )
      oApp:oBrw2:lChanged := .T.
   ENDIF
   oApp:oBrw2:Refresh()
   Return Nil


Static Function GetIpFromPath( cPath ) // manage.prg
   Local nPos1, nPos2, nPos3, cSub
   IF Left( cPath,2 ) != "//" .OR. ( nPos1 := At( ":",cPath ) ) == 0
      Return Nil
   ENDIF
   cSub := Substr( cPath, nPos1 + 1 )
   nPos2 := At( "/",cSub )
   nPos3 := At( "\",cSub )
   IF nPos2 == 0 .AND. nPos3 == 0
      Return Nil
   ENDIF
   IF nPos2 == 0 .OR. ( nPos3 != 0 .AND. nPos3 < nPos2 )
      nPos2 := nPos3
   ENDIF
   nPos3 := Max( RAt( "/",cSub ), RAt( "\",cSub ) )
   Return { Substr(cPath,3,nPos1-3), Val(Left(cSub,nPos2-1)), Iif(nPos3==0,"",Substr(cSub,nPos2,nPos3-nPos2+1)) }


Static Function ReadOptions( oApp )  // manage.prg
   Local oOptions := HXMLDoc():Read( "manage.xml" )
   Local oNode, i1, cIp, cPort, cUser, cPass
   IF !Empty( oOptions ) .AND. !Empty( oOptions:aItems ) .AND. oOptions:aItems[1]:title == "init"
      FOR i1 := 1 TO Len( oOptions:aItems[1]:aItems )
         oNode := oOptions:aItems[1]:aItems[i1]
         IF oNode:title == "server"
            cIp := oNode:GetAttribute("ip")
            cPort := oNode:GetAttribute("port")
            cUser := oNode:GetAttribute("user")
            Aadd( oApp:aServers, cIp )
            Aadd( oApp:aParams, { Iif(cPort==Nil,"2812",cPort), cUser } )
         ENDIF
      NEXT
   ENDIF
   IF Empty( oApp:aServers )
      Aadd( oApp:aServers, "127.0.0.1" )
      Aadd( oApp:aParams, { "2812", Nil } )
   ENDIF
   Return Nil


CLASS HApp  // manage.prg
   DATA oMainWnd
   DATA oTool
   DATA oCombo
   DATA oGetPort
   DATA oGetRefr
   DATA oSayServer
   DATA oBtnGo
   DATA oBtnKill
   DATA oBtnLock
   DATA oBrw1
   DATA oBrw2
   DATA oSplit

   DATA aServers
   DATA aParams
   DATA nItemCurr  INIT 0
   DATA lUpdList   INIT .F.

   DATA oTimer
   DATA lSend      INIT .F.

   DATA nInfoType  INIT 0
   DATA nRequest   INIT 0

   DATA lLocked    INIT .F.

   METHOD New
ENDCLASS

METHOD New CLASS HApp  // manage.prg
   ::aServers := {}
   ::aParams  := {}
   ReadOptions( Self )
   Return Self
alguma luz?
Avatar do usuário
filizola
Usuário Nível 3
Usuário Nível 3
Mensagens: 421
Registrado em: 19 Ago 2003 20:10
Localização: Belo Horizonte/MG

LetoDb e Harbour, como usar.

Mensagem por filizola »

Bom dia galera, consegui fazer rodar o leto, muito bom mesmo. porém em um cliente, quando tento instalar. "letodb install" o letodb.log vem com a ms "Error installing letodb service: 1073".
"Um passo a frente, e já não estará mais no mesmo lugar..."
Avatar do usuário
filizola
Usuário Nível 3
Usuário Nível 3
Mensagens: 421
Registrado em: 19 Ago 2003 20:10
Localização: Belo Horizonte/MG

LetoDb e Harbour, como usar.

Mensagem por filizola »

resolvido. bastou eu desinstalar o letodb e pronto.

letodb uninstall
"Um passo a frente, e já não estará mais no mesmo lugar..."
Minduim
Usuário Nível 2
Usuário Nível 2
Mensagens: 59
Registrado em: 06 Abr 2011 13:02
Localização: Santo andré - SP

LetoDb e Harbour, como usar.

Mensagem por Minduim »

Itamar bom dia;

esta faltando somente mais algumas pendências;

quanto ao erro abaixo, apresentado anteriormente, entendo que nenhum colega sabe resolver ou não passou por esta dificuldade;

Código: Selecionar todos

LetoDB service has had some problems:       1063
agora, como configurar o comando 'SET PRINT TO';

se escrevo o comando: 'SET PRINT TO //127.0.0.1:2812/TEXTO.PRN', apresenta o erro:
'Error TERM/2014 Erro de Criação //127.0.0.1:2812/TEXTO.PRN (Dos Error 53)' // servidor não encontrado

se crio a função no arquivo letoudf.prg:

Código: Selecionar todos

********************************
function UDF_SETPRINTER( nUserStru, cArq )

   if !Empty( cArq )
      Set Printer to ( cArq )
   else
      Set Printer to
   endif
   return Nil
e chamo pela função: 'Leto_Udf( "127.0.0.1.:2812/" + "UDF_SetPrinter", "TEXTO.PRN" )',
não apresenta mensagem de erro e o arquivo é criado;
mas ao gerar o relatório, o arquivo 'TEXTO.PRN' permanece vazio;

estou fazendo algo errado ou este comando não é compatível com o letodb?

observação: com mapeamento de rede, a rotina de impressão funciona perfeitamente;
Minduim
Usuário Nível 2
Usuário Nível 2
Mensagens: 59
Registrado em: 06 Abr 2011 13:02
Localização: Santo andré - SP

LetoDb e Harbour, como usar.

Mensagem por Minduim »

em tempo;
terminei a fusão dos programas letotray e manage e fiz o primeiro teste de conexão fora da minha rede;
pedi para um colega, distante uns 100 km se conectar e funcionou perfeitamente;
verifiquei uns pequenos gargalos de processamento que terei que corrigir no meu aplicativo e ainda tentar (...) resolver as pendências do post anterior;
estou muito contente...
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

LetoDb e Harbour, como usar.

Mensagem por Toledo »

Amigos, estou tentando fazer um teste com o LetoDB com acesso remoto. Para isto, fiz um cadastro no noip e instalei o DUC do noip no meu computador. Executei ele, informei minha conta e senha, depois selecionei o host e tudo parece estar certo. Mas se tento dar um ping no endereço, nenhuma das tentativas da certo, são todas perdidas.

No meu modem (NET), tem um roteador (D-LINK Dir 600), então tentei configurar um Virtual Server para redirecionar a porta 2812 para o IP do computador onde está o letoDB, mas isto também não adiantou.

Pensei que poderia estar faltando instalar alguma coisa no computador onde está o DUC do noip, IIS por exemplo, mas no Painel de Controle não tem o IIS para fazer a instalação. O Windows é o 8 Pro.

A minha intenção é só fazer o acesso ao LetoDB, então o que mais tenho que fazer?

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
filizola
Usuário Nível 3
Usuário Nível 3
Mensagens: 421
Registrado em: 19 Ago 2003 20:10
Localização: Belo Horizonte/MG

LetoDb e Harbour, como usar.

Mensagem por filizola »

insira o ip da maquina na "DMZ" e libera a porta 2812 no firewall e redirecione a porta 2812 para o ip.
"Um passo a frente, e já não estará mais no mesmo lugar..."
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

LetoDb e Harbour, como usar.

Mensagem por Toledo »

Feito, mas continua na mesma... não consigo conexão com o LetoDB usando o endereço ou IP no meu noip.

O estranho, é que se eu abrir meu navegador (Firefox, Chrome, Opera,etc) e digitar o endereço do meu noip, abre o programa do roteador (D-LINK Dir 600).

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
filizola
Usuário Nível 3
Usuário Nível 3
Mensagens: 421
Registrado em: 19 Ago 2003 20:10
Localização: Belo Horizonte/MG

LetoDb e Harbour, como usar.

Mensagem por filizola »

tente primeiro fazer uma conexao pelo mstsc so pra testar.
"Um passo a frente, e já não estará mais no mesmo lugar..."
Minduim
Usuário Nível 2
Usuário Nível 2
Mensagens: 59
Registrado em: 06 Abr 2011 13:02
Localização: Santo andré - SP

LetoDb e Harbour, como usar.

Mensagem por Minduim »

toledo, em meus testes, somente efetuei o registro da imagem em anexo no roteador e liberei a porta 2812 no firewall do windows;
entendo que o programa do seu roteador, se não é o mesmo, é muito parecido;
entendo também que o no-ip + duc associam o endereço de ip externo da maquina servidor a um endereço na internet;
exemplo: xxx.xx.xx.xxx => servidor.ddns.net;
assim o endereço na internet permanecera fixo, mas o ip externo do servidor sofrera alteração, e como a conexão com o letodb é feito pelo endereço de ip e não por um endereço na internet, ainda não entendi com utilizar este recurso para uma conexão estavel com o letodb;

espero ter ajudado o amigo;
Anexos
2014-07-25_073923.jpg
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

LetoDb e Harbour, como usar.

Mensagem por Itamar M. Lins Jr. »

Ola!
Eu tenho feito isso, em muitas maquinas por aqui.
E é dessa forma que você está fazendo, não esqueça de liberar no FIREWALL o LetoDb, não use DMZ é perigoso.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
filizola
Usuário Nível 3
Usuário Nível 3
Mensagens: 421
Registrado em: 19 Ago 2003 20:10
Localização: Belo Horizonte/MG

LetoDb e Harbour, como usar.

Mensagem por filizola »

Itamar, o problema é que eu não tinha utilizado o DMZ num roteador d-link e nao conseguia entrar na maquina. só depois de ter liberado o ip no dmz que funcionou. fiz bastante busca a respeito, e só assim consegui. o risco seria de ataques ?
"Um passo a frente, e já não estará mais no mesmo lugar..."
Responder