Pruebas con AIS

Pruebas con AIS

Postby Carlos Mora » Thu Apr 26, 2007 4:18 pm

He empezado a experimentar con la conexion de internet del servidor ADS de la empresa, un ADS 7.1.

Siguiendo el ejemplo de RF (uno algo antiguo pero que aún funciona) armé un pequeño programa para hacer la conexión.

Lo primero que me pasó fué que tengo que crear si o si el diccionario, es imprescindible para hacer la conexion con AdsConnect60(). Me llamó la atención porque eso es diferente y para acceder a tablas que accedía directamente, con AIS no puedo.

El problema que tengo es que para poder acceder a una tabla tengo que declararla en el diccionario, y en el use solo indico el nombre sin el path. Eso es diferente de como lo hace René en su código. Para mas claridad, adjunto mi código:

Code: Select all  Expand view
ANNOUNCE RDDSYS

FUNCTION aisdem32()
   LOCAL oBar

   SET DELETE ON

   REQUEST ADS, ADSKeyCount, ADSKeyNo, OrdKeyCount, OrdKeyNo
   RddRegister("ADS",1)
   RddSetDefault("ADS")
   AdsRightsCheck(.F.)
   AdsSetServerType(4) //SET SERVER AIS
   AdsSetFileType(2)

   IF AdsConnect60( "\\pluton\disco-d\instalar\inciden.add", 4 , "inciden", "inciden" )
      Alert("Esta ahora conectado al Sevidor AIS de ATISA;;"+;
         "You are now connected to ATISA Server","Bienvenido / Welcome")

   ELSE
      Alert("Se ha rechazado la conexión al servidor AIS de Atisa, por favor intente mas tarde;;"+;
         "Conection to Atisa's AIS Server rejected, please, try again later","AIS Error")
      QUIT
   ENDIF

   AbreDbfs()

RETURN (.T.)


FUNCTION AbreDbfs()

    // USE "\\PLUTON\DISCO-D\instalar\LIFTPINT\Empresas.Dbf" SHARED NEW Esto no funciona pero asi es como lo hace René en su ejemplo
    //  USE "W:\instalar\LIFTPINT\Empresas.Dbf" SHARED NEW esto tampoco ambos dan error 5132
    USE "Empresas" SHARED NEW // esto si

      browse()

RETURN (.T.)


Sin embargo en el código de René la apertura se hace especificando el path:
Code: Select all  Expand view
FUNCTION AbreDbfs()
      cAliCat := "CATCUE"
      USE \\googleserver\cursos\adsdemo\cibconwn\stc\CATCUE.cat SHARED NEW ALIAS (cAliCat)
      (cAliCat)->(AdsCacheRecords(50))
      (cAliCat)->(OrdSetFocus("NUMCUENTA"))
      (cAliCat)->(DBGOTOP())

      cAliCatPol := "CAT1"
      USE \\googleserver\cursos\adsdemo\cibconwn\stc\CATCUE.CAT SHARED NEW ALIAS (cAliCatPol)
      (cAliCatPol)->(OrdSetFocus("NUMCUENTA"))

      cAliPol := "ENEPOL"
      USE \\googleserver\cursos\adsdemo\cibconwn\stc\ENEPOL.POL SHARED NEW ALIAS (cAliPol)
      (cAliPol)->(OrdSetFocus("POLIZA"))        // seleccion del indice / index selection
      (cAliPol)->(ADSCACHERECORDS(50))          // lectura de registros por adelantado / record "in advance" reading

      cAliPol2 := "POLENE"
      USE \\googleserver\cursos\adsdemo\cibconwn\stc\POLENE.POL SHARED NEW ALIAS (cAliPol2)
      (cAliPol2)->(OrdSetFocus("POLIZA"))       // seleccion del indice / index selection
      (cAliPol2)->(ADSCACHERECORDS(50) )        // idem
      (cAliPol2)->(QuickScope((cAliPol)->tipopoli2+STR((cAlipol)->numpoli2,4))) // Filtro sobre el detalle en base al maestro / Detail filtering based on the master
      (cAliPol2)->(DBGOTOP())
      SET RELATION TO numcta+numsubcta+numssubcta+numauxil INTO (cAliCatPol)
