Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Feature not available when calling a SP
Message
 
 
À
08/03/2002 20:56:45
Fausto Garcia
Independent Developer
Lima, Pérou
Information générale
Forum:
Visual FoxPro
Catégorie:
Applications Internet
Divers
Thread ID:
00630498
Message ID:
00630508
Vues:
21
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,
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform