LETODB nao abre um determinado DBF

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

Moderador: Moderadores

Geraldo_SQS
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 28 Jun 2017 18:00
Localização: Tubarao - SC

LETODB nao abre um determinado DBF

Mensagem por Geraldo_SQS »

Olá Pessoal,
Ajustei um programa de clipper para Harbour 3.2+minigui.
Funcionou beleza... Ajustei impressão para printers do windows legal....
Agora estou tentando colocar o LetoDB em ação... fiz uns ajustes nas rotinas de abertura de DBF, instalei o LetoDB como serviço do windows ... funcionou certinho... os exemplos de testes que vem com ele também funciona beleza... Mas....

Aí vem a dificuldade kkk... O meu programa abre quase 70 tabelas... e com o LetoDB vai abrindo beleza diversas tabelas... uma delas com 24Mb... mas quando chega em uma tabela especifica não abre de jeito nenhum e aparece mensagem de erro APPCRASH do windows...
Erro apresentado quando o prg tenta abrir a tabela DT_EST.DBF
Erro apresentado quando o prg tenta abrir a tabela DT_EST.DBF
Firewall desativado
Antivirus desativado
Abre normalmente 22 tabelas, e só aparece o erro quando chega em uma tabela especifica com nome DT_EST.DBF

O mais escabroso vem agora... fiz um teste e abri essa tabela através do test_dbf.prg que vem na pasta de testes do letodb, e ali abre a tabela normalmente...
Comparei tudo nos 2 prgs para identificar alguma diferença... nada encontrado...
Comparei os scripts de linkedição... nada de diferente encontrado...
linkei os 2 prgs com os mesmos scripts... no test_dbf(exemplo letodb) funciona, mas no meu prg não abre de jeito nenhum...

Alguém tem alguma luz lá do fim do túnel ?? kkk

Segue os 2 códigos para as opiniões dos amigos :

Código: Selecionar todos



// Esse é o codigo do meu sistema que nao abre a determinada tabela.
// Nesse exemplo está abrindo apenas a tabela problematica...

REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850
REQUEST HB_GT_WVT_DEFAULT

REQUEST LETO
REQUEST DBFCDX


#include "\p\clip53\include\inkey.ch"
#include "\p\clip53\include\llibg.ch"
#include "\p\clip53\include\Fileio.ch"
#include "\p\clip53\include\SET.ch"
#include "hmg.ch"
#include <minigui.ch>
#include "hbgtinfo.ch"
#include "dbinfo.ch"

function Main()

parameters ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7, ARG8, ARG9, ARG10, ARG11, ARG12, ARG13, ARG14, ARG15, ARG16, ARG17, ARG18, ARG19, ARG20, ARG21, ARG22, ARG23, ARG24, ARG25

local OPCAO,TELA_DOS
local TOTCTA := 25


rddsetdefault("LETO")
use ("//127.0.0.1:2812/dt_Est")

@ 00, 00 say reccount()
inkey(0)


Agora o código extraído do TEST_DBF.PRG que acompanha o letodb na pasta Tests, alterei para abrir a mesma tabela no finalzinho dele pra testar...

Código: Selecionar todos

/*
 * This sample tests working with dbf files
 * Just change the cPath value to that one you need.
 */

REQUEST LETO
REQUEST DBFCDX

#include "dbinfo.ch"

Function Main( cPath )
 LOCAL aNames := { "Petr", "Ivan", "Alexander", "Pavel", "Alexey", "Elch", ;
                  "Konstantin", "Vladimir", "Nikolay", "Andrey", "Dmitry", "Sergey" }
 LOCAL i, aStru, aServerDriver
 LOCAL nPort := 2812
 FIELD NAME, NUM, INFO, DINFO, MINFO, TINFO

   ALTD()
   SET DATE FORMAT "dd/mm/yy"

   IF Empty( cPath )
      //cPath := "//127.0.0.1:2812/"
      cPath := ""
      RDDSETDEFAULT( "DBFCDX" )
   ELSE
      cPath := "//" + cPath + IiF( ":" $ cPath, "", ":" + ALLTRIM( STR( nPort ) ) )
      cPath += Iif( Right(cPath,1) == "/", "", "/" )
      RDDSETDEFAULT( "LETO" )
   ENDIF

	IF leto_Connect( cPath, /*user*/, /*pass*/, /*timeout*/, /*hot buffer*/ ) == -1
         ALERT("NO LETODB SERVER FOUND - Fehler: " + leto_Connect_Err( .T. ) )
         QUIT
      ELSE
         ? LETO_GetServerVersion(), " at address: ", Leto_getLocalIP( .T. )
         // LETO_DBDRIVER( "DBFCDX", "SMT", 512 )
         LETO_DBDRIVER( "DBFNTX", "SMT", 512 )
         /* alternative: RddInfo( RDDI_MEMOTYPE, DB_MEMO_SMT ); RddInfo( RDDI_MEMOBLOCKSIZE, 512 ) */
         ? "DBF DATABASE DRIVER        :", LETO_DBDRIVER()[ 1 ], "MEMOTYPE:", LETO_DBDRIVER()[ 2 ]
         LETO_TOGGLEZIP( 1 )
         ? "NETWORK TRAFFIC COMPRESSION:", Iif( LETO_TOGGLEZIP() > 0, "ON", "OFF" )
      ENDIF

