O.T. - ADSSQL

O.T. - ADSSQL

Postby MarioG » Mon Nov 19, 2012 1:29 pm

Estimados;
Tengo un arch. DBF con un campo logico que es puesto en falso al iniciar la aplicacion. Lo hago de la siguiente manera:
Code: Select all  Expand view
  DBSelectArea( 0 )
   AdsConnect(  h0:oRut:oMG:hIni["CAMINOS"]["bdatos"], ADS_LOCAL_SERVER )

   if !ADSCreateSQLStatement( "SQLArt", ADS_CDX )
      MsgStop( "Fallo en la conexión a "+h1["Articulos"]:cAlias, "Reintente..." )
      AdsDisconnect()
      return( nil )
   end

   if !ADSExecuteSQLDirect( "SELECT Count(*) FROM BDCA02 WHERE FTag01=.T." )
      MsgStop( "Fallo en la Tabla de Articulos", "Reintente..." )
      SQLArt->( DbCloseArea() )
   else
      if !Empty( SQLArt->Expr )
         SQLArt->( DbCloseArea() )
         ADSCreateSQLStatement( "SQLArt", ADS_CDX )
         ADSExecuteSQLDirect( "UPDATE BDCA02 SET FTag01=.f. WHERE FTag01=.T." )
      end
   end
   AdsDisconnect()
 


Esto funciona correctamente al inicio de la aplicacion. Pero al invocarlo, en una 2da ocasión (luego de que cierto proceso puso este campo en TRUE para varios registros), me arroja el siguiente error:
    Descripción de Error generado:
    ___________________________________________________
    Error DBCMD/1011 Alias actualmente en uso: SQLArt

    Llamadas al Stack:
    ___________________________________________________
    Llamado desde: ADSCREATESQLSTATEMENT(0)
    Llamado desde: D:\Fuen32\SiGeCoM\ComunM\TRutSGCM.prg TRUTSGCM:CHKTAGSLSTPRC(177)
Lo que no entiendo ya que la última instrucción es la llamada a la funcion AdsDisconnect()
Buscando en el foro encuentro que a esta función se le puede invocar pasando el parametro:
Code: Select all  Expand view
AdsDisconnect( AdsGetConnectionHandle() )

Ahora bien, si yo incluyo tal funcion, al compilar, me arroja el siguiene error:
    Error: Unresolved external '_HB_FUN_ADSGETCONNECTIONHANDLE' referenced from D:\FUEN32\SIGECOM\GENP32\RELEASE\TRUTSGCM.OBJ
Uso ADS 9.10

Que estoy haciendo mal?
Saludos
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: O.T. - ADSSQL

Postby carlos vargas » Mon Nov 19, 2012 6:01 pm

haz un
select 0
antes de cada consulta

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

Re: O.T. - ADSSQL

Postby MarioG » Mon Nov 19, 2012 7:27 pm

Carlos, graicas por responder
Lo hago en la primer línea
MarioG wrote:Estimados;
Tengo un arch. DBF con un campo logico que es puesto en falso al iniciar la aplicacion. Lo hago de la siguiente manera:
DBSelectArea( 0 )
AdsConnect(  h0:oRut:oMG:hIni["CAMINOS"]["bdatos"], ADS_LOCAL_SERVER )
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: O.T. - ADSSQL

Postby carlos vargas » Mon Nov 19, 2012 8:28 pm

no es el lugar adecuado.
mira esta funcion que uso para las consultas.
Code: Select all  Expand view

FUNCTION ADSRunSQL( cAlias, cSql, aParameters, hConnection, lShow )
   LOCAL cOldAlias  := Alias()
   LOCAL lOldDelete := AdsSetDeleted( .F. )
   LOCAL lCreate    := FALSE
   LOCAL cError     := ""
   LOCAL xParameter

   DEFAULT hConnection := hConexion
   DEFAULT lShow       := FALSE

   IF !Empty( cAlias ) .and. !Empty( cSql )  .and. hConnection > 0

      cSql := StrTran( cSql, ";", "" )

      IF SELECT( cAlias ) > 0
         (cAlias)->( DBCloseArea() )
      ENDIF

      DBSelectArea( 0 )

      IF !AdsCreateSqlStatement( cAlias, ADS_CDX, hConnection )
         MsgAlert( "Error AdsCreateSqlStatement()" + FINL + "Error: " + cValtoChar( AdsGetLastError() ) )
      ELSE
         IF !HB_IsNil( aParameters ) .and. HB_IsArray( aParameters )
            FOR EACH xParameter IN aParameters
               cSql  := StrTran( cSql, "%" + AllTrim( Str( HB_EnumIndex() ) ), Var2Str( xParameter ) )
            NEXT
         ENDIF
         IIf( lShow, KDSDebug( cSql ), NIL)
         IF !AdsExecuteSqlDirect( cSql )
            AdsGetLastError( @cError )
            LogFile( "adssqlerror.log", { cSql, FINL, cError } )
            MsgAlert( "Error AdsExecuteSqlDirect()" + FINL + "Error:" + cError + FINL + cSql )
         ELSE
            lCreate := TRUE
         ENDIF
      ENDIF
      IF !lCreate .and. SELECT( cAlias ) > 0
         (cAlias)->( DBCloseArea() )
      ENDIF
      IF !Empty( cOldAlias )
         DBSelectArea( cOldAlias )
      ENDIF
   ELSE
      MsgAlert( "No definio workarea para la consulta, o no definio una consulta." )
   ENDIF
   
   AdsSetDeleted( lOldDelete )

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

Re: O.T. - ADSSQL

Postby MarioG » Tue Nov 20, 2012 10:51 am

Carlos;
Entendido, una consulta mas: Para desconectarte, Disconnect(), donde lo haces?
Como mi rutina, la tome de otro sample, conecto al inicio de la consulta y desconecto inmediatamente despues de ella (y me está ocurriendo lo comentado). Quizás no sea necesario.
Cual es tu criterio?
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: O.T. - ADSSQL

Postby carlos vargas » Tue Nov 20, 2012 4:42 pm

Code: Select all  Expand view

...
   ACTIVATE WINDOW oMainWnd MAXIMIZED VALID MsgNoYes( "Desea salir de la aplicación?" )

   Main_Cerrar()
...

/*------------------------------------------------------------------------------*/
PROCEDURE Main_Cerrar()

   oFont:END()
   oFontD:END()

   DBCloseAll()

   IF !HB_IsNil( hConexion ) .and. hConexion > 0
      AdsDisconnect( hConexion )
      hConexion := NIL
   ENDIF

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

Re: O.T. - ADSSQL

Postby RSalazarU » Wed Nov 21, 2012 12:08 am

Mario:

Antes de ejecutar la segunda vez cierra el Area abierta anteriomente, el mensaje de error esta claro:

...Alias actualmente en uso: SQLArt

Coloca SQLArt->(DBClseArea()) en el lugar adecuado.

Yo uso algo asi :
Code: Select all  Expand view

if(select(cAlias)>0,(cAlias)->(DBCloseArea()),NIL)
 


En tu caso:
Code: Select all  Expand view

if(select("SQLArt")>0,SQLArt->(DBCloseArea()),NIL)
 


No es necesario conectar y desconectar, eso solo se hace al inico y al final de la aplicacion.

Atentamente

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

Re: O.T. - ADSSQL

Postby MarioG » Wed Nov 21, 2012 3:48 am

Carlos, Rolando
gracias por las sugerencias
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 24 guests