O.T. Consulta ADS (SOLUCIONADO)

Post Reply
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

O.T. Consulta ADS (SOLUCIONADO)

Post by MarioG »

Tengo el siguiente código

Code: Select all

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
RSalazarU
Posts: 177
Joined: Wed Jul 16, 2008 12:59 pm
Location: Cochabamba-Bolivia
Contact:

Re: O.T. Consulta ADS

Post by RSalazarU »

Mario:

proba con:

Code: Select all

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
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: O.T. Consulta ADS

Post by MarioG »

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
RSalazarU
Posts: 177
Joined: Wed Jul 16, 2008 12:59 pm
Location: Cochabamba-Bolivia
Contact:

Re: O.T. Consulta ADS

Post by RSalazarU »

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
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: O.T. Consulta ADS

Post by MarioG »

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
Post Reply