Clipper On Line • Ver Tópico - LetoDb e Harbour, como usar.

LetoDb e Harbour, como usar.

Discussão sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

 

LetoDb e Harbour, como usar.

Mensagempor Jairo Maia » 30 Ago 2016 10:50

Hi elrosa,

These errors mean that are missing these functions. I don't know LetoDb, but I know that you need Harbour version 3.2 or 3.4. You are using the Harbour 3.0.

See this topic too: Letodb no linux ubuntu 12.04.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

LetoDb e Harbour, como usar.

Mensagempor lugab » 08 Mar 2018 03:58

Bom dia, everybody...

Quando o executável está no cliente a aula aqui ministrada pelo prof.Itamar transformou o Letodb em algo bem fácil, pois o próprio programa no PC do cliente seta as variáveis necessárias...
Function Main
LOCAL cPath
request leto
rddsetdefault( "LETO" )
set date format "dd/mm/yy"
cPath:= "//25.77.144.122:2812/"
carq="CLIE01"
use (cpath+carq) new
browse()
close
RETU

A pergunta é: Como usar o Letodb se o executavel estiver no servidor, juntamente com os dados e não no PC do cliente ?

Grato pela atenção...
lugab
lugab
Colaborador

Colaborador
 
Mensagens: 843
Data de registro: 19 Mai 2009 15:58
Curtiu: 126 vezes
Mens.Curtidas: 38 vezes

LetoDb e Harbour, como usar.

Mensagempor Itamar M. Lins Jr. » 08 Mar 2018 06:39

Ola!
É por isso que precisamos aprender outras coisas, antes. O BASICÃO!
TCP/IP o que é isso ? O que é LOCALHOST ? O que é IP FIXO o que é IP DINAMICO ? O que é PORTA TCP ? O que é protocolo UDP e protocolo TCP ?...

A pergunta é: Como usar o Letodb se o executavel estiver no servidor, juntamente com os dados e não no PC do cliente ?

Todo PC "com placa de rede e com protocolo TCP/IP versão 4 ativado" possui um número e um nome. Você pode setar ou com número ou com nome o Letodb.

C:\fontes\SCI_WIN>ping google.com

Disparando google.com [172.217.2.174] com 32 bytes de dados:
Resposta de 172.217.2.174: bytes=32 tempo=619ms TTL=53
Resposta de 172.217.2.174: bytes=32 tempo=600ms TTL=53
Resposta de 172.217.2.174: bytes=32 tempo=612ms TTL=53
Resposta de 172.217.2.174: bytes=32 tempo=572ms TTL=53

Estatísticas do Ping para 172.217.2.174:
    Pacotes: Enviados = 4, Recebidos = 4, Perdidos = 0 (0% de
             perda),
Aproximar um número redondo de vezes em milissegundos:
    Mínimo = 572ms, Máximo = 619ms, Média = 600ms

Como pode ver o nome "google.com" é convertido para 172.217.2.174
Como o letodb tanto faz vc usar "google.com" ou "172.217.2.174"
Então, cPath:= "//25.77.144.122:2812/"
ou cPath := "172.217.2.174:2812" ou cPath := "google.com:2812"


Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

LetoDb e Harbour, como usar.

Mensagempor lugab » 08 Mar 2018 13:37

Itamar, o que te fiz pra merecer uma resposta prepotente e que não tinha como objetivo responder diretamente a minha pergunta ?
Eu admito que não sou da área, que conheço pouquíssimo sobre o quesito conexões, que o pouco que sei e que aprendi aqui no fórum ,
foi "consertar e atualizar para harbour um antigo sistema em clipper" que eu herdei qdo assumi uma loja da família..

Então, eu vou insistir na pergunta, pra ver se eu ganho uma ajuda real, uma resposta direta...
Aqui nesse tópico eu aprendi a acessar os DBFs via LetdoDB quando o "Teste.exe" se encontra no meu PC de cliente. Nesse caso,
o próprio teste.exe apresenta as linhas de conexão.
A minha questão é "quando além dos DBFs, o "Teste.exe" também está instalado no servidor Letodb"

