FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour O.T. - ADSSQL
Posts: 1380
Joined: Fri Oct 14, 2005 01:28 PM
O.T. - ADSSQL
Posted: Mon Nov 19, 2012 01: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 (fw): Select all Collapse
 聽 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)
    [/list:u]
    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 (fw): Select all Collapse
    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[/list:u]
      Uso ADS 9.10

      Que estoy haciendo mal?
      Saludos
Resistencia - "Ciudad de las Esculturas"

Chaco - Argentina
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: O.T. - ADSSQL
Posted: Mon Nov 19, 2012 06:01 PM

haz un
select 0
antes de cada consulta

salu2
carlos vargas

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 1380
Joined: Fri Oct 14, 2005 01:28 PM
Re: O.T. - ADSSQL
Posted: Mon Nov 19, 2012 07: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:oMG:hIni["CAMINOS"]["bdatos"], ADS_LOCAL_SERVER )
Resistencia - "Ciudad de las Esculturas"

Chaco - Argentina
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: O.T. - ADSSQL
Posted: Mon Nov 19, 2012 08:28 PM
no es el lugar adecuado.
mira esta funcion que uso para las consultas.
Code (fw): Select all Collapse
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)
Posts: 1380
Joined: Fri Oct 14, 2005 01:28 PM
Re: O.T. - ADSSQL
Posted: 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
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: O.T. - ADSSQL
Posted: Tue Nov 20, 2012 04:42 PM
Code (fw): Select all Collapse
...
   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)
Posts: 211
Joined: Wed Jul 16, 2008 12:59 PM
Re: O.T. - ADSSQL
Posted: 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 (fw): Select all Collapse
if(select(cAlias)>0,(cAlias)->(DBCloseArea()),NIL)


En tu caso:
Code (fw): Select all Collapse
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
Posts: 1380
Joined: Fri Oct 14, 2005 01:28 PM
Re: O.T. - ADSSQL
Posted: Wed Nov 21, 2012 03:48 AM

Carlos, Rolando
gracias por las sugerencias

Resistencia - "Ciudad de las Esculturas"

Chaco - Argentina

Continue the discussion