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:
Code: Select all | Expand
#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
https://mega.nz/file/aU5C3TCb#nCIdG4A-s ... 7PJpttJSS0