Eu gostaria de executar esse Teste.exe do servidor a partir do meu PC ( eu acho q não é possível, mas...) eu peço a ajuda de quem possa responder de forma direta....
lugab
lugab
Colaborador

Colaborador
 
Mensagens: 843
Data de registro: 19 Mai 2009 15:58
Curtiu: 126 vezes
Mens.Curtidas: 38 vezes

LetoDb e Harbour, como usar.

Mensagempor Itamar M. Lins Jr. » 08 Mar 2018 18:42

Ola!
É qui nois é meio assim "acavalado". Mas veja que eu disse "precisamos" eu também não sei. E estou aprendendo.
Agora é que caiu a ficha aqui... eu acho.

No seu executável vc vai ler um arquivo qualquer com a configuração. Pode passar o IP via arquivo ".ini" ou via parâmetro.
c:\xyz>teste.exe //192.168.1.20:2812/

No .PRG vc faz assim ou como achar melhor.
function main(cPath)
hb_default(@cPath,"localhost")


Ou lendo o arquivo .ini com as funções do harbour, eu uso Hwgui, então faço assim:
cServidor := Hwg_GetIni('Config','Servidor'      ,,cIniFile)

Se cServidor for "empty" então eu faço acesso local mesmo.

  //Fragmento de código para dar uma ideia.
   BEGIN SEQUENCE WITH {| oErr | Break( oErr ) }
      If lRddLeto
          If Leto_File(cServidor+cDB)             
             DbUseArea(.T.,"LETO",cServidor+cDB,Apel,.T.,.F.,'PTISO')
          Else
             hwg_Msgstop('LetoDb Não Localizou o Arquivo: ' + cServidor + cDB)
             lRet := .F.
          EndIf
      Else
          DbUseArea(.T.,'DBFCDX',dDados+cDB,Apel,.T.,.F.,'PTISO')
      EndIf


Desculpa ai os coices...
Porque vc compila no seu executável o IP(cPath), não faça assim porque vc está engessando o seu .exe.
Tive que fazer uma analise, reprocessar, loop etc...para entender a sua pergunta. E ainda estou com dúvida se entendi.
Vc até pode fazer da forma que vc usa, mas precisa usar algum nome ao invés de usar números(192.168.0.10) por exemplo uma rede com 5 maquinas.
"servidor", "cpu1', "cpu2", "cpu3" ...
Se vc compilar o teste.exe para abrir a maquina de nome "servidor", vai dar certo também.
cPath:="//servidor:2812/"


Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

LetoDb e Harbour, como usar.

Mensagempor lugab » 09 Mar 2018 12:03

Ta esclarecido, obrigado
lugab
lugab
Colaborador

Colaborador
 
Mensagens: 843
Data de registro: 19 Mai 2009 15:58
Curtiu: 126 vezes
Mens.Curtidas: 38 vezes

LetoDb e Harbour, como usar.

Mensagempor Itamar M. Lins Jr. » 09 Mar 2018 13:24

Ola!
Só mais umas coisinhas...
Um computador tem no mínimo 2(DOIS) IP's o que identifica ela na rede que pode ser local "LAN" (Local Area Network) ou a Internet "mundial" que é WAN (Wide Area Network) e mais outro localhost.

O Primeiro IP é ela mesma (não passa pela placa de REDE) pode até desligar a placa ou 127.0.0.1(loopbak) ou podemos usar a palavra "localhost". Para testar qualquer serviço que está usando o protocolo TCP/IP usamos a palavra localhost ou o número 127.0.0.1 que são a mesma coisa. Quando usamos algum NOME é para identificar ela na REDE LOCAL(LAN) e quando queremos acessar ela ou disponibilizar algo tipo servidor Apache ou MYSQL ou os DBF'´s via LetoDbf na WAN temos que criar o DOMÍNIO no nível mundial, usamos o NO-IP, DynDNS que irão gerar o NOME aceito na grande rede(internet). Assim, cpu1casa.ddns.net será atribuído a algum IP válido na Internet e este IP é fornecido por algum provedor de internet ao nosso MODEM. Atrás do modem pode ter "n" IP's na faixa 192.167.... na frente do modem só tem 1 IP.
Para compartilhar ou disponibilizar, criar aplicações "for qualquer coisa", algo na internet, precisamos ter essas noções e quem manda na internet são os navegadores, quase a totalidade que acessamos é via algum navegador ou serviços similares ao WTS (Windows Terminal Service).
Quero saber se o LetoDB está rodando na minha maquina ?
IF ( leto_Connect( "localhost",,,30000 ) ) < 0 //Default is 120.000 aka 2 minutes.
//ou
IF ( leto_Connect( "127.0.0.1",,,30000 ) ) < 0 //Default is 120.000 aka 2 minutes.
...