RETURN (.T.)



Lo que se me complica es que tengo que crear algunas dbfs cuyo nombre cambia segun diversos parámetros como la fecha y cosas por el estilo, y con el diccionario no se me ocurre como manejarlo.

Un saludo,

Carlos.
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Postby Patricio Avalos Aguirre » Thu Apr 26, 2007 4:34 pm

Carlos

Debes tener en cuenta que ADS tambien utiliza el archivo ADS.INI

ADS.INI

Code: Select all  Expand view
[SETTINGS]

DEFAULT_PROTOCOL = 1


[SERVIDOR] //AQUI VA EL NOMBRE DEL SERVIDOR

INTERNET_PORT=2000
INTERNET_IP=xx.xx.xx.xx

LAN_IP=xx.xx.xx.xx
LAN_PORT=6262



cuando abras una tabla ponle solo el noMbre

use clientes new


Espero que te sirva
Saludos
Patricio
User avatar
Patricio Avalos Aguirre
 
Posts: 1060
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile

Postby Carlos Mora » Thu Apr 26, 2007 4:46 pm

Patricio,

Gracias por la respuesta.

Si, eso está bien y de hecho ya está funcionando. El punto es que solo puedo abrir las dbfs usando el alias que definí en el diccionario de datos, pero no especificando el path en el servidor tal como lo hace René.

Esto falla:
USE "\\PLUTON\DISCO-D\instalar\LIFTPINT\Empresas.Dbf" SHARED NEW

da error ADS 5132

Esto funciona bien

USE "Empresas.Dbf" SHARED NEW

Todo usando AIS.

Sabes a que se puede deber?

UN saludo y gracias por responder,

Carlos.
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Postby Patricio Avalos Aguirre » Thu Apr 26, 2007 7:49 pm

Carlos

Cuando utilizaba la version de xharbour 0.99.3 me funcionabacolocando la ruta completa donde esta dbf, luego cuando cambie de version de xharbour ya no funciono, si que tuve que colocar el nombre y para mi es mas comodo creo yo

Saludos
Patricio
User avatar
Patricio Avalos Aguirre
 
Posts: 1060
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile

Postby R.F. » Thu Apr 26, 2007 11:05 pm

Carlos:

Efectivamente, la version del ejemplo de FW que tienes esta compilada con xHarbour 0.99.5.... y las versiones anteriores tenian ese GRAVE PROBLEMA.

En realidad es un BUG del tamaño del planeta que fue corregido en el RDDADS a partir de la version 99.6.

A partir de la version 99.6 y superiores, necestias el diccionario de datos y que la tabla este registrada en el diccionario.

En:

www.google.d2g.com/ads/demos/

hay otro ejemplo AISX... que esta compilado con la version mas reciente de xHarbour y no requiere que pongas la ruta completa
Saludos
R.F.
R.F.
 
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Postby Carlos Mora » Fri Apr 27, 2007 7:35 am

Hola compañeros,
Gracias por las respuestas, calman la ansiedad del que se mete con cosas nuevas (nuevas para uno ;) )

René,

que sucede cuando quiero crear una tabla desde el cliente, como es mi caso? Estan todas en ficheros separados, en directorios separados dentro de la misma base.

Saludos,

Carlos.
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Postby Carlos Mora » Fri Apr 27, 2007 9:12 am

René,

Efectivamente, con xHarbour 0.99.5 este código funciona:

Code: Select all  Expand view
    USE "\\PLUTON\DISCO-D\instalar\LIFTPINT\Empresas.Dbf" SHARED NEW
    dBCreate( "\\PLUTON\DISCO-D\instalar\LIFTPINT\Empre.Dbf", dBStruct() )
    Use ("\\PLUTON\DISCO-D\instalar\LIFTPINT\Empre.Dbf") Exclusive NEW
    dBAppend()


Para hacerlo con xHarbour 0.99.6 o 0.99.7 he intentado y he logrado crear una nueva dbf, pero no sé como hacer para abrirla:

Code: Select all  Expand view
    USE "Empresas" SHARED NEW
    dBCreate( "\\PLUTON\DISCO-D\instalar\LIFTPINT\Empre.Dbf", dBStruct() ) // Funciona con 0.99.6!
    Use ("\\PLUTON\DISCO-D\instalar\LIFTPINT\Empre.Dbf") Exclusive NEW
    // Acá casca con:
    // Error ADSCDX/5132  Open error: \\PLUTON\DISCO-D\instalar\LIFTPINT\Empre.Dbf
    dBAppend()


Como puedo hacer con las bases nuevas creadas?


Para aclarar la consulta
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Postby Marcelo Via Giglio » Fri Apr 27, 2007 12:01 pm

Hola,

si las tablas que utilizaras son temporales, vigentes solo para la conexion puedes utilizar SQL, ahora si las tablas deben quedarse, puedes utilizar la funcion AdsADDTable que te a~nade una tabla existente al diccionario, pero el problema sera llevar la tabla al server donde esta el diccionario, si ya lo tienes alli entonces no habra problema.

No se si entendi tu pregunta.

saludos

Marcelo
Marcelo Via Giglio
 
Posts: 1064
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Postby R.F. » Fri Apr 27, 2007 3:47 pm

Atencion:

El AIS es una herramienta para consulta y actualizacion de bases de datos, no para creacion de las mismas con instrucciones XBase.

En el manual de ADS indica que el uso de ais debe de evitar la creacion (dbcreate()) y la comprobacion de existencia de archivos (FILE()) por una razon muy simple, tu no estas accediendo fisicamente al disco duro del servidor remoto, sino estas escribiendo a un puerto de internet, realmente no tienes acceso fisico al disco duro remoto como seria en el caso de una vpn, con AIS tu estas leyendo y escribiendo a un puerto, lo que tu leas y escribas en el puerto sera procesado por el servidor de Advantage y de ahi enviado al disco.

Si deseas crear tablas temporales, por ejemplo para informes o cosas asi, que luego van a desaparecer, puedes hacerlo EN TU DISCO DURO LOCAL, eso se puede hacer usando el servidor local de ADS en combinacion con el servidor AIS, de hecho asi lo hacemos nosotros. Debes seleccionar el tipo de server 7, para que puedas utilizar tanto servidor local, como remoto, como AIS simultaneamente.

Si tu quieres crear tablas en el servidor, que van a ser de uso permanente, entonces puedes hacerlo via SQL con la instruccion CREATE TABLE (obviamente tienes que estar conectado al diccionario de datos).
Saludos
R.F.
R.F.
 
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Postby Marcelo Via Giglio » Fri Apr 27, 2007 6:00 pm

Holas,

Rene esta en lo correcto como siempre, para que utilices AdADDTable, debes de tener la DB (Diccionario) en el mismo disco donde esta la aplicacion, en mi caso no es muy problematico ya que utilizo Linux. Pero tienes aun todad la potencia de SQL, con lo que podrias hacer muchas cosas.

un saludo

Marcelo
Marcelo Via Giglio
 
Posts: 1064
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Postby Patricio Avalos Aguirre » Fri Apr 27, 2007 8:29 pm

Carlos

Yo lo utilizo asi para tablas temporales

Code: Select all  Expand view
cFileTemp := cNewFileName( ViewUsu():cPathTmp + "\TEMPO", "DBF" )
cFileCdx  := cNewFileName( ViewUsu():cPathTmp + "\TEMPO", "CDX" )

dbCreate( cFileTemp, ;
                  { { "cod_prod", "c", 15,0},;
                    { "des_prod", "C", 40,0},;
                    { "fecha",    "d", 08,0},;
                    { "hora",     "C", 10,0},;
                    { "cant",     "n", 10,0},;
                    { "usuario",  "C", 30,0}}, "DBFCDX" )

SELE 0 ; USE (cFileTemp) NEW ALIAS TEMP VIA "DBFCDX"
INDEX ON FIELD->COD_PROD TAG CODIGO TO (cFileCdx)
SET INDEX TO (cFileCdx)


