TxBrowse y ADS query - SOLUCIONADO

Re: TxBrowse y ADS query - Necesito Ayuda

Postby rolando » Wed Jul 18, 2012 4:54 pm

Carlos y Rolando,

INCREIBLE, sólo eso puedo decir, creo que han "dado en el clavo".

Con sólo colocar "{static}" al SELECT, ya la cosa mejoró notablemente y, si bién no iguala la velocidad del ARCHITECT, se le acerca mucho.

Ahora debo definir que usar, porque tenía todo hecho para usar un array pero al hacer xBrowse() (ver mi último ejemplo), lo que estoy haciendo es hojear el alias abierto.

Uso una sola vez el xBrowse para hojear DBF's y uso la clase TDataBase. ¿Como debería hacer para asignarle al xBrowse el alias {static} creado con el query?

Gracias

Rolando :D
User avatar
rolando
 
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: TxBrowse y ADS query - Necesito Ayuda

Postby rolando » Wed Jul 18, 2012 5:45 pm

Me respondo a mí mismo.

Estaba tan enfrascado en este problema que no me dí cuenta, al releer mi último post me dí cuenta que seguramente es de lo más sencillo.

Por ahora estoy en mi trabajo y sólo pude probar pero creo que funcionará con hacer un

Code: Select all  Expand view
Database:oDbf


Y listo, ahora se puede tratar el alias como un objeto oDbf, por lo menos hice para probar:

Code: Select all  Expand view
oDbf:goto(10)
msginfo(oDbf:NOMBRE)


Y funciona ok.

Pruebo luego en casa y comento.

Saludos.

Rolando :D
User avatar
rolando
 
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: TxBrowse y ADS query - SOLUCIONADO

Postby rolando » Fri Jul 20, 2012 1:51 am

Listo,

Agradezco a todos los que ayudaron para que solucione esta cuestión.

Como dije en mi post anterior, pasé el area del query a un oDbf usando la clase TDatabase.

Luego de esto creo índices temporales para cada campo y puedo hacer un xBrowse en el cual indexar al presionar sobre cada cabecera, tal cual se hace normalmente con una dbf.

El único inconveniente que tengo es que el query lleva el "{static}" para ser más rápido y eso evita que el recno() de cada registro no sea el real de la DBF sino que sea el de la oDbf creada. Pero eso, para editar un registro sobre la DBF, lo supero haciendo un seek a la DBF y listo.

Gracias.

Rolando :D
User avatar
rolando
 
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: TxBrowse y ADS query - SOLUCIONADO

Postby Patricio Avalos Aguirre » Fri Jul 20, 2012 1:23 pm

Hola Rolando

Podrias mostrar es de crear indices temporales?
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: 1060
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile

Re: TxBrowse y ADS query - SOLUCIONADO

Postby rolando » Fri Jul 20, 2012 4:23 pm

Patricio,

Te muestro a continuación un ejemplo básico de como uso la TDatabase con un área abierta por un query ADS.

Code: Select all  Expand view
#INCLUDE "FIVEWIN.Ch"
#include "xbrowse.ch"
#include "ADS.CH"


REQUEST HB_LANG_ES
REQUEST DBFCDX, DBFFPT
REQUEST ADS,ADSKeyCount,ADSKeyNo,OrdKeyCount,OrdKeyNo, AdsGetRelKeyPos, AdsSetRelKeyPos,DBFCDX

Function PruebaADS()

local cCarpetaInstalacion:="\\Asus\d\VERCE\RJCTaller" , cFechaDesde:="01/01/1976" , cFechaHasta:="01/07/2012"
local cServer  := cCarpetaInstalacion+"\DBF's\"
local lConect:=.f. , oBrush , oCur1

cConsulta1:="
Select {static} TALON, NOMBRE, DIRECCION, LOCALIDAD, BARRIO, CODPOSTAL, TELEFONO1, TELEFONO2, "+;
              "
CELULAR, EMAIL, ARTEFACTO, MARCA, MODELO, SERIE, UBICADO, FECHAIN, "+ ;
              "
FECHALIQUI, FINALIZADO, RETIRO, FECHA_COM, DETALLECL, DETALLETA, "+;
                            "
