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:
El script para crear la base de datos solo con esta tabla:
https://mega.nz/file/aU5C3TCb#nCIdG4A-s3VX3y1pTpcnxvW_FqXeyDFl-7PJpttJSS0
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 nilhttps://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!!"
José Murugosa
"Los errores en programación, siempre están entre la silla, el teclado y la IA!!"