Isso vai funcionar mesmo se o FIREWALL do windows estiver barrando o LetoDB.
Agora se o LetoDB está em outro CPU tanto faz ser LAN ou WAN ai temos que ABRIR no firewall do windows a porta 2812(em questão) e/ou "se for o caso" ABRIR no MODEM a porta TCP/IP 2812 e direcionar ela para o IP LAN da maquina servidora tanto faz ser Letodb, MySql...

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

LetoDb e Harbour, como usar.

Mensagempor vcatafesta » 10 Mai 2018 13:23

Olá pessoal,

Alguém tem idéia de como resolver esse erro no letodb?

Error TERM/2014  Create error: //127.0.0.1:2812/TEXTO.TXT
                       (OS Error 123)


ou deste

 Error TERM/2014  Create error: TESTE.TXT
               (OS Error 3)

         Quit    Retry    Default


att
Harbour, C, C++, Ruby, Python, Go, Delphi, Haskell, Html, PHP, mingw, gtwvg, multithread, dbfcdx, letodb
=================================================
Senhor, sem Ti, nada podemos fazer!
vcatafesta
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 27
Data de registro: 20 Fev 2015 23:22
Cidade/Estado: Pimenta Bueno/RO
Curtiu: 2 vezes
Mens.Curtidas: 1 vez

LetoDb e Harbour, como usar.

Mensagempor Itamar M. Lins Jr. » 10 Mai 2018 18:58

Ola!
Já procurou na internet que erro é esse ?
Se é do LETO ou do OS ? Permissões, nomes errados... de pastas...arquivos...

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

LetoDb e Harbour, como usar.

Mensagempor vcatafesta » 10 Mai 2018 19:37

Olá Itamar,

Esse erro TERM/2014 se dá no ambiente do Letodb.

quanto ao erro 3 - Doserror 3 - Path not found.
SET(24, "TESTE.TXT", .F.)

quanto ao erro 23 - Doserror 123 - 123 Illegal character or invalid file-system name.
SET(24, cPath + "TESTE.TXT", .F.)

O arquivo dbleto.ini está adequadamente configurado, inclusive tudo funciona normal no ambiente leto, criação de tabelas, indice, etc.