ESTADO, DEALER, GARANTIZA, STATUS from TRABAJOS where "+;
                            "
(FECHAIN>='"+cFechaDesde+"' and FECHAIN<='"+cFechaHasta+"'"+;
                            "
or "+;
                            "
FECHALIQUI>='"+cFechaDesde+"' and FECHALIQUI<='"+cFechaHasta+"'"+;
                            "
or "+;
                            "
RETIRO>='"+cFechaDesde+"' and RETIRO<='"+cFechaHasta+"')"

        ADSSETDATEFORMAT("
DD/MM/YYYY")       // agregado por sugerencia foro fwh
        RddRegister("
ADS",1)
    RddSetDefault("
ADS")
    AdsSetServerType ( 2 )
    SET FILETYPE TO CDX

        DbSelectArea( 0 )             // agregado por MArio

    AdsConnect( cServer , 2 )

     IF ! ADSCreateSQLStatement("
SQLarea",2)  // 2 == ADS_CDX
       MsgAlert( "
ADSCreateSQLStatement('SQLarea',2)" )
       RETU .F.
   ENDIF


     if ADSExecuteSQLDirect( cConsulta1 )


     DATABASE oDbf            // asigno el area abierta del query a el objeto oDbf
                                                        // la clase Tdatabase

     define brush oBrush resource "
GRAY"                            //"WATER2"
     define cursor oCur1 resource 222
     define dialog oDlg resource "
LISTARREGIS_XBR" brush oBrush transparent of oWnd

          oBrw := TXBrowse():New( oDlg )
            oBrw:CreateFromResource( 4001 )
            oBrw:SetoDbf( oDbf )
            oBrw:bClrStd:={||{nrgb(0,0,0),nRGB(243,250,200)}}
            oBrw:nRowHeight:=20
            oBrw:lContrastClr := .f.       // para evitar que los caracteres salgan aleatoriamente con otra tinta


            oCol                                := oBrw:AddCol()
            oCol:cHeader        := "
TALON"
            oCol:bStrData       := { || oDbf:TALON }
            oCol:nHeadStrAlign  := AL_CENTER
            oCol:nDataStrAlign  := AL_LEFT
            oCol:nWidth         := 60
            oCol:bLClickHeader:= {|| nRecno:=oDbf:recno() ,;
                                     oDbf:CreateIndex( cCarpetaInstalacion+"
\DBF's\TEMP.CDX", "TALON", "TALON") , ;
                                     oDbf:goto(nRecno) , oBrw:refresh() }

                                // con el CreateIndex() genero un indice cada vez que se presiona sobre la cabecera
                                // Hay otra manera de hacerlo pero siempre me indexa por la columna 1
                                // (será la versión de FWH que uso - la 10.04)
                                // y luego hago que vuelva a la línea en que estaba al indexar
                                // sólo copio dos columnas de xBrowse a modo de ejemplo porque son todas iguales


            oCol                                := oBrw:AddCol()
            oCol:cHeader        := "NOMBRE"
            oCol:bStrData       := { || oDbf:NOMBRE }
            oCol:nHeadStrAlign  := AL_CENTER
            oCol:nDataStrAlign  := AL_LEFT
            oCol:nWidth         := 230
            oCol:bLClickHeader:= {||nRecno:=oDbf:recno() , ;
                                   oDbf:CreateIndex( cCarpetaInstalacion+"\DBF'
s\TEMP.CDX", "NOMBRE", "NOMBRE") ,;
                                   oDbf:goto(nRecno) , oBrw:refresh() }



     Activate dialog oDlg center on init {||oBrw:setfocus(), oBrw:refresh()  }



     endif // de if ADSExecuteSQLDirect( cConsulta1 )


        AdsDisconnect()
    sqlarea -> ( dbclosearea() )

    Return nil


Lo más importante de todo está en esto:

Code: Select all  Expand view
oCol:bLClickHeader:= {|| nRecno:=oDbf:recno() ,;
                                     oDbf:CreateIndex( cCarpetaInstalacion+"\DBF's\TEMP.CDX", "TALON", "TALON") , ;
                                     oDbf:goto(nRecno) , oBrw:refresh() }


Cualquier duda, estoy a disposición. Saludos.

Rolando :D
User avatar
rolando
 
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Previous

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 79 guests