LETO_DBDRIVER( "DBFCDX", "SMT", 512 )
use ("//127.0.0.1:2812/dt_Est" )
@ 00, 00 say reccount() 
inkey(0)


Aguardo ansioso um pulo do gato kkk
Abraços.
X:)
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 nao abre um determinado DBF

Mensagem por Itamar M. Lins Jr. »

Ola!
Versão do leto, estrutura do DBF ?

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Geraldo_SQS
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 28 Jun 2017 18:00
Localização: Tubarao - SC

LETODB nao abre um determinado DBF

Mensagem por Geraldo_SQS »

Ola Itamar,

Obrigado pela atenção..

Então.... Estou usando o leto FORK... baixei aqui do forum e no change.log tem a ultima alteração abaixo..
2017-06-27 16:51 UTC+0100 Rolf 'elch' Beckmann (elchs users.noreply.github.com)
; update client and server: tiny protocol change for Leto_UDF()



Essa noite ... lutando com essa situação... consegui um avanço... consegui abrir o DBF e o problema parecia ser configuração do driver do LETO:

acrescentei uma linha no código e então abriu o DBF... Oba!!.... mas passou a exibir outra mensagem de erro

Código: Selecionar todos

	
rddsetdefault( "LETO" )
LETO_DBDRIVER( "DBFCDX", "DBT" )   // *** Acrescentei essa linha
Erro apresentado após alteração - agora ele abre o DBF - o problema estava no indice utilizado
Erro na indexação - uso uma função para ajustar um campo texto apenas no indice.
Erro na indexação - uso uma função para ajustar um campo texto apenas no indice.
Segue abaixo o código da rotina de indexação desse DBF, utilizo uma função que ajusta uns caracteres do campo EST_DESC para algumas consultas disponiveis ao usuario.

Código: Selecionar todos

if CRIAID

   use (ARQBD) alias EST new exclusive


// *** Quando tirei a chamada da funcao TRANS_MED a indexação funcionou perfeitamente ***


   TERM( 0, 0 , "Indexando Estoque Fase 1", "Registro  " + transform( 0 ,"999,999"), "", 1 )
   index on upper(EST->EST_GRUPO) + upper(EST->EST_SUB) + upper(EST->EST_COD)  tag EST1 eval {|| TERM_IND() } every lastrec() / 100 ALL

   TERM( 0, 0 , "Indexando Estoque Fase 2", "Registro  " + transform( 0 ,"999,999"), "", 1 )

   index on TRANS_MED( EST->EST_DESC ) + upper(EST->EST_CFOR)                        tag EST2 eval {|| TERM_IND() } every lastrec() / 100 ALL

   TERM( 0, 0 , "Indexando Estoque Fase 3", "Registro  " + transform( 0 ,"999,999"), "", 1 )
   index on upper(EST->EST_GRUPO) + upper(EST->EST_SUB) + upper( TRANS_MED( EST->EST_DESC ) ) + upper(EST->EST_CFOR) tag EST3 eval {|| TERM_IND() } every lastrec() / 100 ALL

 
   TERM( 0, 0 , "Indexando Estoque Fase 17", "Registro  " + transform( 0 ,"999,999"), "", 1 )
   index on upper(EST->EST_GRUPO) + upper( TRANS_MED( EST->EST_DESC ) ) tag EST17 eval {|| TERM_IND() } every lastrec() / 100 ALL

   FECHA_ARQ( "EST" )

endif
Acredito que o problema agora é que a minha função TRANS_MED() não existe para o leto. Como lidar com isso ??

E vamos descobrindo o leto kkk

Desde já agradeço pela atenção e colaboração.

Grande abraço.
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 nao abre um determinado DBF

Mensagem por Itamar M. Lins Jr. »

Ola!
Neste caso penso que o mais indicado, é fazer esse indice quando for usado, criar o índice direto na RAM, "memory, temporary".
Outra opção é compilar suas funções, junto/dentro do servidor uma vez que tens os fontes do letodbf em mãos.
Mais uma opção é usar UDF do lado do servidor. Leia o arquivo readme.txt;
7.10 Calling udf-functions on the server
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Responder