Não encontrei qualquer menção na internet a respeito da resolução desse erro:
(SET(24, (xarquivo), .F.) ou SET PRINT TO (xArquivo) no ambiente Leto.

Acredito eu, que seja a mesma situação que ocorre com Fcreate() no ambiente Leto, função essa
que foi substituida, no ambiente Leto pela Leto_Fcreate().

Examinando os fontes do Leto, observei que Leto_Set(), retorna Set(), sem qualquer outro tratamento de criação de arquivo TERM no ambiente Leto.

//server.prg
FUNCTION leto_Set( nSet, xPar1, xPar2 )
   RETURN Set( nSet, xPar1, xPar2 )


no Harbour a função em C, para SET_PRINTFILE

static void open_handle( PHB_SET_STRUCT pSet, const char * file_name,
                         HB_BOOL fAppend, HB_set_enum set_specifier )
{
   HB_STACK_TLS_PRELOAD
   PHB_ITEM pError = NULL;
   PHB_FILE handle, * handle_ptr;
   HB_ERRCODE uiError;
   const char * szDevice = NULL, * def_ext;
   char * szFileName = NULL;
   char ** set_value;
   HB_BOOL fPipe = HB_FALSE, fStripEof;

   HB_TRACE( HB_TR_DEBUG, ( "open_handle(%p, %s, %d, %d)", ( void * ) pSet, file_name, ( int ) fAppend, ( int ) set_specifier ) );

   switch( set_specifier )
   {
      case HB_SET_ALTFILE:
         uiError = 2013;
         set_value = &pSet->HB_SET_ALTFILE;
         handle_ptr = &pSet->hb_set_althan;
         def_ext = ".txt";
         break;
      case HB_SET_PRINTFILE:
         uiError = 2014;
         set_value = &pSet->HB_SET_PRINTFILE;
         handle_ptr = &pSet->hb_set_printhan;
         def_ext = ".prn";
         break;
      case HB_SET_EXTRAFILE:
         uiError = 2015;
         set_value = &pSet->HB_SET_EXTRAFILE;
         handle_ptr = &pSet->hb_set_extrahan;
         def_ext = ".prn";
         break;
      default:
         return;
   }

   if( file_name && file_name[ 0 ] != '\0' )
   {
#if defined( HB_OS_UNIX )
      fPipe = file_name[ 0 ] == '|';
      if( fPipe )
         szFileName = hb_strdup( file_name );
      else
#endif
      {
         szDevice = is_devicename( file_name );
         if( szDevice )
         {
            szFileName = hb_strdup( szDevice );
            def_ext = NULL;
#if defined( HB_OS_WIN ) || defined( HB_OS_DOS )
            fAppend = HB_TRUE;
#endif
         }
         else
            szFileName = hb_strdup( file_name );
      }
   }

   /* free the old value before setting the new one (CA-Cl*pper does it).
    * This code must be executed after setting szFileName, [druzus]
    */
   close_handle( pSet, set_specifier );
   if( *set_value )
   {
      hb_xfree( *set_value );
      *set_value = NULL;
   }

   if( ! szFileName )
      return;

   fStripEof = fAppend && szDevice == NULL && ! fPipe;

   /* Open the file either in append (fAppend) or truncate mode (! fAppend), but
      always use binary mode */

   /* QUESTION: What sharing mode does Clipper use ? [vszakats] */

   do
   {
      if( fPipe )
         handle = hb_filePOpen( szFileName + 1, "w" );
      else
         handle = hb_fileExtOpen( szFileName,
                                  hb_stackSetStruct()->HB_SET_DEFEXTENSIONS ? def_ext : NULL,
                                  ( ! fStripEof || set_specifier == HB_SET_PRINTFILE ? FO_WRITE : FO_READWRITE ) |
                                  FO_DENYWRITE | FXO_SHARELOCK |
                                  ( fAppend ? FXO_APPEND : FXO_TRUNCATE ) |
                                  ( szDevice ? 0 : FXO_DEFAULTS ),
                                  NULL, pError );

      if( handle == NULL )
      {
         pError = hb_errRT_FileError( pError, HB_ERR_SS_TERMINAL, EG_CREATE, uiError, szFileName );
         if( hb_errLaunch( pError ) != E_RETRY )
            break;
      }
   }
   while( handle == NULL );

   if( pError )
      hb_itemRelease( pError );

   if( handle != NULL && fStripEof )
   {
      /* Position to EOF */
      if( hb_fileSeek( handle, 0, FS_END ) > 0 )
      {
         /* Special binary vs. text file handling - even for UN*X, now
            that there's an HB_SET_EOF flag. */

         /* PRINTFILE is always binary and needs no special handling. */
         if( set_specifier != HB_SET_PRINTFILE )
         {
            /* All other files are text files and may have an EOF
               ('\x1A') character at the end (both UN*X and non-UN*X,
               now that theres an HB_SET_EOF flag). */
            char cEOF = '\0';
            hb_fileSeek( handle, -1, FS_END );     /* Position to last char. */
            hb_fileRead( handle, &cEOF, 1, -1 );   /* Read the last char. */
            if( cEOF == '\x1A' )                   /* If it's an EOF, */
               hb_fileSeek( handle, -1, FS_END );  /* Then write over it. */
         }
      }
   }

   /* user RT error handler can open it too so we have to
    * close it again if necessary
    */
   if( handle == NULL )
   {
      hb_xfree( szFileName );
      szFileName = NULL;
   }

   close_handle( pSet, set_specifier );
   *handle_ptr = handle;
   if( *set_value )
      hb_xfree( *set_value );
   *set_value = szFileName;
}

int hb_setUpdateEpoch( int iYear )
{
   if( iYear >= 0 && iYear < 100 )
   {
      int iEpoch = hb_setGetEpoch();
      int iCentury = iEpoch / 100;

      if( iYear < iEpoch % 100 )
         ++iCentury;
      iYear += iCentury * 100;
   }
   return iYear;
}


Resultando que Set(24,..), não tem tratamento adequado no ambiente Leto.
Harbour, C, C++, Ruby, Python, Go, Delphi, Haskell, Html, PHP, mingw, gtwvg, multithread, dbfcdx, letodb
=================================================
Senhor, sem Ti, nada podemos fazer!
vcatafesta
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 27
Data de registro: 20 Fev 2015 23:22
Cidade/Estado: Pimenta Bueno/RO
Curtiu: 2 vezes
Mens.Curtidas: 1 vez

LetoDb e Harbour, como usar.

Mensagempor vcatafesta » 14 Mai 2018 13:17

Ninguém?!?!?!
Harbour, C, C++, Ruby, Python, Go, Delphi, Haskell, Html, PHP, mingw, gtwvg, multithread, dbfcdx, letodb
=================================================
Senhor, sem Ti, nada podemos fazer!
vcatafesta
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 27
Data de registro: 20 Fev 2015 23:22
Cidade/Estado: Pimenta Bueno/RO
Curtiu: 2 vezes
Mens.Curtidas: 1 vez

LetoDb e Harbour, como usar.

Mensagempor Itamar M. Lins Jr. » 15 Mai 2018 08:24

Ola!
OOOOxi... que isso rapaz.... que está querendo ?
Resultando que Set(24,..), não tem tratamento adequado no ambiente Leto.

Quem disse que é da forma que vc está "entendendo" ?
Esses erros ai não tem nada a ver com o Letodbf.
No caso do SET ele o letodbf passa a bola para o harbour... não tem necessidade de reinventar a roda...
O SET(...) é do Harbour não do letodbf.
Mostre os seus códigos, como está fazendo...? e não como está entendendo.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

LetoDb e Harbour, como usar.

Mensagempor vcatafesta » 15 Mai 2018 12:01

Justamente Itamar!

O codigo é simplesmente uma chamada para imprimir para arquivo.

Set(24, (xArquivo), .F.) ou Set Print to (xarquivo)


O Leto está passando a "bola" de todas as chamadas a SET() para o Harbour,
inclusive a Set(24, (xArquivo). .F.) ou Set Print To (xArquivo).

Ocorre que essa chamada é para TERM, e em ambiente leto gera erro, e como mencionei
anteriormente.

Penso eu, que para imprimir para arquivo em ambiente Leto, faltaria um tratamento
para o Set(24,...), da mesma forma que foi com o FCreate, agora em ambiente Leto Leto_Fcreate,
entendeu?

att
Harbour, C, C++, Ruby, Python, Go, Delphi, Haskell, Html, PHP, mingw, gtwvg, multithread, dbfcdx, letodb
=================================================
Senhor, sem Ti, nada podemos fazer!
vcatafesta
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 27
Data de registro: 20 Fev 2015 23:22
Cidade/Estado: Pimenta Bueno/RO
Curtiu: 2 vezes
Mens.Curtidas: 1 vez

LetoDb e Harbour, como usar.

Mensagempor asimoes » 15 Mai 2018 13:24

Olá, já verificou as permissões na pasta ?

Outra coisa mostra o seu letodb.ini pra gente dar uma comparada.

Deixa eu entender isso, você tá querendo gerar um arquivo no servidor letodb ? é isso ?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

LetoDb e Harbour, como usar.

Mensagempor Itamar M. Lins Jr. » 15 Mai 2018 13:38

Ola!
Não precisa do Letodbf para pegar o erro.
Set(24, (xArquivo), .F.) ou Set Print to (xarquivo)

Esse erro vai ocorrer sem uso do letodbf. Simule ele ai sem usar o Letodbf que vai ocorrer.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Anterior Próximo



Retornar para Banco de Dados

Quem está online

Usuários vendo este fórum: Google Adsense [Bot] e 9 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro