LetoDb e Harbour, como usar.

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

Moderador: Moderadores

Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

LetoDb e Harbour, como usar.

Mensagem por Jairo Maia »

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)
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

LetoDb e Harbour, como usar.

Mensagem por lugab »

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...

Código: Selecionar todos

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
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!
É 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ódigo: Selecionar todos

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"

Código: Selecionar todos

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.
Saudações,
Itamar M. Lins Jr.
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

LetoDb e Harbour, como usar.

Mensagem por lugab »

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
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!
É 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ódigo: Selecionar todos

c:\xyz>teste.exe //192.168.1.20:2812/
No .PRG vc faz assim ou como achar melhor.

Código: Selecionar todos

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:

Código: Selecionar todos

cServidor := Hwg_GetIni('Config','Servidor'      ,,cIniFile)
Se cServidor for "empty" então eu faço acesso local mesmo.

Código: Selecionar todos

  //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.

Código: Selecionar todos

cPath:="//servidor:2812/"
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

LetoDb e Harbour, como usar.

Mensagem por lugab »

Ta esclarecido, obrigado
lugab
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!
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 ?

Código: Selecionar todos

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.
Saudações,
Itamar M. Lins Jr.
vcatafesta
Usuário Nível 1
Usuário Nível 1
Mensagens: 27
Registrado em: 21 Fev 2015 00:22
Localização: Pimenta Bueno/RO
Contato:

LetoDb e Harbour, como usar.

Mensagem por vcatafesta »

Olá pessoal,

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

Código: Selecionar todos

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

Código: Selecionar todos

 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!
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!
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.
Saudações,
Itamar M. Lins Jr.
vcatafesta
Usuário Nível 1
Usuário Nível 1
Mensagens: 27
Registrado em: 21 Fev 2015 00:22
Localização: Pimenta Bueno/RO
Contato:

LetoDb e Harbour, como usar.

Mensagem por vcatafesta »

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.

Código: Selecionar todos

//server.prg
FUNCTION leto_Set( nSet, xPar1, xPar2 )
   RETURN Set( nSet, xPar1, xPar2 )
no Harbour a função em C, para SET_PRINTFILE

Código: Selecionar todos

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
Registrado em: 21 Fev 2015 00:22
Localização: Pimenta Bueno/RO
Contato:

LetoDb e Harbour, como usar.

Mensagem por vcatafesta »

Ninguém?!?!?!
Harbour, C, C++, Ruby, Python, Go, Delphi, Haskell, Html, PHP, mingw, gtwvg, multithread, dbfcdx, letodb
=================================================
Senhor, sem Ti, nada podemos fazer!
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!
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.
Saudações,
Itamar M. Lins Jr.
vcatafesta
Usuário Nível 1
Usuário Nível 1
Mensagens: 27
Registrado em: 21 Fev 2015 00:22
Localização: Pimenta Bueno/RO
Contato:

LetoDb e Harbour, como usar.

Mensagem por vcatafesta »

Justamente Itamar!

O codigo é simplesmente uma chamada para imprimir para arquivo.

Código: Selecionar todos

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!
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

LetoDb e Harbour, como usar.

Mensagem por asimoes »

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 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!
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.
Saudações,
Itamar M. Lins Jr.
Responder