Complemento a Parámetros

Patrick, muchas gracias efectivamente me funciona este código que le he enviado, ya había consultado y me habían dicho imposible!, otros que debía hacer casting, etc, etc.
Las variables se pasarán por referencia y no por valor.
Finalmente acláreme algo, lo había hecho antes como usted me ha recomendado, pero como no me funcionaba, -¿Por qué?- Tuve que utilizar Cstr() y aún lo sigo utilizando; ¿Sería quizá por que tengo tags html en mi página asp? ¿Será por qué defino que tipo de variables recibe el componente? Será por que defino el tipo de variable que tiene que retornar la función, ¿qué puede ser?
Le envío parte del código que presenta problema:
<%@ Language=VBScript %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<BODY background=backgrnd.gif>
<P align=center><BR><FONT face="Book Antiqua" color=mediumblue size=4><STRONG>RESULTADO DE LA CONSULTA
DE SU SALDO</STRONG></FONT><BR></P>
<HR>
<%
cedcuenta = Request.QueryString("cedcuenta")
clave = Request.QueryString("clave")
tpcnt = Request.QueryString("tpcnt")
Set objMeals = Server.CreateObject("bancojd.consulta")
Set rs = Server.CreateObject("ADODB.Recordset")
Set rs = objMeals.Consultar (cstr(cedcuenta),cstr(clave),cstr(tpcnt))
Response.Write ("<form name=cons2 action=historia.htm>")
Response.Write ("<TABLE align=center border=1 bgcolor=#cece9c>")
Response.Write ("<tr><th colspan=5 bgColor=#ceceff align=center> RELACION DE CUENTAS </th></tr>")
Response.Write ("<tr><td> Fecha Apertura </td><td> Tipo Cuenta </td> <td> Número de Cuenta </td> <td> Saldo Actual </td><td> Identificación </td> </tr>")
do while not rs.EOF
Response.Write ("<tr> <td>") .....
Response.Write ("</td></tr>")
rs.MoveNext
loop
Response.Write ("<TABLE align=center border=0>")
Response.Write ("<tr> <tr> </tr><tr> </tr></tr>")
Response.Write ("<tr> <tr> </tr><tr> </tr></tr>")
Response.Write ("<tr> <th colspan=4 align=center> <input name=submit type=submit value='ACEPTAR' TABINDEX = 10> </th></tr>")
Response.Write ("</form>")
Set objMeals = nothing
rs.Close
%>
La función la inicio así:
Option Explicit
Public Function Consultar(cedcuenta As String, clave As String, tpcnt As String) As ADODB.Recordset
Nuevamente gracias.
Cordial saludo,
Alafia.
Respuesta
1
Alafia,
anlizando el código, no encuentro ningún motivo "a la vista" por el cual pueda fallar. De los "posibles", pueden ser los siguientes. En tu declaración de la función, cambia :
Public Function Consultar(cedcuenta As String, clave As String, tpcnt As String) As ADODB.Recordset
por
Public Function Consultar(byref cedcuenta As String, byref clave As String, byref tpcnt As String) As ADODB.Recordset
Que aunque debiera ser equivalente, más vale dejarlo claro.
Otra línea que yo cambiaría es :
Set rs = objMeals.Consultar (cstr(cedcuenta),cstr(clave),cstr(tpcnt))
por
Set rs = objMeals.Consultar (cedcuenta,clave,tpcnt)
Cuéntame si con eso funciona.
Por ahora, te cuento otros tips.
No es necesario hacer Set rs = Server.CreateObject("ADODB.Recordset") ya que tu funcion retorna un nuevo recordset, por lo cual esta variable creada anteriormente no se ocupa y consume memoria.
Derribando un mito, no es necesario colocar código html en sentencias response. write "" ya que la mejora de funcionamiento es mínima (del orden de 2 a 3 % en estudios de carga). En mi impresión, es más fácil de manejar el código html cuando no esta en response. Write, colocando los separadores <% y %> cuando corresponda.
Hola Patrick!
Este es el mensaje se presenta en el ASP:
Error de Microsoft VBScript en tiempo de ejecución error '800a000d'
No coinciden los tipos: 'Consultar'
/practica/consulta.asp, line 22
Esta última línea, es la invocación a la función.
Cordial Saludo
Alafia.
Hola de nuevo Patrick!
Ya vi lo que pasa, lo que se debe hacer es no especificar el tipo de variables en la función al lado del componente. Y se puede obviar incluso byref.
Public Function Consultar(byref cedcuenta, byref clave, byref tpcnt) As ADODB.Recordset
Ya lo probé y funciona, igualmente el tip funciona.
Una vez más muy agradecido.
Alafia.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas