Page 1 of 2
lentitud xBrowse y ADS
![Post Post](./styles/prosilver/imageset/icon_post_target.gif)
Posted:
Tue Mar 13, 2012 3:18 pm
by lucasdebeltran
Hola compañeros:
Estoy haciendo unas pruebas con ADS, especialmente para acceder a través de Internet. Todo funciona relativamente bién excepto los xBrowses.
Los que lo usáis, por favor, ¿me podríais indicar algún tip?.
Este es el código que uso:
Mil gracias!!.
- Code: Select all Expand view
FUNCTION MAIN()
[...]
// Sets generales---------------------------------------------------------
SetGetColorFocus()
SET EPOCH TO 1990
SET CENTURY ON
SET DATE ITALIAN
SET DELETED ON
SetCancel( .F. )
SetDialogEsc( .F. )
SET( _SET_INSERT, .T. )
Request ADS,ADSKeyCount,ADSKeyNo,OrdKeyCount,OrdKeyNo, AdsGetRelKeyPos, AdsSetRelKeyPos
RddRegister( "ADS", 1 )
RddSetDefault( "ADS" )
//setting up server type
// 1 = Local Server (no client / server)
// 2 = Remote Server
// 3 = Local + Remot
// 4 = Internet Server
// 5 = Local + Internet
// 6 = Remote+Internet
// 7 = Local + Remote + Internet , best choice
adsSetServerType( 4 ) // ó adsSetServerType( ADS_REMOTE_SERVER )
//setting up the file types
// 1 = DBFNTX
// 2 = DBFCDX
// 3 = ADSADI
adsSetFileType( ADS_CDX ) // o ADS_CDX
// -------------------------------------------------------------------------
// Opening DBF FILES
[...]
SELECT 5
USE (cMyPath+"FACTURAS") INDEX (cMyPath+"FACTURAS") SHARED NEW ALIAS "FACTURAS"
// INDEXING
[...]
USE (cMyPath+"FACTURAS") EXCLUSIVE NEW
DELETE ALL FOR EMPTY( FIELD->NUMERO )
PACK
INDEX ON FIELD->NUMERO TO (cMyPath+"FACTURAS")
DbCloseAll()
Re: lentitud xBrowse y ADS
![Post Post](./styles/prosilver/imageset/icon_post_target.gif)
Posted:
Tue Mar 13, 2012 8:04 pm
by Patricio Avalos Aguirre
hola
Si pretendes que los browse en internet se comporten como en la red local, imposible...
utiliza consultas sql y los datos lo pasas a un arreglo o dbftmp para tener el acceso red local, de lo contrario
solo lentitud..
Re: lentitud xBrowse y ADS
![Post Post](./styles/prosilver/imageset/icon_post_target.gif)
Posted:
Tue Mar 13, 2012 8:44 pm
by lucasdebeltran
Hola,
Muchas gracias por contestar. He visto en un post de Mr. Nages que hay que poner el SET DELETED OFF.
En este caso sí que hay un ligero aumento de velocidad.
Pero entonces, ¿cómo debo construir los índices?.
¿Así?.
INDEX ON FIELD->NUMERO TO (cMyPath+"PEDIDOS") FOR !Deleted()
Y si los xBrowses van superlentos, ¿cómo usáis ADS en una VPN por ejemplo?.
Muchas gracias nuevamente.
Re: lentitud xBrowse y ADS
![Post Post](./styles/prosilver/imageset/icon_post_target.gif)
Posted:
Tue Mar 13, 2012 9:49 pm
by Patricio Avalos Aguirre
Lucas
si quiere aumento en Ads debes
1. Utilizar tablas ADT que es geniuno de ADS ( ojo las tablas ADT no funciona set delete ya no no aplica para estas tablas ), si borra un registro adios para siempre
![Smile :-)](./images/smilies/icon_smile.gif)
)
2.-Utilizar comando SQL
3.- Si utilizas browse,utlizar Arreglos o dbfTmp para que los datos los procese de tu computador y no del servidor
ya que ahi en donde se relentiza en buscar los datos por internet..
un ejemplo mas menos asi
- Code: Select all Expand view
cSql := "Select campo1, campo2, campo3 from BASE WHERE campo3 ='FAC'"
SqlEjecute( "BaseSQL", cSql )
IF (nCanreg := BaseSQL->( LASTREC() )) > 0
aArray := Array( nCanreg,3 )
for i := 1 to nCanReg
aArray[i,1] := BaseSQL->Campo1
aArray[i,2] := BaseSQL->Campo2
aArray[i,3] := BaseSQL->Campo3
Next i
//aqui tu browse preferido..
endif
BaseSQL->( dbCloseArea() )
- Code: Select all Expand view
//--------------
#include "ads.ch"
function SqlEjecute( cNewAlias, cSql, hConnection )
local cAlias := ALIAS(), lReturn := .t.
DEFAULT hConnection := ViewUsu():hConnection
Select 0
if !AdsCreateSqlStatement( (cNewAlias), ADS_CDX, hConnection )
MsgInfo("error AdsCreateSqlStatement()" + CRLF + "Error:"+cValtochar( AdsGetLastError() ) )
lReturn := .f.
endif
if lReturn .and. !AdsExecuteSqlDirect(cSql)
(cNewAlias)->( dbCloseArea() )
lReturn := .f.
MsgInfo("error AdsExecuteSqlDirect(cSql)" + CRLF + "Error:"+cValtochar( AdsGetLastError() ) + CRLF + cSql )
if file( "c:\SqlError.txt" )
ferase( "c:\SqlError.txt" )
endif
Logfile( "c:\sqlError.txt", { cSql } )
endif
if !empty( cAlias )
select (cAlias)
endif
hConnection := NIL
return( lReturn )
//---------------------------------------------------------------------------------------
pd. por eso en varios post de SQL hablan de cambiar el chip del los DBF, a mi aún me cuesta
![Smile :-)](./images/smilies/icon_smile.gif)
jeje
Re: lentitud xBrowse y ADS
![Post Post](./styles/prosilver/imageset/icon_post_target.gif)
Posted:
Wed Mar 14, 2012 11:47 am
by lucasdebeltran
Muchas gracias.
Sí, al final no voy a tener más remedio.
Otra duda, en modo local los índices se crean del tipo .idx pero con AIS y un Diccionario son .cdx.
¿Sabes por qué sucede ésto?.
En ambos casos tengo adsSetFileType( ADS_CDX )
Re: lentitud xBrowse y ADS
![Post Post](./styles/prosilver/imageset/icon_post_target.gif)
Posted:
Wed Mar 14, 2012 1:57 pm
by Patricio Avalos Aguirre
Yo utilizo siempre diccionario de datos para ambos , local o servidor
y te ahorras de colocar la ruta de la tabla
- Code: Select all Expand view
/*
// Opening DBF FILES
[...]
SELECT 5
USE "FACTURAS" INDEX "FACTURAS" SHARED NEW ALIAS "FACTURAS"
*/
- Code: Select all Expand view
Init Procedure Inicio()
local hConnection := 0, lConecte
SET MULTIPLE ON
SET EPOCH TO 1950 // Admite los años desde el 1990 en adelante
SET CONFIRM ON
SET CENTURY ON // 4 d¡gitos a¤o
SET DATE FORMAT "DD/MM/YYYY" // formato dd-mm-yyyy
AdsSetDeleted( .t. )
SetHandleCount( 150 ) // M ximo n§ ficheros abiertos
SET _3DLOOK ON
SET AUTOPEN OFF
oApp := MyApp():Load()
rddRegister( "ADS", 1 )
rddsetdefault( "ADS" )
/*
VAR AdsServer AS NUMERIC INIT "\\SERVIDOR\SHARED\DICDATO.ADD"
VAR AdsConnect AS NUMERIC INIT ADS_REMOTE_SERVER //ADS_LOCAL_SERVER
VAR hConnection AS NUMERIC INIT 0
*/
AdsSetServerType( oApp:AdsConnect )
MsgRun( "Espere un momento, Conectando con el Servidor", "Win-Facturación",;
{ || lConecte := AdsConnect60( oApp:AdsServer, oApp:AdsConnect, "adssys", "pass",, @hConnection ) } )
if !lConecte
MsgInfo( "Hay problemas en el servidor"+CRLF+"intente mas tarde", "usuario" )
MsgInfo( "Error:"+cValtochar( AdsGetLastError() )+CRLF +;
"Servidor:"+oApp:AdsServer, "Usuario" )
PostQuitMessage(0)
QUIT
return
endif
oApp:hConnection := hConnection
hConnection := NIL
AdsSetFileType( ADS_CDX )
AdsLocking( .t. )
AdsRightsCheck( .f. )
return
Re: lentitud xBrowse y ADS
![Post Post](./styles/prosilver/imageset/icon_post_target.gif)
Posted:
Wed Mar 14, 2012 3:22 pm
by lucasdebeltran
Patricio,
Muchas gracias por tu respuesta.
El problema de los diccionarios es que tienes que añadir las tablas previamente.
Y sobre todo, ¿qué pasa cuando tienes varias empresas?. En todas hay un CLIENTES.DBF.
Y lo de la diferencia de índice, idx y cdx, ¿sabes por qué puede ser?.
Muchas gracias nuevo.
Salu2
Re: lentitud xBrowse y ADS
![Post Post](./styles/prosilver/imageset/icon_post_target.gif)
Posted:
Wed Mar 14, 2012 3:45 pm
by JavierVital
Que tal Lucas
Yo tengo un sistema, trabajando en 2 empresas, una con dd y otra sin. y los
2 utilizan .ADI para los indices.
Saludos.
Re: lentitud xBrowse y ADS
![Post Post](./styles/prosilver/imageset/icon_post_target.gif)
Posted:
Wed Mar 14, 2012 3:50 pm
by lucasdebeltran
Javier,
¿Y cómo haces para especificar el tipo de índice?.
Yo con el mismo código, el que he puesto antes, en modo local usa .idx y con DD .cdx. No lo entiendo.
Gracias!!!!!!!!!.
Re: lentitud xBrowse y ADS
![Post Post](./styles/prosilver/imageset/icon_post_target.gif)
Posted:
Wed Mar 14, 2012 4:18 pm
by JavierVital
Lucas asi abro el inicial :
- Code: Select all Expand view
REQUEST HB_LANG_ES
REQUEST DBFCDX, DBFFPT
REQUEST ADS,ADSKeyCount,ADSKeyNo,OrdKeyCount,OrdKeyNo,OrdKeyGoto,AdsGetRelKeyPos,AdsSetRelKeyPos
RddRegister( "ADS", 1 )
RddSetDefault("ADS")
AdsSetServerType(7)
AdsSetFileType(3)
AdsRightsCheck( .F. )
DO CASE
CASE nNEmpresa = 1
IF AdsConnect60( cPathSer, 7,"ADSSYS","CORONA",,@hDD1)
MsgRun("->Abriendo archivos ... / Opening files...","Por favor espere / Please Wait",{|| IF(ABRE_PRIMEROS(),.T.,Cerrar()) })
ELSE
MsgStop("Se ha rechazado la conexión al servidor de >> ABARROTERA LA CORONA, S.A. DE C.V. << , por favor intente mas tarde"+CRLF+CRLF+;
"ADS Error")
QUIT
ENDIF
CASE nNEmpresa = 2
ADSConnect(cPathDAT)
MsgRun("Abriendo archivos ... / Opening files...","Por favor espere / Please Wait",{|| IF(ABRE_PRIMEROS(),.T.,Cerrar()) })
ENDCASE
Re: lentitud xBrowse y ADS
![Post Post](./styles/prosilver/imageset/icon_post_target.gif)
Posted:
Wed Mar 14, 2012 4:21 pm
by lucasdebeltran
Ah, pero veo que sólo tienes una empresa.
Imagina que tienes tres, luego necesitas 3 diccionarios, uno por cada una.
Y ¿cómo creas los índices por favor?.
Muchas gracias.
Re: lentitud xBrowse y ADS
![Post Post](./styles/prosilver/imageset/icon_post_target.gif)
Posted:
Wed Mar 14, 2012 4:24 pm
by JavierVital
ahi tengo 2 empresas, una con dd y otra SIN.,
Yo creo que por cada empresa ocuparias diferentes dd con sus respectivos paths
Re: lentitud xBrowse y ADS
![Post Post](./styles/prosilver/imageset/icon_post_target.gif)
Posted:
Wed Mar 14, 2012 4:30 pm
by JavierVital
Yo creo que asi ,
ya cuando tengas un monton de empresas pues seria de otra forma.
- Code: Select all Expand view
DO CASE
CASE nNEmpresa = 1 // Con DD
cPathSer := DiskName()+":\"+CurDir(DiskName()+":")+"\EMPRESA1.ADD"
IF AdsConnect60( cPathSer, 7,"ADSSYS","CORONA",,@hDD1)
MsgRun("->Abriendo archivos ... / Opening files...","Por favor espere / Please Wait",{|| IF(ABRE_PRIMEROS(),.T.,Cerrar()) })
ELSE
MsgStop("Se ha rechazado la conexión al servidor de >> EMPRESA 1 << , por favor intente mas tarde"+CRLF+CRLF+;
"ADS Error")
QUIT
ENDIF
CASE nNEmpresa = 2 // SIN DD
cPathSer := DiskName()+":\"+CurDir(DiskName()+":")+"\datos\"
ADSConnect(cPathSer)
MsgRun("Abriendo archivos ... / Opening files...","Por favor espere / Please Wait",{|| IF(ABRE_PRIMEROS(),.T.,Cerrar()) })
CASE nNEmpresa = 3 // Con DD
cPathSer := DiskName()+":\"+CurDir(DiskName()+":")+"\EMPRESA3.ADD"
IF AdsConnect60( cPathSer, 7,"ADSSYS","CORONA",,@hDD1)
MsgRun("->Abriendo archivos ... / Opening files...","Por favor espere / Please Wait",{|| IF(ABRE_PRIMEROS(),.T.,Cerrar()) })
ELSE
MsgStop("Se ha rechazado la conexión al servidor de >> EMPRESA 3 << , por favor intente mas tarde"+CRLF+CRLF+;
"ADS Error")
QUIT
ENDIF
CASE nNEmpresa = 4 // Con DD
cPathSer := DiskName()+":\"+CurDir(DiskName()+":")+"\EMPRESA4.ADD"
IF AdsConnect60( cPathSer, 7,"ADSSYS","CORONA",,@hDD1)
MsgRun("->Abriendo archivos ... / Opening files...","Por favor espere / Please Wait",{|| IF(ABRE_PRIMEROS(),.T.,Cerrar()) })
ELSE
MsgStop("Se ha rechazado la conexión al servidor de >> EMPRESA 3 << , por favor intente mas tarde"+CRLF+CRLF+;
"ADS Error")
QUIT
ENDIF
ENDCASE
Re: lentitud xBrowse y ADS
![Post Post](./styles/prosilver/imageset/icon_post_target.gif)
Posted:
Thu Mar 15, 2012 8:43 am
by Carles
Lucas,
Te recomiendo un cambio de enfoque para usar los xbrowser con ADS. Funcionan ? Si claro, pero piensa que contantemente se esta realizando consultas al server y ralentiza mucho el proceso. A mi entender y mi pobre experiencia me dice que lo mejor es atacar un server y que devuelva los registros a procesar. Estos seran tratados a nivel local via array, y cualquier modificacion envias posteriormente al server. De hecho, es muy parecido a como trabajar via SQL. Ahora, si queremos estar constantemente enganchados, notaras esta perdida de rendimiento.
Sobre el tema de trabajar con registros set deleted on...
Mirate ->
viewtopic.php?f=3&t=9343&hilit=ADS#p85272 por si te sirve de algo... ya me "pelee" en su dia con Mr. Nagues. jajaja
Re: lentitud xBrowse y ADS
![Post Post](./styles/prosilver/imageset/icon_post_target.gif)
Posted:
Thu Mar 15, 2012 10:53 am
by lucasdebeltran
Carles,
Muchas gracias por responder.
Sí, vi el post tuyo pero no lo acabé de entender.
Desde luego, he activado SET DELETED OFF y creo los índices con FOR !Deleted(). Pero de esto último Mr. Nages no dice nada.
Tampoco sé al final después de las observaciones de Mr. Nages cómo trabajas realmente, pues él te hizo algunos comentarios. ¿Cómo quedó al final la cosa?.
Al final efectivamente tendré que migrar a SQL, pero hay que reeescribir mucho código lamentablemente.
¿Tu usas AIS via Internet?.
Un saludo y mil gracias