PROBLEMA CUANDO USO ORDE BY campo DESC CON XBROWSE

Post Reply
User avatar
joseluisysturiz
Posts: 2024
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

PROBLEMA CUANDO USO ORDE BY campo DESC CON XBROWSE

Post by joseluisysturiz »

Saludos, desde hace tiempo tengo este problema y lo resolvia no haciendo uso de la clausula DESC en ORDER BY de una consulta MySql, pero lamentablemente ahorita es obligatoria, uso un xBrowse con TDolphin que contiene una consulta con 3 tablas relacionadas con LEFT JOIN, hasta alli todo bien, pero cuando uso el xBrowse y hago click sobre las cabezeras que contienen _ por el cual hago el LEFT JOIN, entonces obtengo este mensaje de error "Error MYSQL/1052 Column 'id_provee' in order clause is ambiguous ", en las demas columnas hace el ordenamiento sin problemas, ahora si quito el DESC de la consulta, todo trabaja bien en todas las columnas, ni idea de como resolver este problema. Dejo el codigo usado, desde ya, gracias por las sugerencias y respuestas, saludos...gracias... :shock:

CONSULTA MYSQL / TDolphin

Code: Select all

   cSql := "SELECT cm.id_provee, pv.provee_nombres, cm.com_num_fac, "
   cSql += "cm.com_fch_fac, cm.com_peso_kilo, cm.com_unidades "

   cSql += "FROM ge_pollos_compras_master AS cm "

   cSql += "LEFT JOIN ge_pollos_compras_detalles AS cd ON cm.id_provee = cd.id_provee "
   cSql += "AND cm.com_num_fac = cd.com_num_fac "
   cSql += "LEFT JOIN ge_provee_master AS pv ON cm.id_provee = pv.id_provee "

   cSql += "GROUP BY cm.id_compra_mas "

   cSql += "ORDER BY cm.com_fch_fac DESC" // SI QUITO "DESC" TRABAJA TODO BIEN
 
XBrowse / TDolphin

Code: Select all

   REDEFINE XBROWSE aBrw[2] ID 100 OF oFldx:aDialogs[2] ;
   DATASOURCE oQryComPro ;
   LINES CELL AUTOSORT AUTOCOLS ;
   HEADERS "Cod.", "Nombre Proveedores", "Factura", "Fecha", "Kilos Compra" ,;
      "Cant.Piezas";
   COLUMNS "id_provee", "provee_nombres", "com_num_fac", "com_fch_fac" ,;
      "com_peso_kilo", "com_unidades" ;
   COLSIZES 50, 200, 50, 70, 80, 80 ;
   JUSTIFY 2, , 2, 2 ;
   PICTURES , , , , oPi:nKg1, oPi:nPi5
 
Last edited by joseluisysturiz on Wed Aug 02, 2017 3:12 pm, edited 1 time in total.
Dios no está muerto...

Gracias a mi Dios ante todo!
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: PROBLEMA CUANDO USO ORDE BY campo DESC

Post by Carlos Mora »

Hola José Luis,

Creo que el problema radica en que le has puesto AUTOSORT al XBrowse, y este le añade una cláusula 'orderby' a la query para sacar los datos ordenados por proveedor. Prueba poniendo en las columnas 'cm.id_prove' en lugar de solo 'id:prove' a ver si con eso se resuelve la ambigüedad.

Un saludo
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
User avatar
joseluisysturiz
Posts: 2024
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re: PROBLEMA CUANDO USO ORDE BY campo DESC

Post by joseluisysturiz »

Carlos Mora wrote:Hola José Luis,

Creo que el problema radica en que le has puesto AUTOSORT al XBrowse, y este le añade una cláusula 'orderby' a la query para sacar los datos ordenados por proveedor. Prueba poniendo en las columnas 'cm.id_prove' en lugar de solo 'id:prove' a ver si con eso se resuelve la ambigüedad.

Un saludo
Carlos, gracias por tu interes, de verdad no entiendo lo que sugieres que haga, lo del cm.id_provee lo uso en la consulta, el alias a la tabla es "cm" y el nombre del campo es "id_provee", no se de donde sacas que uso "id:prove", la ambiguedad se presenta so,lo cuando uso la clausula DESC en el ORDER BY de la consulta, creo la idea seria que en el auto sort del xbrowse, pudiera hacer lo mismo con la columna que quiero se ordenen mis registros, hace tiempo pregunte sobre como definir el AUTOSORT pero que inicie por la columna que quiero y si lo qiero ASC o DESC, creo eso resolveria mi problema, por los momentos he quitado "de nuevo" el DESC de la consulta para poder trabajar con mi xBrowse.

Haber si alguien mas da una idea o a los expertos en xBrowse, Mr.NAO, alguna idea de como resolver esto.? gracias...saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: PROBLEMA CUANDO USO ORDE BY campo DESC CON XBROWSE

Post by Carlos Mora »

Jose Luis,
perdona, es un dedazo.
Donde digo id:prove quise decir id_prove, en donde declaras las columnas del browse. El error se debe a que la query es un join, y hay columna id_prove en ambas tablas del join y no sabe a cual de las dos tablas te refieres. como has puesto AUTOSORT, debe estar tratando se hacer un ORDER BY id_prove y MySQL le suelta ese error.
O bien quita AUTOSORT del comando XBROWSE, o en las COLUMNS declara COLUMNS "cm.id_prove", "cm....." etc
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
User avatar
joseluisysturiz
Posts: 2024
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re: PROBLEMA CUANDO USO ORDE BY campo DESC CON XBROWSE

Post by joseluisysturiz »

Carlos Mora wrote:Jose Luis,
perdona, es un dedazo.
Donde digo id:prove quise decir id_prove, en donde declaras las columnas del browse. El error se debe a que la query es un join, y hay columna id_prove en ambas tablas del join y no sabe a cual de las dos tablas te refieres. como has puesto AUTOSORT, debe estar tratando se hacer un ORDER BY id_prove y MySQL le suelta ese error.
O bien quita AUTOSORT del comando XBROWSE, o en las COLUMNS declara COLUMNS "cm.id_prove", "cm....." etc
Carlos, de la forma en que tengo definido el xBrowse, no puedo hacer si una cosa ni la otra, si quito el AUTOSORT, entonces no hay SORTEO al hacer click en las cabezeras de columnas que es lo practico y funcional del AUTOSORT y no puedo colocar el alias mas el nombre del campo ya que si te fijas, en mi SELECT digo cuales son _ y de que tablasson los que usare en mui xBrowse, usando exactamente el ALIAS, ejmp..."cm.id_provee", tampoco puedo colocar en el xBrowse el nombre de las columnas como lo sugieres ya que da error, asumiendo que la columna "cm.id_provee" no existe. Lo que debes tomar mas en cuenta es que SI QUITO EL "DESC" en la consulta, todo trabaja sin problemas, ese es mi gran punto..y problemas, xbrowse no respeta el DESC del Query...ya he probado casi todo y no se que mas inventar...saludos...gracias... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Re: PROBLEMA CUANDO USO ORDE BY campo DESC CON XBROWSE

Post by Biel EA6DD »

Recuerdo que tuve este problema, pero pensaba que habia subido _ al repositorio.
Lo que pasaba es que no se generaba bien el array aColumns, prueba de cambiar el metodo BuildDatas de la clase tDolphinQry

Code: Select all

METHOD BuildDatas( cQuery ) CLASS TDolphinQry

   LOCAL aToken, cItem, cSelect, cTables, cFind,nPos
   LOCAL aCommands := { "SELECT", ;
                        "WHERE",;
                        "GROUP",;
                        "HAVING",;
                        "LIMIT",;
                        "ORDER",;
                        "FROM",;
                        "DESC",;
                        "ASC" }
   LOCAL nFind

   DEFAULT cQuery TO ::cQuery

   cQuery := AllTrim( cQuery )
   aToken := HB_ATokens( cQuery, " " )

   cSelect:=SubStr(cQuery,8,RAt('FROM',cQuery)-9) //Biel
   ::aColumns = ArrayFromSQLString( cSelect )     //Biel

   FOR EACH cItem IN aToken
      IF AScan( aCommands, {| cCommand | cCommand == Upper( cItem ) } ) > 0
         cItem := "|" + cItem
      ENDIF
   NEXT
   cQuery := ""
   FOR EACH cItem IN aToken
      cQuery += cItem + " "
   NEXT

   aToken := HB_ATokens( cQuery, "|" )

   FOR EACH cItem IN aToken
       cFind = Upper( SubStr( cItem, 1, At( " ", cItem ) - 1 ) )
      // for comapibility with xharbour
      // xharbour no accept string like switch constant
      nFind = AScan( aCommands, cFind )

      SWITCH nFind
        /* CASE 1 //"SELECT"    //Comentado por Biel, se procesa mas arriba
            cSelect := AllTrim( SubStr( cItem, 8 ) )
            DEBUG cSelect
            ::aColumns = ArrayFromSQLString( cSelect )
            EXIT
         */
         CASE 2 //"WHERE"
            IF Empty( ::cWhere )
               ::cWhere  := AllTrim( SubStr( cItem, 7 ) )
            ENDIF
            EXIT

         CASE 3 //"GROUP"
            IF Empty( ::cGroup )
               ::cGroup  := AllTrim( SubStr( cItem, 10 ) )
            ENDIF
            EXIT

         CASE 4 //"HAVING"
            IF Empty( ::cHaving )
               ::cHaving := AllTrim( SubStr( cItem, 8 ) )
            ENDIF
            EXIT

         CASE 5 //"LIMIT"
            IF Empty( ::cLimit )
               ::cLimit  := AllTrim( SubStr( cItem, 7 ) )
            ENDIF
            IF ! ::lPagination
               IF Val(::cLimit) <= 1
                  ::cLimit := ""
               ENDIF
            ENDIF

            EXIT

         CASE 6 //"ORDER"
            IF Empty( ::cOrder )
               ::cOrder  := AllTrim(SubStr( cItem, 10 ))
            ENDIF
            EXIT

         CASE 7 //"FROM"
            IF Empty( ::aTables )
               cTables := AllTrim( SubStr( cItem, 6 ) )
               ::aTables := ArrayFromSQLString( cTables )
            ENDIF
            EXIT

         CASE 8//"DESC"    //  Gabri

           if ! ::lPagination
              IF ! Empty( ::cOrder )
                 ::cOrder  += " DESC"
               ENDIF
           Endif
           EXIT

         CASE 9 //"ASC"    //  Gabri
            if ! ::lPagination
               IF ! Empty( ::cOrder )
                  ::cOrder  += " ASC"
               ENDIF
            Endif
            EXIT

      ENDSWITCH
   NEXT

