problema con ads (reindex con tabla en exclusivo)

problema con ads (reindex con tabla en exclusivo)

Postby carlos vargas » Thu Jun 28, 2012 4:47 pm

Estimado, este codigo me esta fallando.

Code: Select all  Expand view

/*-------------------------------------------------------------------------------------------------*/

PROCEDURE Reorganizar()
   LOCAL cTabla
   LOCAL aTablas
   LOCAL lContinuar
   LOCAL oError, cError, n:=0

   IF !MsgNoYes( "Para realizar este proceso, ningun usuario debe estar conectado al programa, desea continuar?" )
      RETURN
   ENDIF

   IF !ADSRunSQL( "TABLAS", "SELECT * FROM SYSTEM.TABLES" )
      RETURN
   ELSE
      aTablas := {}
      TABLAS->( DBEval( {|| AAdd( aTablas, RTrim( FIELD->NAME ) ) } ), DBCloseArea() )
      IF Len( aTablas ) = 0
         TABLA->( DBCloseArea() )
         RETURN
      ENDIF
   ENDIF

   WaitOn( "Cerrando tablas..." )
   DBCloseAll()
   WaitOff()

   WaitOn( "Reorganizando datos..." )
   CursorWait()

   SELECT 1

   SET( _SET_EXCLUSIVE, TRUE )

   FOR EACH cTabla IN aTablas

      USE (cTabla) ALIAS TEMP
      ?cTabla, Alias(), OrdCount()
      IF !NetErr()
         IF TEMP->( OrdCount() ) > 0
            REINDEX
         ENDIF
      ELSE
         MsgAlert( "Error en reindexado de " + cTabla + FINL + AdsGetLastError() )
      ENDIF

      TEMP->( DBCloseArea() )

   NEXT

   SET( _SET_EXCLUSIVE, FALSE )

   CursorArrow()
   WaitOff()

   MsgRun( "Espere un momento, abriendo nuevamente tablas de datos.", "CREDICOM", {|| Conectar_AbrirTablas( TRUE, TRUE ) } )

RETURN
 

es un modulo de reindexado, el cual primero extrae con una sentencia sql una lista de las tablas contenidas en un diccionario ads,
luego esa lista de tablas es pasada a un arreglo unidimencional, el arreglo es recorrido en el bloque for..next en donde cada tabla es abierta, se verifica que no hay falla en la apertura, se consulta si tiene tag que puedan ser reindexado, y si tiene entonces se reindexa la tabla.

anteriormente esto funcionaba correctamente, pero he actualziado tanto xharbour y harbour con el last cvs y se me presenta la falla,
que la primer tabla es procesada correctamente, pero la segunda tabla, si bien es abierta, al llegar a la instruccion ordcount se dispara un fallo indicando que la tabla no esta indexada, es mas si a esa tabla le pido el alias() este me retorna un valor vacio. esto ultimo es rarisimo.

esto es asi, siempre y cuando la instrccion set exclusive on este activa, pero si set exclusive esta en off todo regresa a la normalidad pero realmente el proceso de indexado no se realiza ya que como sabemos para reindexa una tabla esta debio ser abierta exclusivamente.

podria alguen con conocimiento en ads ver por que este fallo en la aperura de la tabla en modo exlusivo, y por que alias no regresa valor, es como si la tabla no fuera abierta e un area de trabajo.

les agardesco su ayuda.
cabe aclarar que esto falla en xharbour y harbour por igual.

salu2
carlos vargas
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1700
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: problema con ads (reindex con tabla en exclusivo)

Postby Patricio Avalos Aguirre » Thu Jun 28, 2012 5:37 pm

Hola Carlos

Puedes probar este a ver si te arroja error!, es el que yo utilizo..

Code: Select all  Expand view

dbCloseAll()
aIndex := AdsDirectory()
for i := 1 to len( aIndex )
    cDbf := Left( aIndex[i], len( aIndex[i] )-1 )   
        SELE 0 ; USE (cDbf)  VIA "ADS" EXCLUSIVE NEW
    if ADSGETNUMINDEXES() > 0
        if !AdsReindex()
            MsgInfo( AdsGetLastError(), "Usuario" )
        endif
    endif
    USE
next i
dbCloseAll()
Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
User avatar
Patricio Avalos Aguirre
 
Posts: 1059
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile

Re: problema con ads (reindex con tabla en exclusivo)

