Guía rápida de LetoDBF

Responder
jpastor
Mensajes: 2
Registered for: 3 years 3 months
Spain

Guía rápida de LetoDBF

Mensaje por jpastor »

Guía rápida de puesta en marcha de LetoDBF en Windows

LetoDbf desarrollado por Rolf "elch" Beckmann es un folk de LetoDB original de Alexander S. Kresin es un sistema de administración de bases de datos cliente-servidor (DBMS) y supone una alternativa gratuita a Advantage Database Server (ADS) y sobre todo con todos los fuentes disponibles para modificarlos a nuestro antojo,

El servidor LetoDB está escrito principalmente en C y usa algunas bibliotecas Harbour, incluidos los controladores de bases de datos: DBFCDX y DBFNTX .

Podemos distinguir principalmente 2 partes:
  • La parte del cliente, compuesta principalmente por un controlador RDD en forma de librería rddleto.lib.
  • Y la parte servidor letodb.exe junto con un fichero de configuración letodb.ini, encargada de recibir las peticiones del cliente y enviar los resultados. Este servicio puede instalarse como servicio en windows o demonio en linux.

    Hay que puntualizar que junto a las 2 partes principales también existen algunas utilidades de monitorización y varios ejemplos.

Compilación

Descargamos del repositorio [url=https://github.com/elchs/LetoDBf] todo el proyecto y si tenemos el entorno de desarrollo harbour preparado para BCC o descomentamos las dos primeras líneas del fichero make_bc32.bat y le ponemos los paths de nuestro entorno, con sólo ejecutarlo nos creará en los directorios lib y bin el cliente y el servidor respectivamente.

También podemos hacer uso de nuestro compilador de C favorito y utilizar hbmk2 para compilar tanto el server como el rdd del cliente.

Si nos fijamos hay varios ficheros .hbp, si modificamos el de creación del server letodbsvc.hbp comentando o descomentando las siguientes líneas, podemos hacer que funcione en windows como servicio (lo más habitual), o como proceso, muy práctico en desarrollo.

Código: Seleccionar todo

-prgflag={win}-D__WIN_DAEMON__
#-prgflag={win}-D__WIN_SERVICE__

Instalación

El cliente rddleto.lib simplemente lo añadiremos a nuestro proyecto junto el fichero rddleto.ch del directorio include (siempre que necesitemos hacer uso de las funciones agregadas de LetoDBF).

En cuanto al servidor necesitaremos el fichero letodb.exe y el fichero letodb.ini y los situaremos en la máquina donde vaya a funcionar de server, claro está que para pruebas y desarrollo lo normal es que sean la misma.

Sólo queda modificar el letodb.ini que viene de ejemplo a nuestras necesidades, principalmente:

Código: Seleccionar todo

Server=192.168.2.201
IP=192.168.2.201
DataPath=C:\Programa\DBF
Está claro que indican la IP de escucha y la situación de nuestros fichero de datos, el resto de parámetros muchos se entienden y los que no, los tenemos detallados en readme.txt.

Ya podremos instalar el servicio en nuestro windows con letodb.exe install (no olvidéis ejecutarlo como administrador para que pueda ser creado el servicio), a partir de ese momento se comportará como un servicio mas al que podremos iniciar, parar o reiniciar de la forma habitual.

La distribución de LetoDBF incluye varias utilidades, que deberemos compilar previamente, dentro de la carpeta utils, principalmente console.exe y letobackup.exe . El programa console.exe Es una utilidad de administración del servidor, que se puede ejecutar desde la máquina del cliente y proporciona una variedad de información sobre el servidor: estadísticas, lista de conexiones, la lista de tablas abiertas y le permite cerrar cualquier conexión, así como crear usuarios, utiliza el mismo fichero de configuración que el server.

En cuanto a letobackup.exe, permite realizar copias remotas de nuestros datos, lleva su propio .ini de configuración, del cual se puede ver un ejemplo en el fichero readme.txt que lo acompaña.

Mucho cuidado con con los Firewall, en particular el de Windows, debe tener abiertos los puertos necesarios para establecer la comunicación (por defecto 2812 y 2813) y si la conexión es a través de internet tener claro la redirección de los mismos para que sea alcanzable el server desde el cliente.


Uso desde nuestros programas.

Una vez configurado el server veamos como es una conexión simple desde nuestros programas:

Código: Seleccionar todo

/*
 * Conexión simple al Servidor
 * Cambie los datos de cPath a los de su servidor.
*/

REQUEST DBFCDX
REQUEST LETO  

#include "rddleto.ch"

Function Main( )
	LOCAL cPath := "//localhost:2812/"

	IF leto_Connect( cPath, /*user*/, /*pass*/, /*nTimeOut*/) == -1
   		? "NO SE HA ENCONTRADO SERVIDOR LETO: " + cPath
      		Inkey(0)
  	ELSE
   		? LETO_GetServerVersion(), " en la direccion: ", Leto_getLocalIP( .T. )
		LETO_DBDRIVER( "DBFCDX", "FPT", 512 )
      		? "DRIVER DE LA BASE DE DATOS DBF:", LETO_DBDRIVER()[ 1 ], "MEMOTYPE:", LETO_DBDRIVER()[ 2 ]
      		Inkey(0)
      
	      	//Abrimos la Tabla test.dbf y realizamos un browse
      		USE test
      		BROWSE()
      		CLOSE DATABASES
  	ENDIF
Return Nil
Como se puede apreciar, una vez establecida lo conexión con leto_connect, ya podemos hacer uso de nuestros comandos de Base de Datos habituales de Harbour.

Existen muchas a funciones agregadas, todas reconocibles por el prefijo Leto_", que obedecen a esa necesidad de interactuar entre el servidor y cliente a nivel es ficheros, las podéis ver todas en el fichero readme.txt.
  • Leto_File( cFileName ) ==>; lFileExists - Comprueba si existe el fichero en el server.
  • Leto_FCopy( cFilename, cFileNewName ) ==>; -1 si falla - Copia un fichero al server cambiando el nombre.
  • Leto_FErase( cFileName ) ==>; -1 si falla - Borra un fichero en el server.
  • etc.
Otra posibilidad es también el usar nuestras propias funciones UDF, pero que se ejecuten en el lado del servidor y que nos devuelvan el resultado en el cliente, lo que nos ofrece la posibilidad de ejecutar funciones pesadas, que en los clientes serían extremadamente costosas en términos de rendimiento de manera sencilla y rápida.

Esto lo lograremos utilizando el fichero letoudf.hrb, que no es mas que un fichero precompilado en .hrb con nuestras funciones propias, pero que situaremos en el server y que podrán ser llamadas desde nuestro cliente con:

Código: Seleccionar todo

LETO_UDF( cServerFunc [, xParam1, ... ] )  ==> xResult
también podemos hacer uso de Codeblocks que se ejecuten en el server de la misma forma:

Código: Seleccionar todo

LETO_UDF( cCodeBlock [, xParam1, ... ] )  ==> xResult
Hay que prestar especial atención que si usamos funciones dentro de nuestras UDF's que no existen el el server.exe tendremos un error si no compilamos el server con las librerías necesarias.


Consideraciones Finales

Esto no pretende para nada ser un manual, sino una guía que nos permita poner en marcha LetoDBF de forma rápida para posteriormente adentrarnos en todas las posibilidades que nos ofrece.

LetoDBF tiene todas estás y muchas otras características que no se han explicado y que le dotan de mayor potencia, todas ellas explicadas en el fichero readme.txt.
  • Seguridad por usuario y contraseña al establecer la conexión.
  • Transacciones.
  • Intercambio de variables entre servidor y cliente.
  • Compresión de las comunicaciones.
  • etc.
Última edición por jpastor el Vie Sep 09, 2022 11:28 am, editado 4 veces en total.

Cristobal
Site Admin
Mensajes: 315
Registered for: 3 years 5 months
Spain

Mensaje por Cristobal »

Muchas gracias Juan, un gran aporte
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces

quim
Mensajes: 31
Registered for: 3 years 3 months
Andorra

Mensaje por quim »

Buenos dias Juan, Cristobal y al resto de lectores ... sirvan estas lineas de presentación al foro

Gracias a las amables explicaciones de Juan, he logrado hacer funcionar letoDB(f) en un servidor virtual de clouding.io

Me sorprendió conocer a alguien que utilizara letoDB ya que solamente había encontrado testimonios en los grupos de google y poco más, per no conocía a nadie personalmente que lo utilizara, así que gracias a Juan me animé ;)

De momento, las pruebas sobre tablas con pocos registros (< 100) funcionan perfectamente, si se realizan instrucciones tipo browse() o do while !eof() / skip / enddo, pero se complica y mucho, si queremos 'traernos' más de 500 registros, es decir, para tablas con 1.000 o más, la lentitud puede llegar a ser desesperante.

Seguramente con tablas grandes, hay que estudiar el tema de los procedimientos almacenados en servidor, por ejemplo que una tabla con 1.000 registros tarde unos 20 segundos en mostrarse en pantalla, no es viable.

Esperemos que exista una forma de optimizar la comunicación cliente/servidor y desde aquí animo a Juan (o a la comunidad) a ampliar sus experiencias. Gracias !

Saludos

Joaquim Ferrer

Cristobal
Site Admin
Mensajes: 315
Registered for: 3 years 5 months
Spain

Mensaje por Cristobal »

Muchas gracias Quim por tu feedback, será un tema que habrá que comentar con Juan para que nos cuente su experiencia.
Por ciero, más que bienvenido al foro.
Un abrazo
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces

Avatar de Usuario
charly
Mensajes: 145
Registered for: 3 years 5 months

Mensaje por charly »

Bones !,

Hace unos años utilice un poco LetoDb y obtuve los resultados esperados. Actualmente quiero potenciar el modHarbour usándolo de un modo mas "purista" para intentar atraer a los programadores "externos" o sea no Harbour. La gente de Harbour tenemos nuestras propias herramientas y una de ellas es Leto, que te permite trabajar a la nuestra. Pero una de las cosas q tiene la web es la performance y la manera en que es logico de trabajar.

No tiene sentido o es un mal proceder, hacer el típico browse o while..skip....end esto es una 'aberración' y no lo digo por el comentario de Quim, (ya lo sabe). Leto ha de usar los procedimientos almacenados para ser efectivo en la web y asi funcionara muy bien:

- Dame 20 registros
- Actualiza esto 3
- Ejecuta este proceso y escupeme el resultado...
- ...

No hemos de usar Leto como si tuvieramos los datos al lado

En la web hemos de trabajar en el sentido cliente/server pero enfocado a proceso mas que a registro.

Esta tarde (04/12/20 17:00) por ejemplo enseñare como gestionar un browse con estos conceptos y cargaremos usando nuestro Browse (no es el mejor pero va bastante bien) 1000 registros en poco mas de 1 segundo. Actualizaremos en el browse varios registros, eliminaremos, añadiremos y... al final actualizaremos nuestras acciones. Este es el enfoque que hemos de dar.

Leto es buena herramienta (para el mundo harbour) y ahora me he encontrado en un proyecto que es necesarios para conectar con varias empresas que no tienen server web y sirve muy bien para recolectar datos. Los harbourianos tenemos estas opciones "especiales"


Bienvenido Quim !!!
C.
Salutacions, saludos, regards.
Charly

"...programar es fácil, hacer programas es difícil..."

https://httpd2.blogspot.com/
https://forum.modharbour.app

gvaronas
Mensajes: 7
Registered for: 3 years 4 months
Peru

Mensaje por gvaronas »

Estimados todos, Buen día, al respecto, desde el punto de vista y enfoque que manifiesta Charly, ¿Que ventajas y desventajas (pros y contras) hay entre usar LetoDB y NetIO?
De antemano, gracias por sus comentarios.
Atte.,
GVARONAS

jogabar
Mensajes: 5
Registered for: 3 years 4 months
Chile

Mensaje por jogabar »

Hola:

Me interesa mucho el tema, tengo sistemas antiguos que me complica pasarlos a MySQL (o similar) y las VPN me dan algunos problemas de desconexión tanto por el servicio de Internet como por algunos notebooks que los apagan con los programas y .dbf abiertos.

Bajé de https://github.com/elchs/LetoDBf todo según la guía y me encuentro con la problemática de la compilación. Estoy muy mal acostumbrado a compilar con QPM y no directamente usando los MAKE de Harbour, pido ayuda para compilar usando mingw del Harbour32.

Gracias

Jorge

jpastor
Mensajes: 2
Registered for: 3 years 3 months
Spain

Mensaje por jpastor »

Hola Jorge.
Simplemente ten las variables de sistema encaradas a tu entorno (yo uso Borland C 5.5), por ejemplo:

Código: Seleccionar todo

SET PATH=C:\bcc55\bin;C:\harbour\hb32\bin
SET HB_PATH=C:\harbour\hb32
y después compilamos con un simple:

Para el Server

Código: Seleccionar todo

hbmk2 letodb.hbp

Para el Cliente

Código: Seleccionar todo

hbmk2 rddleto.hbp

jogabar
Mensajes: 5
Registered for: 3 years 4 months
Chile

Mensaje por jogabar »

Ahí si, ahora podré hacer pruebas.

Gracias.

Responder