RETURN NIL
 
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: PROBLEMA CUANDO USO ORDE BY campo DESC CON XBROWSE

Post by Carlos Mora »

Si la solución del master Byel no resuelve, podrías probar

Code: Select all

  // cSql := "SELECT cm.id_provee, pv.provee_nombres, cm.com_num_fac, "
  cSql := "SELECT cm.id_provee AS cm_id_provee, pv.provee_nombres, cm.com_num_fac, "
 
y en el xBrowse

Code: Select all

 COLUMNS "cm_id_provee", "provee_nombres", "com_num_fac", "com_fch_fac" ,;
      "com_peso_kilo", "com_unidades" ;
 

para ver si así se resuelve la ambigüedad.
No uso TDolphin, solo estaba tratando de interpretar el error de SQL y como se puede resolver.
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
User avatar
joseluisysturiz
Posts: 2024
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re: PROBLEMA CUANDO USO ORDE BY campo DESC CON XBROWSE

Post by joseluisysturiz »

Carlos Mora wrote:Si la solución del master Byel no resuelve, podrías probar

Code: Select all

  // cSql := "SELECT cm.id_provee, pv.provee_nombres, cm.com_num_fac, "
  cSql := "SELECT cm.id_provee AS cm_id_provee, pv.provee_nombres, cm.com_num_fac, "
 
y en el xBrowse

Code: Select all

 COLUMNS "cm_id_provee", "provee_nombres", "com_num_fac", "com_fch_fac" ,;
      "com_peso_kilo", "com_unidades" ;
 

para ver si así se resuelve la ambigüedad.
No uso TDolphin, solo estaba tratando de interpretar el error de SQL y como se puede resolver.
Carlos, gracias por tu sugerencia, pero como ya comente antes, el problema no es MySql, ya que si uso la consulta en un administrador de base de datos como navicat, phpadmin, etc, todo trabaja sin problemas, el problema es TDOLPHIN, y como ya comente, al quitar el DESC, todo trabaja sin problemas, igual probe tu sugerencia para no descartarla y se repite el error, voy evaluar lo sugerido por Biel y luego comento, gracias por las sugerencias, saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Re: PROBLEMA CUANDO USO ORDE BY campo DESC CON XBROWSE

Post by Biel EA6DD »

No es un problema de la sentencia, tDolphin recibe la sentencia SELECT, la interpreta y guarda en sus datas los atributos, relaciones, ordenaciones, where, etc

Con estos datas es capaz de crear nuevas sentencias SQL cuando sea necesario, por ejemplo al modificar el orden.

El problema es que cuando pasas DESC, tDolphin interpreta mal la sentencia, y no guarda los nombres de los atributos de la consulta en ::aColumns, al contruir nuevas sentencias SELECT se ha pertido toda la información de _ (pv.provee_nombres,...), y en su lugar crea la consulta con SELECT *, de ahí el error.

No le deis más vueltas a la sentencia, porque el problema no va en esa dirección.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
joseluisysturiz
Posts: 2024
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re: PROBLEMA CUANDO USO ORDE BY campo DESC CON XBROWSE

Post by joseluisysturiz »

Biel EA6DD wrote:No es un problema de la sentencia, tDolphin recibe la sentencia SELECT, la interpreta y guarda en sus datas los atributos, relaciones, ordenaciones, where, etc

Con estos datas es capaz de crear nuevas sentencias SQL cuando sea necesario, por ejemplo al modificar el orden.

El problema es que cuando pasas DESC, tDolphin interpreta mal la sentencia, y no guarda los nombres de los atributos de la consulta en ::aColumns, al contruir nuevas sentencias SELECT se ha pertido toda la información de _ (pv.provee_nombres,...), y en su lugar crea la consulta con SELECT *, de ahí el error.

No le deis más vueltas a la sentencia, porque el problema no va en esa dirección.
Tranquilo Biel, se que la sentencia esta bien, solo le aclaraba al colega eso mismo, que el problema es TDolphin en la interpretacion de la sentencia, voy hacer _ que sugieres y luego comento si todo funciona bien, espero que si guiandome por tu experiencia sobre el tema, saludos, gracias... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
Post Reply