y al terminar borro los archivos..


Espero que te sirva

Saludos
Patricio
User avatar
Patricio Avalos Aguirre
 
Posts: 1060
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile

Postby Carlos Mora » Mon Apr 30, 2007 8:24 am

Marcelo, Patricio:

Creo tablas, pero no son temporales, es evidente que crear tablas temporales en un ancho de banda reducido sería nefasto. Las tablas a crear son como cierres o paquetes de datos a procesar en el servidor, que eventualmente son actualizados luego del cierre. Voy a probar a ver como me va con el ADSAddTable, a ver si me funciona.

Gracias por la atención,

Carlos.
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Postby Carlos Mora » Mon Apr 30, 2007 9:01 am

Hola Rene,

gracias por la respuesta,

[quote="RF"]

Atencion:

El AIS es una herramienta para consulta y actualizacion de bases de datos, no para creacion de las mismas con instrucciones XBase.

En el manual de ADS indica que el uso de ais debe de evitar la creacion (dbcreate()) y la comprobacion de existencia de archivos (FILE()) por una razon muy simple, tu no estas accediendo fisicamente al disco duro del servidor remoto, sino estas escribiendo a un puerto de internet, realmente no tienes acceso fisico al disco duro remoto como seria en el caso de una vpn, con AIS tu estas leyendo y escribiendo a un puerto, lo que tu leas y escribas en el puerto sera procesado por el servidor de Advantage y de ahi enviado al disco.

Si deseas crear tablas temporales, por ejemplo para informes o cosas asi, que luego van a desaparecer, puedes hacerlo EN TU DISCO DURO LOCAL, eso se puede hacer usando el servidor local de ADS en combinacion con el servidor AIS, de hecho asi lo hacemos nosotros. Debes seleccionar el tipo de server 7, para que puedas utilizar tanto servidor local, como remoto, como AIS simultaneamente.

Si tu quieres crear tablas en el servidor, que van a ser de uso permanente, entonces puedes hacerlo via SQL con la instruccion CREATE TABLE (obviamente tienes que estar conectado al diccionario de datos).[/quote]

por acá seguro viene la solución.
Reitero mi respuesta, no son temporales, debo crear las tablas.

Respecto del argumento del porqué no se puedan crear, me ha dejado pensando un poco. Crear una tabla es solo crear uno o dos archivos en el espacio físico y nada más, no tiene más. Eventualmente se agregaría en el diccionario de datos, pero creo que tampoco es mucha información para transferir, el tráfico generado por esta operación es el mismo que se hace cuando creo un índice o bien edito o agrego un registro, por lo que no veo realmente una limitación en eso.
Y respecto de que no accedo al disco duro, cuando uso el servidor normal tampoco lo hago, para eso pongo el servidor ADS. De hecho las tablas son inaccesibles mientras el servidor las tiene abiertas (sé que se puede configurar para que si se pueda) lo que demestra que con servidor REMOTE tambien se acceden sin acceder al disco.
Si el manual dice que no es recomendable así será, pero debe haber alguna otra razón, tal vez de seguridad o algo así, no?

Con un ancho de banda limitado seguramente que habrá que realizar los procesos con mucha prudencia teniendo bien presente el ancho de banda, que todavia sigue siendo un recurso limitado.

Un saludo,

Carlos.
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: Pruebas con AIS

Postby lucasdebeltran » Sat Mar 24, 2012 11:20 am

Carlos,

Al final, ¿cómo conseguiste solucionarlo?.

Me sucede lo mismo, me funciona el dbcreate o el AdsDeleteFile con el path completo "c:\lucas\empresa01\clientes.dbf", pero no puedo hacer use "c:\lucas\empresa01\clientes".

Mil gracias.

Un saludo
Muchas gracias. Many thanks.

Un saludo, Best regards,

Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]

Implementando MSVC 2010, FWH64 y ADO.

Abandonando uso xHarbour y SQLRDD.
User avatar
lucasdebeltran
 
Posts: 1303
Joined: Tue Jul 21, 2009 8:12 am


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 35 guests

cron