FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Problema con la clase FWMariadb nativa y los rowsets (Resuelto)
Posts: 1279
Joined: Mon Feb 06, 2006 04:28 PM
Problema con la clase FWMariadb nativa y los rowsets (Resuelto)
Posted: Tue Oct 14, 2025 10:31 AM
Ya había comentado algo sobre este tema en otro post, pero, no había logrado reproducir el error con un ejemplo sencillo.

En este caso, he logrado crear un ejemplo testrowset, en el cual un script "cSql" se convierte en un array mediante oCn:Execute( cSql ) y luego se intenta crear un rowset con el mismo script oCn:Rowset( cSql ).
En el primer caso se genera un array con los datos perfectamente.
En el segundo caso NO se genera el rowset con los datos.
Es el mismo script, y es algo que me ha sucedido con frecuencia, apreciaría que se revisara esta clase, para evitar que se produzca este error, me ha complicado muchas veces, y sin embargo instalando el origen de datos mysql y atacando la tabla con ado directamente se puede obtener el recordset sin ningún problema.

El ejemlo:
#include 'Fivewin.ch'
#include 'WinApi.ch'
#include 'xbrowse.ch'

FUNCTION prueba()
     LOCAL oCn, chost, cuser, cpwrd, cport, cDb, cSql, aDatos, oRs
     
     chost := '127.0.0.1'
     cuser := 'root'
     cpwrd := 'contraseña'
     cport := 3306
     cDb   := 'estadistica'
     
     FWCONNECT oCn HOST chost USER cuser PASSWORD cpwrd PORT cport DB cDb

     TEXT INTO cSql
          WITH ent AS (
		     SELECT 
                    carcasa,
                    codigo,
                    descripcion,
                    peso,
                    fcuarteo,
                    ffaena,                   
                    ROW_NUMBER() OVER (
                         PARTITION BY carcasa 
                         ORDER BY fcuarteo, carcasa, codigo
                    ) AS rn
               FROM entdesoinforme 
          )
          SELECT 
                 e.fcuarteo,
                 -- Pivot de EntdesoInforme
                 MAX(CASE WHEN e.rn = 1 THEN e.codigo END) AS codigo1,
                 MAX(CASE WHEN e.rn = 1 THEN e.descripcion END) AS desc1,
                 MAX(CASE WHEN e.rn = 1 THEN e.peso END) AS peso1,
                 MAX(CASE WHEN e.rn = 2 THEN e.codigo END) AS codigo2,
                 MAX(CASE WHEN e.rn = 2 THEN e.descripcion END) AS desc2,
                 MAX(CASE WHEN e.rn = 2 THEN e.peso END) AS peso2,
                 MAX(CASE WHEN e.rn = 3 THEN e.codigo END) AS codigo3,
                 MAX(CASE WHEN e.rn = 3 THEN e.descripcion END) AS desc3,
                 MAX(CASE WHEN e.rn = 3 THEN e.peso END) AS peso3,
                 MAX(CASE WHEN e.rn = 4 THEN e.codigo END) AS codigo4,
                 MAX(CASE WHEN e.rn = 4 THEN e.descripcion END) AS desc4,
                 MAX(CASE WHEN e.rn = 4 THEN e.peso END) AS peso4
          FROM ent AS e
          GROUP BY 
                e.fcuarteo,
                e.carcasa
          ORDER BY 
                e.fcuarteo + e.carcasa
     ENDTEXT
     
     aDatos := oCn:Execute( cSql )
     
     ?Valtype( aDatos )
     xbrowse( aDatos )

     oRs := oCn:Rowset( cSql )
     
     ?Valtype( oRs )
     xBrowse( oRs )
     
     //oRs:Close()
     
RETURN nil
El script para crear la base de datos solo con esta tabla:

https://mega.nz/file/aU5C3TCb#nCIdG4A-s3VX3y1pTpcnxvW_FqXeyDFl-7PJpttJSS0
Saludos/Regards,

José Murugosa

"Los errores en programación, siempre están entre la silla, el teclado y la IA!!"
Posts: 1279
Joined: Mon Feb 06, 2006 04:28 PM
Re: Problema con la clase FWMariadb nativa y los rowsets
Posted: Tue Oct 14, 2025 05:44 PM
Mil gracias a Antonio Linares y Alejandro Cebollino por su apoyo y ayuda.
El problema radica en que oCn:Execute() soporta comentarios en el script, no así oCn:Rowset(), si se colocan comentarios con oCn:Rowset() da un error de sintaxis.
Saludos/Regards,

José Murugosa

"Los errores en programación, siempre están entre la silla, el teclado y la IA!!"
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Problema con la clase FWMariadb nativa y los rowsets (Resuelto)
Posted: Tue Oct 14, 2025 05:46 PM

En casos como este en que no devuelva nada es importante consultar el error de esta forma:

 oRs := oCn:Rowset( cSql )



 ? oCn:cError

 ? Valtype( oRs )
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1279
Joined: Mon Feb 06, 2006 04:28 PM
Re: Problema con la clase FWMariadb nativa y los rowsets (Resuelto)
Posted: Wed Oct 22, 2025 10:16 AM

Muchas gracias Antonio!!

Saludos/Regards,

José Murugosa

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

Continue the discussion