Error en TDOLPHIN, subselects

Post Reply
User avatar
Adolfo
Posts: 861
Joined: Tue Oct 11, 2005 11:57 am
Location: Chile
Contact:

Error en TDOLPHIN, subselects

Post by Adolfo »

Daniel...

Tengo consultas bien complejas en un modulo que carga todo en un xBrowse

ej.

Code: Select all | Expand

"select cli.RUT, cli.RAZON, dir.DIRECCION, dir.SECTOR, cli.FONO1, count(cta.SALDO) as CUOTAS, sum(cta.SALDO) as DEUDA, MAX(DATEDIFF(NOW(), cta.VENCE)) as DAP," + ;
               " (select cob.FECHA      from cobranzas as cob where cob.RUT=cli.RUT order by FECHA DESC limit 1 ) as FECHA," + ;
               " (select cob.COMPROMISO from cobranzas as cob where cob.RUT=cli.RUT order by FECHA DESC limit 1 ) as COMPROMISO," + ;
               " COALESCE((select cob.USUARIO    from cobranzas as cob where cob.RUT=cli.RUT order by FECHA DESC limit 1 ),'          ') as USUARIO" + ;
               " from clientes as cli inner join clicta as cta on cta.RUT=cli.RUT, direcciones as dir " + ;
               " where cta.ABONADO < cta.MONTO and cta.VENCE < '" + D2S(DATE()-1) + "' and dir.RUT=cli.RUT and dir.NUMERO=1 group by cli.RUT order by RUT"
 


Genero la consulta sin problemas, se carga el xBrowse ocn sus datos y realizo todas las operaciones sin problemas....pero al habilitar la opcion de Ordenar el xBrowse al hacer click en el header... se cae...

el problema... que el metodo BuildQuery() no construye el select de la misma forma que el original.
Me parece que Buildquery no entiende las SubSelects y las elimina del query modificado. Vi el codigo, pero preferi consultarte si es de rapida solucion, pues estoy trasladando un ERP de ADO a tDolphin aprovechando que quiero modificarlo.

Saludos

Desde Chile
Adolfo
;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 2 * 1 TB NVME M.2, GTX 1650
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Error en TDOLPHIN, subselects

Post by Daniel Garcia-Gil »

Adolfo

Si es una limitacion que encontrada con TDolphin, la ventaja que tenemos es que el codigo es totalmente abierto y entre todos podremos encontrar una forma alternartiva...

actualmente con ado como haces? puede que nos de una idea para solventar la limitacion

Gracias
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
Adolfo
Posts: 861
Joined: Tue Oct 11, 2005 11:57 am
Location: Chile
Contact:

Re: Error en TDOLPHIN, subselects

Post by Adolfo »

Daniel

Eso es resuelto por ADO directamente a traves de su metodo ::SORT

Daniel.. mi sorpresa es que se construyen bien todas las columnas, incluyendo los subselects, solo tengo que encontrar porque al llamar a BUILQUERY dentro de SETNEWFILTER, este se crea disminuido, o sea sin los subselects.

Es el primer gran escollo que encuentro, y al ser un sistema complejo,las proximas selects que debo trasladar son muchisimo mas extensas y complejas... se que funcionara el xbrowse... pero debere solucionar el tema del SETORDER. los usuarios estan muy acostumbrados ala mecanica de presionar los headers para ordenar por lo que se les plasca.

Mañana con la lucidez del nuevo dia, vere si me atrevo a intervenir el codigo de tdolphin para encontrarle una solucion...

Saludos
Desde Chile
Adolfo
;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 2 * 1 TB NVME M.2, GTX 1650
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Error en TDOLPHIN, subselects

Post by Daniel Garcia-Gil »

Adolfo


Aun no lo he probado, pero se podria crear una nueva data

bOnNewFilter, de manera que puedas crear manualmente el filtro y recostruir las datas

esta seria una forma simple de usarlo

Code: Select all | Expand


PROCEDURE DataBrowse( oServer, oWnd )

   LOCAL oQry
   LOCAL oDlg
   LOCAL oBrw
   LOCAL oData, oCol
   LOCAL cQry :=  "SELECT * FROM president ORDER BY "
   
   oQry = oServer:Query( cQry + "last_name ASC" )
   
  // Rebuild the query inside bOnNewFilter
   oQry:bOnNewFilter = {| oSelf, nType | oSelf:cQuery := cQry + oSelf:cOrder, .F. }
   
   DEFINE DIALOG oDlg SIZE 700,300 OF oWnd

   @ 0, 0 XBROWSE oBrw OBJECT oQry AUTOSORT
     
   oBrw:CreateFromCode()
 
   oDlg:oClient = oBrw
   
   ACTIVATE DIALOG oDlg CENTERED ON INIT oDlg:Resize()
   
   oQry:End()

RETURN
 


te dejo ***AQUI**** el prg para que lo pruebes aun no lo he subido al SVN

este seria el cambio interno en la Clase TDolphinQry

crear la data

Code: Select all | Expand

DATA bOnNewFilter   //codeblock to evaluate before set new query, should return .t./.f. to call BuildQuery


agregar esto a SetNewFilter

Code: Select all | Expand

  if ::bOnNewFilter != NIL
      // if you want change query, do it here,
      // return .F. to skip BuildQuery and call BuildDatas()
      // return .T. to call BuildQuery()
      // isn't recommended return .T. with Sub-Select
      l = Eval( ::bOnNewFilter, Self, nType )
      // Convert automatically to logical value
      l = ValType( l ) == "L" .and. l
   endif
   if l
      ::cQuery := ::BuildQuery( ::aColumns, ::aTables, ::cWhere, ::cGroup, ::cHaving, ::cOrder, ::cLimit )
   else
      ::BuildDatas( ::cQuery )
   endif
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
Adolfo
Posts: 861
Joined: Tue Oct 11, 2005 11:57 am
Location: Chile
Contact:

Re: Error en TDOLPHIN, subselects

Post by Adolfo »

Daniel...

Parte del problema es que la funcion HB_TOKENS no discrimina bien las columnas..

He diseñado esta funcion ( a la rapida y sin optimizar) que soluciona ese problema y realmente llena el acolumns con el contenido de cada una ( incluyendo los subselects que siempre van entre parentesis)

Code: Select all | Expand

Function CheckTokens(cString)
Local aColumns:={}
Local nParenthesis:=0
Local nLast:=0
Local nCount:=0

For x=1 To Len(cString)
    nCount++

    If Substr(cString,x,1)="("
       nParenthesis++
    Endif

    If SubStr(cString,x,1)=")"
       nParenthesis--
    Endif

    If SubStr(cString,x,1)="," .And. nParenthesis=0
       Aadd(aColumns,Alltrim(Substr(cString,nLast + 1, nCount-1 )))
       nLast:=x
       nParenthesis:=0
       nCount:=0
    Endif
Next

Return aColumns


Hasta ahi todo bien,pero al realizar otras operaciones, me toma el nombre de la columna como tal o sea cli.RUT en vez de solo RUT por ej.

Indicame por donde puede ir el resto....ya que al fin le veo algo de luz... jaja

Saludetes...

Desde Chile
Adolfo
;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 2 * 1 TB NVME M.2, GTX 1650
User avatar
Adolfo
Posts: 861
Joined: Tue Oct 11, 2005 11:57 am
Location: Chile
Contact:

Re: Error en TDOLPHIN, subselects

Post by Adolfo »

Daniel....

Tengo solucionado en parte problema con las modificaciones que tu me diste.
Funciona bien, salvo que se demora lo mismo en construir el query que en ordenar, algo que no sucedia anteriormente.
Pero mientras encuentro otra solucion mas directa, sigo avanzando.

Gracias

Saludos
Desde Chile
Adolfo
;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 2 * 1 TB NVME M.2, GTX 1650
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Error en TDOLPHIN, subselects

Post by Daniel Garcia-Gil »

Adolfo

Adolfo wrote:Tengo solucionado en parte problema con las modificaciones que tu me diste.
Funciona bien, salvo que se demora lo mismo en construir el query que en ordenar, algo que no sucedia anteriormente.
Pero mientras encuentro otra solucion mas directa, sigo avanzando.


bien, pero recuerda que para cambiar el orden, la consulta se reconstruye, es decir, es un query nuevo que es enviado al servidor, es logico que demore lo mismo que la primera vez, el cliente no se encarga de esos procesos
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Error en TDOLPHIN, subselects

Post by Daniel Garcia-Gil »

Adolfo

puedo subir el cambio al SVN, o me recomiendas que espere mas pruebas de tu parte?
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
Adolfo
Posts: 861
Joined: Tue Oct 11, 2005 11:57 am
Location: Chile
Contact:

Re: Error en TDOLPHIN, subselects

Post by Adolfo »

Daniel....

Hasta con las SubSelects mas complejas ( de 2 niveles, o sea subselect con join a multiples tablas ) funciona sin problemas

El unico "pero" la velocidad de reconstruccion del orden.... pero de que funciona.. funciona.

Saludos

Desde Chile
Adolfo
;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 2 * 1 TB NVME M.2, GTX 1650
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Error en TDOLPHIN, subselects

Post by Daniel Garcia-Gil »

Adolfo wrote:Daniel....

Hasta con las SubSelects mas complejas ( de 2 niveles, o sea subselect con join a multiples tablas ) funciona sin problemas

El unico "pero" la velocidad de reconstruccion del orden.... pero de que funciona.. funciona.

Saludos

Desde Chile
Adolfo


es exactamente lo que te comentaba, hagas lo que hagas, la velocidad no la vas a mejorar, porque la sentencia es creada y enviada nuevamente desde cero
Ahora con un servidor mas potente en conjunto con un ancho de banda mas amplio (para el upload) o una paginacion podrias mejorar la velocidad, pero de resto dudo mucho que ese punto mejore
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Post Reply