Page 4 of 6

PostPosted: Mon Jul 14, 2008 10:25 pm
by Francisco Horta
dblizama,
Gracias por tu ayuda, pero no funciono este es el log de las prueba, cambiando slash "/", "\" con y sin el, no funciona de ninguna manera
mira el .log

07/14/08 17:18:36: Leto DB Server has been started.
07/14/08 17:21:08: Open error (15-1002): f:\letodb\data//BASES
07/14/08 17:22:06: Open error (15-1002): f:\letodb\data/BASES
07/14/08 17:23:04: Open error (15-1002): f:\letodb\data\BASES

gracias
:-(
sabe que sera
salu2
paco

PostPosted: Tue Jul 15, 2008 2:01 am
by Alfredo Arteaga
Comento los avances realizados en tiempo libre con un programa de prueba y una tabla dbf y en modo local.

1. Ejecutar LetoDB
2. Ejecutar Manage con la IP del equipo, desconozco el motivo pero 'localhost' responde solo cuando está de buenas.

Los parámetros de LetoDB.Ini son tomado por LetoDB.Exe y no por la aplicación por tanto estos dos archivos deben estar juntos, digo esto porque creí que eran tomados por la aplicación.

Los datos pueden estar en cualquier unidad y ruta (C:, D:, H:, etc.) y la aplicación en otra, lo importante es que LetoDB vea la ruta al iniciar (DataPath = H:\Hello).

Lo que no he podido es habilitarlo como un servicio o alojarlo como servidor y por último veo que las tablas son usadas en modo exclusivo, si las tengo abiertas con otra aplicación simplemente no responde protesta enviando mensajes que no entiendo pero que quedan guardados el LetoDB.Log, normalmente es porque no puede abrir las tablas.

Por hoy hasta aquí, ya veré si hay mas...

Code: Select all  Expand view
#Include "FiveWin.Ch"

FUNCTION Main()
   LOCAL cServer:="//192.168.1.200:2812/", nI

   REQUEST Leto
   RDDSetDefault("Leto")
   IF Leto_Connect(cServer)==-1
      MsgAlert("No se puede establecer la conexión.","Verifique!")
      RETURN (NIL)
   ENDIF

   DBUseArea(.T.,,cServer+"Dat2008/Personal","Personal")
   IF !Empty(OrdName(1))         // Esto porque parece que no hay SET AUTOPEN
      Personal->(DbSetOrder(1))
   ENDIF

   IF Personal->(DbSeek("0275"))
      MsgInfo(Personal->NomCom)
   ELSE
      MsgInfo("No lo encontré!")
   ENDIF
   Personal->(DbCloseArea())

RETURN (NIL)

Abrir compartido

PostPosted: Tue Jul 15, 2008 2:27 am
by jblizama
Alfredo:

El quinto parametro de la funcion dbusearea() es un valor logico que indica si se permite o no la apertura compartida de tablas, veo que en tu codigo no lo usas, queda entonces expuesto a lo que diga SET EXCLUSIVE que tampoco lo usas. Por lo tanto la apertura es No Compartida. Creo que por ahi va el error...

Saludos

PostPosted: Tue Jul 15, 2008 2:40 am
by jblizama
Paco:

Prueba dos cosas y cuentanos...

1.- Ejecutar todo desde el disco local C:

2.- Crear una tabla desde el codigo.

Saludos, saldremos adelante...

PostPosted: Tue Jul 15, 2008 5:47 am
by Biel EA6DD
El parametro Shared de dbUseArea, sirve para indicarle a leto el modo de apertura, pero solo tiene ambito dentro del servidor. Es decir si le indicamos que queremos apertura compartida, nos permitira usar la misma tabla desde diferentes puntos(clientes, programas, etc), pero accediendo atraves del servidor.

LetoDB abre en modo exclusivo los ficheros, lo que imposibilita el uso de los dbf desde una aplicación externa.

PostPosted: Tue Jul 15, 2008 11:41 am
by Kleyber
jblizama,

Gracias por la respuesta. Sigo mirando los resultados de los testes...

Saludos,

PostPosted: Tue Jul 15, 2008 6:18 pm
by Francisco Horta
jblizama,
Hice lo que me sugeriste, y no funiono, sigo sin entender porque si me marca que establece la conexion, pero no hace nada mas.
aqui dejo el .prg esta muy basico y corto, si alguien lo puede probar a ver si le funciona, todo lo hago desde el disco local c

#Include "Fivewin.ch"

FUNCTION Main()
LOCAL cServer := '//localhost:2812/'
LOCAL aDbf := {}

REQUEST LETO
RDDSETDEFAULT("LETO")

IF Leto_Connect(cServer)==-1
msginfo("no hay conexion con el servidor "+cServer)
return NIL
ELSE
msginfo("Conexion establecida con el servidor "+cServer)
ENDIF

aDbf := {{"campo1", "N", 3, 0},;
{"campo2", "C", 15, 0},;
{"fecha" , "D", 8, 0}}

DBCreate( cServer+'prueba.dbf', aDbf )
RETURN NIL

[url=http://img378.imageshack.us/my.php?image=letodb4cj9.jpg]
Image

salu2
paco

PostPosted: Tue Jul 15, 2008 6:41 pm
by Antonio Martinez
Biel,
A ver si entiendo... significa esto que si abro una .dbf con Leto, aunque sea en modo compartido, ya no la puedo abrir con por ejemplos un programa clipper.... ????
Creo que esta caracteristica si la permite ADS

Saludos
Biel EA6DD wrote:El parametro Shared de dbUseArea, sirve para indicarle a leto el modo de apertura, pero solo tiene ambito dentro del servidor. Es decir si le indicamos que queremos apertura compartida, nos permitira usar la misma tabla desde diferentes puntos(clientes, programas, etc), pero accediendo atraves del servidor.

LetoDB abre en modo exclusivo los ficheros, lo que imposibilita el uso de los dbf desde una aplicación externa.

Ayuda

PostPosted: Tue Jul 15, 2008 8:03 pm
by jblizama
Paco.

Para probar tu codigo, le pedi el computador a mi hijo, despues de una mirada de "donde la viste", me lo presto..., instale todo desde cero, incluido leto..., copy & paste para el codigo de el blog de Biel, al compilar, sorpresa... se conectaba pero no hacia nada, es decir, no creaba la tabla de datos...(En mi pais hay una exclamacion para esto...CHUUUUUUUU...)

Despues de unos intentos fallidos, elimine los espacios en blanco que hay entre las claves y sus valores para en el archivo letodb.ini, stop para letodb.exe y reinicio nuevamente, ejecucion de tu codigo y FUNCIONA....

Parece ser que letodb no quiere estos espacios en su archivo ini...

Salud...

PostPosted: Tue Jul 15, 2008 8:49 pm
by Francisco Horta
jblizama,

Pero estara peleado conmigo el letodb? hice los cambios como tu y nada no funciona, me pasas la .lib que tu usas, con que versionde harbour enlazas?
gracias
paco

Ayuda

PostPosted: Tue Jul 15, 2008 10:26 pm
by jblizama
Paco:

Uso la ultima MiniGUI Extend, y el archivo zip de el Blog de Biel donde estan comprimidos los tres archivos letodb.exe, rddleto.lib, manage.exe

1.- Crear una carpeta C:\letodb
2.- Descomprimir letodb.zip en la carpeta creada.
3.- Copiar el archivo rddleto.lib en C:\MiniGUI\Harbour\Lib
4.- Modificar en brmake.ini para agregar la librería rddleto.lib
5.- Crear la subcarpeta C:\letodb\data
6.- Crear el archivo letodb.ini en C:\letodb con lo siguiente:

Port=2812
DataPath=c:/letodb/data
Logfile="letodb.log"
Default_Driver=CDX

7.- Crear una carpeta C:\letoprg
8.- Crear un archivo leto.prg en esa carpeta, y copia el código de prueba.
9.- Ejecutar el archivo letodb.exe
10.- Compilar y Ejecutar el archivo leto.prg

Salud

PostPosted: Wed Jul 16, 2008 5:56 am
by Biel EA6DD
Paco, vuelve a descargarte letodb.zip de mi blog, hay una mejora con el manejo de path y fichero ini. Ademas le he añadido que registre en el fichero de log, el datapath y el puerto que esta usando el server.

Yo he probado el codigo y el ini tal cual los pones aqui, y ha funcionado correctamente.

PostPosted: Wed Jul 16, 2008 6:05 am
by Biel EA6DD
Hola Antonio
En principio si, significa justo lo que has entendido. Supongo que en el momento de diseño se deicido como una medida preventiva, para evitar inconsistencia en los datos e indices.
ADS por defecto tampoco permite el uso compartido con otras aplicaciones, pero dispone de una funcion AdsLocking(.f.) que desbloquea los dbfs y permite su uso por otras aplicaciones.

Este es un proyecto opensource, podeis hacer vuestro aportaciones y sugerencias en la lista de programadores.

Antonio Martinez wrote:Biel,
A ver si entiendo... significa esto que si abro una .dbf con Leto, aunque sea en modo compartido, ya no la puedo abrir con por ejemplos un programa clipper.... ????
Creo que esta caracteristica si la permite ADS

PostPosted: Wed Jul 16, 2008 1:23 pm
by pymsoft
Francisco Horta wrote:jblizama,
Hice lo que me sugeriste, y no funiono, sigo sin entender porque si me marca que establece la conexion, pero no hace nada mas.
aqui dejo el .prg esta muy basico y corto, si alguien lo puede probar a ver si le funciona, todo lo hago desde el disco local c

#Include "Fivewin.ch"

FUNCTION Main()
LOCAL cServer := '//localhost:2812/'
LOCAL aDbf := {}

REQUEST LETO
RDDSETDEFAULT("LETO")

IF Leto_Connect(cServer)==-1
msginfo("no hay conexion con el servidor "+cServer)
return NIL
ELSE
msginfo("Conexion establecida con el servidor "+cServer)
ENDIF

aDbf := {{"campo1", "N", 3, 0},;
{"campo2", "C", 15, 0},;
{"fecha" , "D", 8, 0}}

DBCreate( cServer+'prueba.dbf', aDbf )
RETURN NIL

[url=http://img378.imageshack.us/my.php?image=letodb4cj9.jpg]
Image

salu2
paco



paco: yo recien logré hacerlo funcionar, y te digo como:


creé este archivo ini en la carpeta c:\letodb --> letodb.ini

Port=2812
DataPath=c:\letodb\dati
Logfile="letodb.log"
Default_Driver=CDX

ejecuté letodb.exe que se encuentra en la carpeta c:\letodb






Code: Select all  Expand view
FUNCTION LetoDbProva()

   LOCAL cServer:="//127.0.0.1:2812/"

   REQUEST Leto
   RDDSetDefault("Leto")
   IF Leto_Connect(cServer)==-1
      MsgAlert("No se puede establecer la conexión.","Verifique!")
      RETURN (NIL)
   ENDIF

   DBUseArea(.T.,, cServer + "categ.d07", "categ2" )

    msginfo( categ2->( reccount() ) )
   categ2->( browse() )

   categ2->( DbCloseArea() )

RETURN (NIL)



hasta ahi mis pruebas.

como hay que hacer para que letodb abra las bases de datos en modo compartido?

otra cosa, vi que cuando abre un indice que tiene funciones al interno, obviamente da error... una mala practica que hice cuando comencé a realizar esta aplicación hace 7 años, pero que me complicaría cambiar ahora. (se que no tiene solución, mas que cambiar el modo que creo los indices)

Saludos.

PostPosted: Wed Jul 16, 2008 1:38 pm
by pymsoft
mirando server.prg en esta funcion: hs_opentable()

està puesto en modo fijo el parametro para abrir en modo exlusivo las bases de datos, creo que ahi esta la cosa para abrirlos en modo compartido.

cambiando esta linea, las abre en modo compartido (no se que otras consecuencias puede tener...)


dbUseArea( .F.,Iif(nDriver==1,"DBFNTX",Nil),oApp:DataPath+cName,cRealAlias,.T.,.F.,Iif(!Empty(cdp),cdp,Nil) )


saludos