Postby lucasdebeltran » Thu Jun 28, 2012 6:06 pm

Hola Carlos:

¿Y por que no usas además AdsReindex()?.
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

Re: problema con ads (reindex con tabla en exclusivo)

Postby carlos vargas » Thu Jun 28, 2012 7:56 pm

casualmente ese era el codigo que usaba anteriormente, usando la funcion adsreindex
incluso ya lo habia posteado hace un tiempo

ese codigo fallaba, lo he hecho mas simple a lo que mostre.

luego lo he modificado a lo que tengo y mostre pero ni asi. :-(

pero como dicen a la mejor mona se le cae el zapote, lo intentare y te comento en breve.

salu2
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1700
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: problema con ads (reindex con tabla en exclusivo)

Postby lucasdebeltran » Thu Jun 28, 2012 8:33 pm

Carlos:

Prueba así a ver si hay suerte:

SET AUTOPEN OFF

FOR EACH cTabla IN aTablas

USE (cTabla) EXCLUSIVE NEW ALIAS TEMP
?cTabla, Alias(), OrdCount()
IF !NetErr()
IF TEMP->( OrdCount() ) > 0
REINDEX
ENDIF
ELSE
MsgAlert( "Error en reindexado de " + cTabla + FINL + AdsGetLastError() )
ENDIF

TEMP->( DBCloseArea() )

NEXT
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

Re: problema con ads (reindex con tabla en exclusivo)

Postby carlos vargas » Thu Jun 28, 2012 9:09 pm

el ads indica error

---------------------------
tablas:zonas
---------------------------
Error 5063: The command specified is illegal within a transaction. Cannot Reindex.
---------------------------
Aceptar
---------------------------

y el oError:description indica error en apertura de archivo.

salu2
carlos vargas

Code: Select all  Expand view

PROCEDURE Reorganizar()
   LOCAL cTabla
   LOCAL aTablas
   LOCAL oError, cError, n:=0

   IF !MsgNoYes( "Para realizar este proceso, ningun usuario debe estar conectado al programa, desea continuar?" )
      RETURN
   ENDIF

   IF !ADSRunSQL( "TABLAS", "SELECT * FROM SYSTEM.TABLES" )
      RETURN
   ELSE
      aTablas := {}
      TABLAS->( DBEval( {|| AAdd( aTablas, RTrim( FIELD->NAME ) ) } ), DBCloseArea() )
      IF Len( aTablas ) = 0
         RETURN
      ENDIF
   ENDIF

   WaitOn( "Cerrando tablas..." )
   DBCloseAll()
   WaitOff()

   WaitOn( "Reorganizando datos..." )
   CursorWait()

   SET( _SET_EXCLUSIVE, TRUE )
   Set autopen off

   FOR EACH cTabla IN aTablas

      TRY
         USE (cTabla) EXCLUSIVE NEW ALIAS TEMP VIA "ADS"
         IF ADSGETNUMINDEXES() > 0
            IF !AdsReindex()
               AdsGetLastError( @cError )
               MsgInfo( cError, "tablas:" + cTabla )
            ENDIF
         ENDIF
         TEMP->( DBCloseArea() )
      CATCH oError
         DBCloseAll()
         MsgAlert( oError:description )
      END

   NEXT

   SET( _SET_EXCLUSIVE, FALSE )

   CursorArrow()
   WaitOff()

   MsgRun( "Espere un momento, abriendo nuevamente tablas de datos.", "CREDICOM", {|| Conectar_AbrirTablas( TRUE, TRUE ) } )

RETURN
 
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1700
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: problema con ads (reindex con tabla en exclusivo)

Postby carlos vargas » Thu Jun 28, 2012 9:14 pm

Lucas, si a ti te funciona bien tu codigo, podriamos intentar usar tu xharbour para ver si pasa
podrias comprimir tu xharbour y subirlo a algunsito, solo lo basico del compilador.

que yo nunca mantego una version previa.
estoy seguro que esto funcionaba muy bien hace unos dos meses, creo que era la version 1.21 rev 9244
o algo asi.

salu2
carlos vargas
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1700
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: problema con ads (reindex con tabla en exclusivo)

Postby lucasdebeltran » Thu Jun 28, 2012 9:26 pm

Carlos,

Yo uso el Harbour suministrado por Fivetech.

En principio no he detectado problemas.

¿Por qué no pruebas con Harbour?.
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

Re: problema con ads (reindex con tabla en exclusivo)

Postby carlos vargas » Thu Jun 28, 2012 9:33 pm

eh bajado el xharbour de xharbour.org el oficial.

eh cambiado el codigo a:
PROCEDURE Reorganizar()
LOCAL cTabla, aTablas
LOCAL lContinuar
LOCAL oError, cError, n:=0

IF !MsgNoYes( "Para realizar este proceso, ningun usuario debe estar conectado al programa, desea continuar?" )
RETURN
ENDIF

IF !ADSRunSQL( "TABLAS", "SELECT * FROM SYSTEM.TABLES" )
RETURN
ELSE
aTablas := {}
TABLAS->( DBEval( {|| AAdd( aTablas, RTrim( FIELD->NAME ) ) } ), DBCloseArea() )
IF Len( aTablas ) = 0
RETURN
ENDIF
ENDIF

WaitOn( "Cerrando tablas..." )
DBCloseAll()
WaitOff()

WaitOn( "Reorganizando datos..." )
CursorWait()

SET( _SET_EXCLUSIVE, TRUE )

lContinuar := TRUE

FOR EACH cTabla IN aTablas

IF !lContinuar
EXIT
ENDIF

TRY
USE (cTabla) EXCLUSIVE NEW ALIAS TEMP VIA "ADS"
IF AdsGetNumIndexes() > 0
IF !AdsReindex()
AdsGetLastError( @cError )
ENDIF
ENDIF
TEMP->( DBCloseArea() )
CATCH oError
lContinuar := FALSE
MsgAlert( oError:description + FINL + cError, "Error en tabla:" + cTabla )
DBCloseAll()
END

NEXT

SET( _SET_EXCLUSIVE, FALSE )

CursorArrow()
WaitOff()

MsgRun( "Espere un momento, abriendo nuevamente tablas de datos.", "CREDICOM", {|| Conectar_AbrirTablas( TRUE, TRUE ) } )

RETURN


me da el error

---------------------------
Error en tabla:usuarios
---------------------------
Error de apertura

Error 5063: The command specified is illegal within a transaction. Cannot Reindex.
---------------------------
Aceptar
---------------------------
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1700
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: problema con ads (reindex con tabla en exclusivo)

Postby Patricio Avalos Aguirre » Thu Jun 28, 2012 9:37 pm

Hola

A veces puede ser problema del mismo diccionario de datos

prueba sacar la tabla del diccionario y luego ingresarla..
Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
User avatar
Patricio Avalos Aguirre
 
Posts: 1059
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile

Re: problema con ads (reindex con tabla en exclusivo)

Postby RSalazarU » Fri Jun 29, 2012 1:53 am

Carlos:

Creo que deberias cerrar la primera consulta (donde obtienes los nombres de las tablas), y luego recien reindexar.

Tb, verifica que no exista alguna consulta abierta ( a veces uno hace consultas y no las cierra) y se produce este tipo de errores. A mi me sucede con frecuencia.

Atentamente

Rolando

Cochabamba, Bolivia
RSalazarU
 
Posts: 211
Joined: Wed Jul 16, 2008 12:59 pm
Location: Cochabamba-Bolivia

Re: problema con ads (reindex con tabla en exclusivo)

Postby carlos vargas » Fri Jun 29, 2012 3:42 am

si cierro la consulta
Code: Select all  Expand view
TABLAS->( DBEval( {|| AAdd( aTablas, RTrim( FIELD->NAME ) ) } ), DBCloseArea() )


es mas, mas adelante tengo un dbcloseall()

tambien he probado con harbour.

lo que probare es sacar la tabla y luego ingresarla de nuevo, no vayan por ahi los tiros, que el dd este corrupto.

lo hare y les comento.

saludos
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1700
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: problema con ads (reindex con tabla en exclusivo)

Postby fgondi » Fri Jun 29, 2012 6:51 am

¿Usas ADS Server?

Si es así también puedes utilizar la siguiente sentencia SQL:
Code: Select all  Expand view
EXECUTE PROCEDURE sp_Reindex( 'Nombre_de_la_tabla', 0 );
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Re: problema con ads (reindex con tabla en exclusivo)

Postby carlos vargas » Sun Jul 01, 2012 1:21 am

pues he probado el codigo en modo cliente servidor (remoto e internet) y ahi si funciona sin ningun problema.
el problema lo da en forma local. :-(
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1700
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 66 guests