Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Feature not available when calling a SP
Message
From
08/03/2002 22:51:48
 
 
To
08/03/2002 20:56:45
Fausto Garcia
Independent Developer
Lima, Peru
General information
Forum:
Visual FoxPro
Category:
Internet applications
Miscellaneous
Thread ID:
00630498
Message ID:
00630508
Views:
19
Hola, Fausto.

Well, first, we speak Spanish here. :)

>The following SP I've written as part of a VFP 7 database works well if I call it from the VFP environment (it receives the name of a database table, opens it and returns its entire content as a well-formed XML string). Now I need to invoke it from an ASP page using the OLEDB provider but I get an error message which says "Feature is not available" so my guess is that I am using a forbidden command, problem is I can't figure out which is the violating command! Here is my SP's code:

Tengo varios comentarios que hacerte, además de preguntarte si estás seguro que puedes llamar a Procedimientos Almacenados dentro del DBC por OleDB. Tengo la enorme sospecha de que esto es lo que te está diciendo que no puede hacer. ¿Funciona algún otro que hayas hecho?

Al margen:
1. Si estás trabajando con VFP 7, ¿porqué construyes el XML manualmente cuando puedes utilizar CursorToXML()?

2. Noto que utilizas mucha macrosustitución, que no es recomendable por varios temas, pero además no es necesaria. Te marco las alternativas en tu código.
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
ENDPROC
Luego 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.

Saludos,
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform