Clipper On Line • Ver Tópico - LETODB nao abre um determinado DBF

LETODB nao abre um determinado DBF

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

Moderador: Moderadores

 

LETODB nao abre um determinado DBF

Mensagempor Geraldo_SQS » 23 Jul 2017 20:55

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

erroletodb.png
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 :



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

/*
* 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:)
Geraldo_SQS
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 3
Data de registro: 28 Jun 2017 18:00
Cidade/Estado: Tubarao - SC
Curtiu: 0 vez
Mens.Curtidas: 0 vez

LETODB nao abre um determinado DBF

Mensagempor Itamar M. Lins Jr. » 24 Jul 2017 11:00

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

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

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6944
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 311 vezes
Mens.Curtidas: 505 vezes

LETODB nao abre um determinado DBF

Mensagempor Geraldo_SQS » 24 Jul 2017 11:47

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

   
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
erroletoindice.png
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.
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.
Geraldo_SQS
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 3
Data de registro: 28 Jun 2017 18:00
Cidade/Estado: Tubarao - SC
Curtiu: 0 vez
Mens.Curtidas: 0 vez

LETODB nao abre um determinado DBF

Mensagempor Itamar M. Lins Jr. » 28 Jul 2017 10:20

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6944
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 311 vezes
Mens.Curtidas: 505 vezes




Retornar para Banco de Dados

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 3 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