No me deja crear un index en ADS via Internet.

Post Reply
Alex.Salas
Posts: 5
Joined: Thu Mar 15, 2012 5:09 pm

No me deja crear un index en ADS via Internet.

Post 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.
User avatar
Giovany Vecchi
Posts: 129
Joined: Mon Jun 05, 2006 9:39 pm
Location: Brasil

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

Post by Giovany Vecchi »

Posta os comandos query aqui para analize.
Alex.Salas
Posts: 5
Joined: Thu Mar 15, 2012 5:09 pm

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

Post 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.
User avatar
Giovany Vecchi
Posts: 129
Joined: Mon Jun 05, 2006 9:39 pm
Location: Brasil

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

Post 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"
Alex.Salas
Posts: 5
Joined: Thu Mar 15, 2012 5:09 pm

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

Post 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.
Post Reply