FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour No me deja crear un index en ADS via Internet.
Posts: 5
Joined: Thu Mar 15, 2012 05:09 PM
No me deja crear un index en ADS via Internet.
Posted: Mon Aug 18, 2014 04:41 PM

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.

Posts: 244
Joined: Mon Jun 05, 2006 09:39 PM
Re: No me deja crear un index en ADS via Internet.
Posted: Mon Aug 18, 2014 05:25 PM

Posta os comandos query aqui para analize.

Posts: 5
Joined: Thu Mar 15, 2012 05:09 PM
Re: No me deja crear un index en ADS via Internet.
Posted: Mon Aug 18, 2014 05:40 PM

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.

Posts: 244
Joined: Mon Jun 05, 2006 09:39 PM
Re: No me deja crear un index en ADS via Internet.
Posted: Mon Aug 18, 2014 06:10 PM
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"
Posts: 5
Joined: Thu Mar 15, 2012 05:09 PM
Re: No me deja crear un index en ADS via Internet.
Posted: Tue Aug 19, 2014 09:12 PM
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.

Continue the discussion