PROCEDURE sp_obttabla PARAMETERS tctable LOCAL llcerrar, lcaux, lnaux, n, lccampo, lctipo, lcdato, ln ****** **MS** llcerrar = not USED("&tctable") ****** llcerrar = not USED(tctable) && ¡No hace falta aquí! lcaux = "" SELECT * FROM &tctable INTO CURSOR curtmp IF _TALLY > 0 THEN lcaux = '<?xml version="1.0"?><curtmp>' SCAN lcaux = lcaux + '<record>' FOR n = 1 TO FCOUNT() lccampo = FIELD(n) lcaux = lcaux + '<' + lccampo + '>' ******** ** MS ** lctipo = TYPE("&lccampo") ******** lctipo = TYPE( lccampo ) && ¡Aquí tampoco hace falta! ******** ** MS ** Todo lo de abajo lo reemplazas por una línea: lcdato = transform( evaluate( lccampo ) ) **DO CASE **CASE lctipo = 'C' ******** ** ** MS ** lcdato = ALLTRIM(&lccampo) ** lcdato = ALLTRIM( evaluate( lccampo ) ) && Esto sería más óptimo **CASE lctipo = 'N' ** ** MS ** ln = &lccampo ** ln = evaluate( lccampo ) && Idem anterior ** IF ln - INT(ln) > 0 THEN ** lcdato = ALLTRIM(STR(ln,11,2)) ** ELSE ** ldato = ALLTRIM(STR(ln,11,0)) ** ENDIF **CASE lctipo = 'D' ** lcdato = DTOC(&lccampo) **CASE lctipo = 'L' ** lcdato = IIF(&lccampo, ".T.", ".F.") **CASE lctipo = 'M' ** lcdato = ALLTRIM(&lccampo) + '' **ENDCASE lcaux = lcaux + lcdato + '</' + lccampo + '>' ENDFOR lcaux = lcaux + '</record>' ENDSCAN lcaux = lcaux + '</curtmp>' ENDIF RETURN lcaux ENDPROCLuego dime si pudiste ejecutar algún otro SP del DBC via ADO. Ahora no puedo probarlo porque esta computadora tiene roto el MDAC, si no ya te lo díría.