O.T. Consulta ADS (SOLUCIONADO)

O.T. Consulta ADS (SOLUCIONADO)

Postby MarioG » Wed Nov 05, 2014 3:07 pm

Tengo el siguiente código
Code: Select all  Expand view  RUN
METHOD SetNvoCodCliPrv( oDbf )  CLASS TClienteProvedor
local cAlias:= oDbf:cAlias, ;
      nCodigo:= 1

   // Esto permite que no lo desconecte - AdsDisconnect()
   if "hConnect" IN h0
      if Select( "SQLSele" ) > 0
         SQLSele->( DbCloseArea() )
      end
   else
      AdsConnect(  ::oMG:hIni["CAMINOS"]["bdatos"], ::oMG:hIni["ADS"]["srvtipo"] )
      h0:hConnect:= AdsConnection()
   end
   DBSelectArea( 0 )

   if !ADSCreateSQLStatement( "SQLSele", ADS_CDX, h0:hConnect )
      MessageBox(, "Fallo en lectura de la Tabla ", "Reintente",, MB_ICONSTOP )
      return( nCodigo )
   end

                                                        // Establece DBF para SELECT
   if !ADSExecuteSQLDirect( "SELECT Count(*) FROM " +if( "CLIENTES" $ cAlias, "BDSGC18", ;
                                                     if( "PROVEDOR" $ cAlias, "BDSGC19", "" )) )
      MessageBox(, "Fallo en lectura de la Tabla ", "Reintente",, MB_ICONSTOP )
      SQLSele->( DbCloseArea() )
   else
        if SQLSele->Expr > 0
         ? nCodigo:= SQLSele->Expr +1
      end
   end

   h0["Provedor"]:SetFocus()

   return( nCodigo )
 

Esto funciona, aunque con el siguiente problema
Si ejecuto el codigo, "SELECT Count(*) FROM " +if( "CLIENTES" $ cAlias, "BDSGC18", ;
if( "PROVEDOR" $ cAlias, "BDSGC19", "" )), en el ARC
me arroja como resultado 339 (registros)
Pero al ejecutarlo en la App, me da 290 registros (considerando SQLSele->Expr)
Y esto porque sucede?, porque en la App está descartando los registros borrados. O sea es correcto desde ese punto de vista
La pregunta es porque lo considera en la App y no cuando lo hago desde el ARC?
Como hago para que me de el total de registros, incluido lo borrados?
Last edited by MarioG on Fri Nov 07, 2014 10:08 pm, edited 1 time in total.
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. Consulta ADS

Postby RSalazarU » Wed Nov 05, 2014 3:50 pm

Mario:

proba con:

Code: Select all  Expand view  RUN

local lOldSetDeleted := AdsSetDeleted( .F. )//proba con .T. y .F., por algun lado lei que esto era al reves de SET DELETE ON/OFF
if !ADSCreateSQLStatement( "SQLSele", ADS_CDX, h0:hConnect )
  :
end
AdsSetDeleted( lOldSetDeleted )
 


esto trabaja, tb, en base al estado de SET DELETE ON/OFF de tu aplicacion

Atentamente,

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

Re: O.T. Consulta ADS

Postby MarioG » Wed Nov 05, 2014 10:54 pm

Siiiii ESPECTACULAR!; esa es la forma

Impresionante el Foro!
(ya estaba pensando en un código alternativo)

muchas gracias Rolando

P.D.: Se debe declarar, como lo escribiste: AdsSetDeleted( .F. )
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. Consulta ADS

Postby RSalazarU » Thu Nov 06, 2014 1:49 am

Mario:

No tan rapido...

Existen varios problemas a este respecto, por lo que tienes que estar atento y comprender como funciona ADS.

Aca va una que me resulto dificil de comprender:

Problema:
¿ Porque en una consulta aparecen , tambien, los borrados ? (que no deberian aparecer por el SET DELETED ON)

Respuesta:
CASO 1:
Tienes una consulta como: "SELECT * FROM CLIENTES"
y defines que el resultado sera un ADS_CDX con: ADSCreateSQLStatement( "SQLSele", ADS_CDX, h0:hConnect )
resultado: TODO OK!!!

CASO 2:
Si tu consulta es algo asi como: "SELECT * FROM CLIENTES WHERE nombre LIKE 'MARI%' "
Aparecen tambien los borrados.
El resultado es un cursor estatico (por el operador LIKE), y los cursores estaticos son SI O SI ADS_ADT; por mas que en la instruccion "ADSCreateSQLStatement" le digas ADS_CDX
Al parecer, al ejecutarse la consulta, toma a la tabla origen como ADT y no filtra los eliminados.

Otros ejemplos de instruccion son : "SELECT TOP 1 * FROM CLIENTES "
En general, creo que es cuando se producen cursores estaticos

Estas son conclusiones propias, ya que no pude encontra documentacion al respecto. SERIA IDEAL que alguien nos explique el porque.


Asi que, toma en cuenta esto y no te asustes cuando aparescan los eliminados.


Atentamente,

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

Re: O.T. Consulta ADS

Postby MarioG » Fri Nov 07, 2014 10:34 am

Rolando;
muchas gracias, estaré atento
Hasta ahora no utilicé la cláusula LIKE; quizás por eso no me topé con la situación que mencionás

nuevamente, muchas gracias
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: Google [Bot] and 19 guests