Page 1 of 1

No me deja crear un index en ADS via Internet.

PostPosted: Mon Aug 18, 2014 4:41 pm
by Alex.Salas
Buen día a todos.

Estoy realizando unas pruebas don ADS pero tengo un problema al crear un indice sobre un query cuando trabajo con una conexión remota, ejemplo, si la conexión la hacemos en una red local no tengo ningun problema, puedo crear un query y puedo crear un indice a ese resultado, pero cuando cambio la conexión para que sea atravez de internet, el query lo genera sin problema, pero al crear un indice me manda el error Error ADSADT/5004 Create error: temp39965.

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

cRuta := "\\187.xxx.xxx.xxx:2000\Base\cs.add"
AdsConnect60(cRuta,4,"demo","demo01")

Esta es la configuración y conexión que hacemos.

De antemando gracias por su atención y reciban un cordial saludo.

Re: No me deja crear un index en ADS via Internet.

PostPosted: Mon Aug 18, 2014 5:25 pm
by Giovany Vecchi
Posta os comandos query aqui para analize.

Re: No me deja crear un index en ADS via Internet.

PostPosted: Mon Aug 18, 2014 5:40 pm
by Alex.Salas
Este es el codigo que genero para mi Query:

cAlias := "CONSIG"
DbSelectArea( 0 )
AdsCreateSQLStatement(cAlias,2)
cQuery := "SELECT PROD_CON.ID_PROD, PROD_CON.REFEREN, PROD_CON.STATUS, CAT_PROD.NOM_PROD From PROD_CON, CAT_PROD WHERE CAT_PROD.ID_PROD = PROD_CON.ID_PROD"
AdsExecuteSqlDirect(cQuery)
Index On STRZERO(ID_PROD,5) TAG "ID" TO (cAlias)
Select(cAlias)
(cAlias)->(OrdSetFocus("ID"))
(cAlias)->(dbGoTop())

Repito, en una conexion de area Local, sin problemas, pero via Internet en el Index On me genera el error.

Re: No me deja crear un index en ADS via Internet.

PostPosted: Mon Aug 18, 2014 6:10 pm
by Giovany Vecchi
Alex.Salas wrote:Este es el codigo que genero para mi Query:

cAlias := "CONSIG"
DbSelectArea( 0 )
AdsCreateSQLStatement(cAlias,2)
cQuery := "SELECT PROD_CON.ID_PROD, PROD_CON.REFEREN, PROD_CON.STATUS, CAT_PROD.NOM_PROD From PROD_CON, CAT_PROD WHERE CAT_PROD.ID_PROD = PROD_CON.ID_PROD"
AdsExecuteSqlDirect(cQuery)
Index On STRZERO(ID_PROD,5) TAG "ID" TO (cAlias)
Select(cAlias)
(cAlias)->(OrdSetFocus("ID"))
(cAlias)->(dbGoTop())

Repito, en una conexion de area Local, sin problemas, pero via Internet en el Index On me genera el error.


Tenta assim
EXECUTE PROCEDURE sp_CreateIndex( "PROD_CON","PROD_CON.cdx"," STRZERO(ID_PROD,5)","ID_PROD","",2,512,"") ;

Não vejo a nescessidade de criar indices quando aplicado comandos SQL nas tabelas.
se voce quer um temporario voce pode definir # no from ex: from #MyTemp
Em logica voce pode definir a ordem com ORDER BY ID_PROD

Em tAds voce poderia colocar assim

oDb_Consig := tAds():DsNew(1)
oDb_Consig:cQrySql := "SELECT PROD_CON.ID_PROD, PROD_CON.REFEREN, PROD_CON.STATUS, CAT_PROD.NOM_PROD From PROD_CON, CAT_PROD WHERE CAT_PROD.ID_PROD = PROD_CON.ID_PROD"
oDb_Consig:lDsCursorToTemp := .T. /// Cria um temporario na maquina cliente
oDb_Consig:aFieldsTempIndex := {"ID_PROD"} // Criara o indice na tabela temporaria do campo ID_PROD
oDb_Consig:DsExecute()

Para melhorar a performace usa a clausa {STATIC}, que ADS criara uma tabela estatica sem vinculos com os Indices anexos

cQuery := "SELECT {STATIC} PROD_CON.ID_PROD, PROD_CON.REFEREN, PROD_CON.STATUS, CAT_PROD.NOM_PROD From PROD_CON, CAT_PROD WHERE CAT_PROD.ID_PROD = PROD_CON.ID_PROD"

Re: No me deja crear un index en ADS via Internet.

PostPosted: Tue Aug 19, 2014 9:12 pm
by Alex.Salas
Giovany Vecchi

Muchas gracias por tu respuesta ya intente con las opciones que mencionas, pero sigo teniendo el problema cuando es atravez de una conexión por Internet, todo marcha bien hasta que tengo que crear el indice, se que con las sentencias SQL se pueden dejar a un lado pero los utilizo para hacer las busquedas con la clase TSeekInc().

De antemano gracias.