Filtrar consulta de tdolphin

Filtrar consulta de tdolphin

Postby JoseAlvarez » Sun Sep 24, 2023 6:01 pm

Saludos estimados amigos.

Necesito filtrar una consulta de tDolphin despues de realizada para mostrarla en un xBrowse.

He leido y visto ejemplos aqui en el foro sobre SetWhere pero no logro hacer que me funcione.

oQry:SetWhere("nSaldo>0")

Pero me da error de sintaxis.

nSaldo es una columna que se genera desde una subconsulta, es decir, no existe en la tabla, sino que se crea "al vuelo" por eso no puedo filtrar al momento de crear el objeto de la consulta.

Alguna luz de como solucionar?

Gracias!
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 795
Joined: Sun Nov 09, 2014 5:01 pm

Re: Filtrar consulta de tdolphin

Postby carlos vargas » Sun Sep 24, 2023 6:24 pm

Pasa la consulta a.una tbala dbf y haces el filtro. Es lo que se me ocurre.
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1720
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Filtrar consulta de tdolphin

Postby cmsoft » Mon Sep 25, 2023 12:13 pm

El setwhere tiene que ser sobre un campo de algunas de las tablas de tu consulta, no puede ser de un campo creado con AS
Otra opción es crear una tabla temporal mysql, con el resultado de tu consulta, y sobre ella hacer el setwhere

Code: Select all  Expand view  RUN

#include "tdolphin.ch"
#include "fivewin.ch"
FUNCTION Main()
LOCAL oServer, oBrw, oQry
CONNECT oServer HOST 'localhost' ;
                      USER 'user' ;
                      PASSWORD 'mypass' ;
                      PORT 3306 ;
                      FLAGS 0;
                      DATABASE 'test'

oServer:Execute("CREATE TEMPORARY TABLE IF NOT EXISTS temp "+;
                " (SELECT c.codpro as codigo, p.nombre as proveedor, sum(importe) as importe "+;
                " FROM compras c INNER JOIN proveedores p ON c.codpro = p.codigo GROUP BY c.codpro) ")
oQry := oServer:Query("SELECT * FROM temp")
oQry:SetWhere("importe > 10000")
xbrowse(oQry)
RETURN nil
 
User avatar
cmsoft
 
Posts: 1290
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Filtrar consulta de tdolphin

Postby carlos vargas » Mon Sep 25, 2023 10:50 pm

Interesante, en que momento deja de existir esa tabla temporal?
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1720
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Filtrar consulta de tdolphin

Postby Armando » Tue Sep 26, 2023 4:09 am

Carlos:

Las tablas TEMPORAY se auto-eliminan al momento de salir del PRG que las crea.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3228
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Filtrar consulta de tdolphin

Postby jnavas » Tue Sep 26, 2023 9:06 am

José Saludos
Puedes utilizar la Clausula Having para filtrar el resultado de la consulta .

En el siguiente ejemplo, detectamos cuantos documentos estan repetidos CUANTOS>1
Code: Select all  Expand view  RUN

cSql:=[ SELECT DOC_CODSUC,DOC_TIPDOC,DOC_TIPTRA,DOC_NUMERO,DOC_FECHA,COUNT(*) AS CUANTOS]+;
        [ FROM DPDOCCLI ]+;
        [ WHERE DOC_TIPTRA="D" ]+;
        [ GROUP BY DOC_CODSUC,DOC_TIPDOC,DOC_TIPTRA,DOC_NUMERO,DOC_FECHA ]+;
        [ HAVING CUANTOS>1 ]+;
        [ ORDER BY DOC_CODSUC,DOC_TIPDOC,DOC_TIPTRA,DOC_NUMERO,DOC_FECHA ]
 
User avatar
jnavas
 
Posts: 479
Joined: Wed Nov 16, 2005 12:03 pm
Location: Caracas - Venezuela

Re: Filtrar consulta de tdolphin

Postby jnavas » Tue Sep 26, 2023 9:09 am

Jose,
Puedes agregar en tu consulta.
SELECT ... FROM ...
HAVING nSaldo >0
User avatar
jnavas
 
Posts: 479
Joined: Wed Nov 16, 2005 12:03 pm
Location: Caracas - Venezuela

Re: Filtrar consulta de tdolphin

Postby cmsoft » Tue Sep 26, 2023 11:52 am

carlos vargas wrote:Interesante, en que momento deja de existir esa tabla temporal?

Carlos, las tablas temporales solo tienen visibilidad en la sesion que son creadas, y mientras no se cierre la misma, tienen vida (o sea, mientras no hagamos oServer:End()).
Por lo demás, podemos hacer sobre ellas todo lo que podriamos hacer sobre una tabla normal. Creo que eso es una ventaja sobre una dbf.
Si tienes dos puestos de trabajo, y en ambos creas una tabla temporal, dichas tablas no serán visibles para el puesto que no las creó, por lo tanto puedes definir un módulo que las utilice, sin que se pisen los datos entre ambos puestos de trabajo.
User avatar
cmsoft
 
Posts: 1290
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Filtrar consulta de tdolphin

Postby JoseAlvarez » Tue Sep 26, 2023 12:26 pm

Hola a todos,


disculpen la tardanza en contestar a sus amables repuestas y ayuda.


Carlos Vargas: tu idea de la dbf es muy acertada, la tendré en cuenta para algún otro caso que se presente.

Cesar Gómez: a pesar de haber usado las tablas temporales de memoria en muchas oportunidades, no se me pasó por la mente hacerlo así ¡muy bien!

Juan Navas: tu idea usando HAVING funciona perfectamente, ¡excelente! tal como dices, solo tuve que agregar HAVING nSaldoFac>0
a la consulta y ¡LISTO!, a pesar de ser una columna dinámica.


Muchas gracias a todos por su generosa ayuda, todas las ideas que aportaron son útiles y las voy guardando, en algún momento cada una tendrá su aplicación en casos específicos.

Ahora bien, aprovecho de hacer otra consulta para terminar de colocarle "la cereza al helado"

Siempre que hago xBrowse usando como datasource un oQry, los totales en el footer hacen caso omiso de los PICTURE.
Si lo hago con un array, funciona perfecto el picture, pero con las consultas de mysql no. Dejo una imagen de referencia y el código.

Code: Select all  Expand view  RUN
        WITH OBJECT oBrwFac

              :aCols[5]:cEditPicture:= "@E 9,999,999,999.99"
              :aCols[5]:nFooterType := AGGR_TOTAL

              :aCols[6]:cEditPicture:= "@E 9,999,999,999.99"
              :aCols[6]:nFooterType := AGGR_TOTAL

              :aCols[7]:cEditPicture:= "@E 9,999,999,999.99"
              :aCols[7]:nFooterType := AGGR_TOTAL

              :MakeTotals()

        END
 


pero el resultado no respeta el picture:

Image

¿alguna idea de como solucionar?
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 795
Joined: Sun Nov 09, 2014 5:01 pm

Re: Filtrar consulta de tdolphin

Postby nageswaragunupudi » Tue Sep 26, 2023 4:56 pm

Footer Pictures
Code: Select all  Expand view  RUN
#include "fivewin.ch"

function Main()

   local oServer, oQry

   FWNumFormat( "E", .t. )

   oServer := TDolphinSrv():New( "208.91.198.197", "gnraofwh", "Bharat@1950", ;
               0, 0, "fwhdemo" )

   oQry  := oServer:Query( "select id,first as Name, salary as Amount from customer" )

   XBROWSER oQry SETUP ( ;
      oBrw:Amount:nFooterType := AGGR_SUM, ;
      oBrw:MakeTotals(), ;
      oBrw:lFooter := .t. )

   oQry:End()
   oServer:End()

return nil
 


Image
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10643
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Filtrar consulta de tdolphin

Postby nageswaragunupudi » Tue Sep 26, 2023 5:42 pm

Necesito filtrar una consulta de tDolphin despues de realizada para mostrarla en un xBrowse.


This is extremely easy using FWH Maria library.
But here we are using Dolphin.

Do not think of reading the filtered data again from the Server.
Let us just filter the data inside XBrowse. i.e., let us display in xbrowse only those records that match the filter condition.

We will take the above example.
We want to show only those records where the "AMOUNT" is exactly divisible by 19.
We will apply this filter on right mouse click.
Code: Select all  Expand view  RUN
#include "fivewin.ch"

function Main()

   local oServer, oQry

   FWNumFormat( "E", .t. )

   oServer := TDolphinSrv():New( "208.91.198.197", "gnraofwh", "Bharat@1950", ;
               0, 0, "fwhdemo" )

   oQry  := oServer:Query( "select id,first as Name, salary as Amount from customer" )

   XBROWSER oQry SHOW RECID SETUP ( ;
      oBrw:Amount:nFooterType := AGGR_SUM, ;
      oBrw:MakeTotals(), ;
      oBrw:lFooter := .t., ;
      oBrw:bRClicked := { |r,c,f,o| BrwRecs( o, { |Self| ( ::Amount:Value % 19 ) == 0 } ) } )

   oQry:End()
   oServer:End()

return nil

static function BrwRecs( oBrw, bFilter )

   local aRecs := {}

   Eval( oBrw:bGoTop )
   repeat
      if Eval( bFilter, oBrw )
         AAdd( aRecs, oBrw:BookMark )
      endif
   until Eval( oBrw:bSkip, 1 ) == 0
   oBrw:aFilter   := aRecs
   oBrw:GoTop()
   oBrw:MakeTotals()
   oBrw:Refresh()

return nil


Image
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10643
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Filtrar consulta de tdolphin

Postby carlos vargas » Tue Sep 26, 2023 5:50 pm

Code: Select all  Expand view  RUN
     :aCols[ 07 ]:nFooterType   := AGGR_SUM
      :aCols[ 08 ]:nFooterType   := AGGR_SUM
      :aCols[ 09 ]:nFooterType   := AGGR_SUM
      :aCols[ 01 ]:cFooterPicture:= "9999"
      :aCols[ 07 ]:cFooterPicture:= "999,999,999.99"
      :aCols[ 08 ]:cFooterPicture:= "999,999,999.99"
      :aCols[ 09 ]:cFooterPicture:= "999,999,999.99"
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1720
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Filtrar consulta de tdolphin

Postby nageswaragunupudi » Tue Sep 26, 2023 6:11 pm

carlos vargas wrote:
Code: Select all  Expand view  RUN
     :aCols[ 07 ]:nFooterType   := AGGR_SUM
      :aCols[ 08 ]:nFooterType   := AGGR_SUM
      :aCols[ 09 ]:nFooterType   := AGGR_SUM
      :aCols[ 01 ]:cFooterPicture:= "9999"
      :aCols[ 07 ]:cFooterPicture:= "999,999,999.99"
      :aCols[ 08 ]:cFooterPicture:= "999,999,999.99"
      :aCols[ 09 ]:cFooterPicture:= "999,999,999.99"


Our recommendation is NOT to write any code, which is not essential.
In other words, do not specify picture clauses at all in xbrowse.

Keep this one line of code at the beginning of the Application
Code: Select all  Expand view  RUN
FWNumFormat( "E", .t. ) // European format with thousand separators

and allow XBrowse to provide suitable cEditPictures and cFooterPictures.
You do not provide cEditPicture or cFooterPicture, except where it is a totally different kind.

With XBrowse, lesser the code better are the results.

Please see my above sample. We did not provide any picture clause.
But XBrowse, on its own, used the correct picture .
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10643
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Filtrar consulta de tdolphin

Postby jnavas » Tue Sep 26, 2023 7:05 pm

José,
Colegas
Si deseas puedo apoyarles y/o capacitarles en el uso de MYSQL. Mi tel +5841430000518 jnadaptapro@gmail.com
Podemos ver:
1. Integridad referencial
2. Disparadores.
3. Vistas.
4. Sub consultas.
5. Optimización WHERE, JOIN
User avatar
jnavas
 
Posts: 479
Joined: Wed Nov 16, 2005 12:03 pm
Location: Caracas - Venezuela

Re: Filtrar consulta de tdolphin

Postby jnavas » Tue Sep 26, 2023 7:07 pm

Corrijo mi tel +584143000518
User avatar
jnavas
 
Posts: 479
Joined: Wed Nov 16, 2005 12:03 pm
Location: Caracas - Venezuela

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: pedroluis and 45 guests