Foros del Web » Programando para Internet » ASP Clásico »

urgente funciones en asp y bases de datos

Estas en el tema de urgente funciones en asp y bases de datos en el foro de ASP Clásico en Foros del Web. hola, tengo 2 paginas .asp la primera tiene este codigo y se llama asi -----funcionesasp.asp------- Código: function conx_bd(nombre_bd) 'CONEXION A BASE DE DATOS DE TODOS ...
  #1 (permalink)  
Antiguo 26/09/2004, 15:39
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 5 meses
Puntos: 4
urgente funciones en asp y bases de datos

hola, tengo 2 paginas .asp
la primera tiene este codigo y se llama asi

-----funcionesasp.asp-------

Código:
 
function conx_bd(nombre_bd)
'CONEXION A BASE DE DATOS DE TODOS LOS MODULOS 
'DE MANERA GENERAL. 
'EL PARAMETRO nombre_bd CORRESPONDE AL NOMBRE DE LA
'BASE DE DATOS QUE SE DESEE ABRIR
   con = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
	  "Data Source="& Server.MapPath("../bd/"&nombre_bd&".mdb")&";"  & _
	  "Jet OLEDB:Database Password=miclave;"
set conx = Server.Createobject("adodb.connection")
Set rs = Server.CreateObject("ADODB.Recordset")
conx.open con
end function

y esta otra pagina
--------nuevo.asp---------------


Código:
 
<!--#include file="../comunes/funcionesasp.asp"-->
<%
'llamado a la funcion
'conx_bd(nombre_bd) de la pagina funcionesasp.asp

conx_bd("syt")

sql= "SELECT * FROM area"
rs.Open sql, con, 3, 3 
%>
   <select name="area" id="area">
  <% do while not rs.EOF %>
		<option value="<%=rs("id")%>"><%=rs("nombre")%></option>
  <% rs.movenext 
  loop
  %>
	  </select>

la idea es mandar como parametro el nombre de la base de datos para no colocarlo en todas las paginas qe uso y usar una sola conexion para todas mis bases de datos.

me saca este error

<LI>Tipo de error:
Error de Microsoft VBScript en tiempo de ejecución (0x800A01A8)
Se requiere un objeto: ''
/oktopus/standaresytips/nuevo.asp, línea 19
donde linea 19 es la que esta en negrita arriba

no entiendo ke pueda ser.. alguien tiene alguna idea de que estoy haciendo mal?
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #2 (permalink)  
Antiguo 26/09/2004, 17:06
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 7 meses
Puntos: 4
Puede que tenga algún problema el hecho de llamar a una función aunque parece que todo está normal. Se me ocurre que en lugar de llamar a la función pasándole el nombre de la base de datos le asignes el nombre a una variable antes de hacer el include:

Código:
<%
nombre_bd = "syt"
%>

<!--#include file="../comunes/funcionesasp.asp"-->

<%
sql= "SELECT * FROM area"
rs.Open sql, con, 3, 3
%>
Y el include de esta manera:

Código:
<%
con = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
	  "Data Source="& Server.MapPath("../bd/"&nombre_bd&".mdb")&";"  & _
	  "Jet OLEDB:Database Password=miclave;"
set conx = Server.Createobject("adodb.connection")
Set rs = Server.CreateObject("ADODB.Recordset")
conx.open con
%>
no te olvides de la setiquetas de ASP (<%%>) en el include ni de comprobar que efectivamente las rutas están bien, tanto del include como de la base de datos.

Ya me contarás.

Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #3 (permalink)  
Antiguo 26/09/2004, 19:20
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 5 meses
Puntos: 4
gracias por intentar ayudarme... pero el problema de esto es qeu ese include lovoy a meter en todas las paginas de mi programa son como 500 la idea de colocarlo dentro de una funcion es que solo se procesara la funcion cuando la llamara si no no. entonces en las paginas que no las use de todos modos se abre la conexion y se crean los objetos. cosa que es ineficiente.. espero me puedas ayudar o decir porque puede salir este error..
gracias... seguire intentando con la funcion..
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #4 (permalink)  
Antiguo 27/09/2004, 03:02
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98

Interesante...una función básicamente deberá devolver un valor, en este caso debería devover un objeto, el objeto conx...pero creo que no hay forma de librarse de instanciar el recordset, sin probarlo, se me ocurre algo así, a ver si funciona:

Código:
<%
function conx_bd(nombre_bd)
  'CONEXION A BASE DE DATOS DE TODOS LOS MODULOS 
  'DE MANERA GENERAL. 
  'EL PARAMETRO nombre_bd CORRESPONDE AL NOMBRE DE LA
' BASE DE DATOS QUE SE DESEE ABRIR
   con = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
	  "Data Source="& Server.MapPath("../bd/"&nombre_bd&".mdb" &";"  & _
	  "Jet OLEDB:Database Password=miclave;"
  set conx = Server.Createobject("adodb.connection")
  conx.open con
  conx_db = conx
end function
%>
-----------------------------------------------------------------------
-----------------------------------------------------------------------
<%
sql= "SELECT * FROM area"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conx_bd("syt"),  3, 3
%>


   <select name="area" id="area">
  <% do while not rs.EOF %>
		<option value="<%=rs("id")%>"><%=rs("nombre")%></option>
  <% rs.movenext 
  loop
  %>
	  </select>
A ver que pasa...

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway

Última edición por u_goldman; 27/09/2004 a las 03:04
  #5 (permalink)  
Antiguo 27/09/2004, 17:28
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 5 meses
Puntos: 4
ok. gracias por la intencion, lo intente como dices pero me sale eeste error;

ADODB.Recordset (0x800A0BB9)
Argumentos incorrectos, fuera del intervalo permitido o en conflicto con otros.
/oktopus/standaresytips/nuevo.asp, línea 33

que puede ser? la linea 33 es donde esta
rs.Open sql, conx_bd("syt"), 3, 3

espero me podas ayudar
gracias
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #6 (permalink)  
Antiguo 27/09/2004, 17:35
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 7 meses
Puntos: 4
Aunque en realidad los valores que tienes en CursorType y LockType deberían ser los correctos ¿por qué no pruebas otros? Por ejemplo 0, 1

Su significado aquí: http://www.asptutor.com/asp/vart.asp?id=5

Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #7 (permalink)  
Antiguo 27/09/2004, 17:42
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 7 meses
Puntos: 4
Por cierto ¿has probado a incluir el archivo adobvbs.inc?

He leido por ahí que ese error se subsanaba con eso.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #8 (permalink)  
Antiguo 27/09/2004, 20:21
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 5 meses
Puntos: 4
hola, si tengo el archivo adodvbs.inc includo... me sigue saliendo el mismo error asi cambie los cursores..
no sera proqeu cuando instancio los objetos de conexion y re recordset dentro de una funcion me qeudan como locales osea que no se pueden usar fuera de la funcion? me imagino qeu cuando cierro con end function, los objetos se matan..
nose la verdad no se que pueda pasar. espero me puedas colaborar.. parece algoo tan simple pero no le veo por donde pueda ser el error..
gracias.
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #9 (permalink)  
Antiguo 28/09/2004, 09:54
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Cita:
no sera proqeu cuando instancio los objetos de conexion y re recordset dentro de una funcion me qeudan como locales
Cita:
una función básicamente deberá devolver un valor, en este caso debería devover un objeto, el objeto conx
Cita:
pero creo que no hay forma de librarse de instanciar el recordset


Acabo de probar el código como te lo puse y funciona, tal cual el código que te puse, donde te menciono que si, el recordset lo deberás tener fuera de la función, pues esta función solo regresa la conexión.


Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway

Última edición por u_goldman; 28/09/2004 a las 09:57
  #10 (permalink)  
Antiguo 28/09/2004, 10:16
 
Fecha de Ingreso: agosto-2003
Ubicación: Guatemala
Mensajes: 94
Antigüedad: 20 años, 10 meses
Puntos: 0
Sobre Variables

La funcion en si no se encuentra mal programada, lo que sucede es que el objeto rs, se encuentra fuera de ambito, ya que lo declaraste dentro de la funcion y no fuera, lo ideal seria que declararas la variable rs fuera de la funcion, y dentro la inicializas como un objeto Recordset.

De esta manera:

Código:
Dim rs
function conectar_bd (parametros)
codigo...
Set rs = Server.CreateObject("ADODB.Recordset")
end function
Pruebalo y luego me cuentas. Saludos.
__________________
Luis Pirir
Programador Web
Móvil: (502) 50623292
  #11 (permalink)  
Antiguo 28/09/2004, 10:21
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 5 meses
Puntos: 4
nada, ugoldman me sale el mismo error, lo qeu he hecho es copiar tu codigo y pegarlo tal cual lo colocas alli y me sale el mismo error,
ADODB.Recordset (0x800A0BB9)
Argumentos incorrectos, fuera del intervalo permitido o en conflicto con otros.
/oktopus/standaresytips/nuevo2.asp, línea 37


y lo pruebo de la manera que me dice eaguilar y tampoco porqeu e puede ser...
sera mucha molestia si te envio el codigo y miras qeu diablos estoy haciendo mal?
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #12 (permalink)  
Antiguo 28/09/2004, 11:07
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Bueno, la única falla está en negritas...pequeña gran falla no estábamos regresando nada de la función, por eso es que mandaba el error.


Código:
<%
function conx_bd(nombre_bd)
  'CONEXION A BASE DE DATOS DE TODOS LOS MODULOS 
  'DE MANERA GENERAL. 
  'EL PARAMETRO nombre_bd CORRESPONDE AL NOMBRE DE LA
' BASE DE DATOS QUE SE DESEE ABRIR
   con = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
	  "Data Source="& Server.MapPath("../bd/"&nombre_bd&".mdb" &";"  & _
	  "Jet OLEDB:Database Password=miclave;"
  set conx = Server.Createobject("adodb.connection")
  conx.open con
  conx_bd = conx
end function
%>
-----------------------------------------------------------------------
-----------------------------------------------------------------------
<%
sql= "SELECT * FROM area"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conx_bd("syt"),  3, 3
%>


   <select name="area" id="area">
  <% do while not rs.EOF %>
		<option value="<%=rs("id")%>"><%=rs("nombre")%></option>
  <% rs.movenext 
  loop
  %>
	  </select>
Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #13 (permalink)  
Antiguo 28/09/2004, 14:17
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 5 meses
Puntos: 4
Oye muchísimas gracias por ayudarme a corregir ese codigo
Ya quedo perfecto,..
Me salvaste. No veia el error por ningun lado.

:)
LEXUS
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #14 (permalink)  
Antiguo 29/09/2004, 09:51
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 5 meses
Puntos: 4
UNA ULTIMA PREGUNTICA.. SEGUN EL CODIGO QUE TE ENVIE DONDE ESTABAN TODAS MIS FUNCIONES.. HICE UNA ULTIMA FUNCION PARA CERRAR LAS CONEXIONES Y DESTRUIR OBJETOS.. SERA QUE ASI ESTA BIEN? O COMO SERIA.

function cerrar_con()
conx.close
rs.close
set conx = nothing
set con = nothing
set rs = nothing
End function

GRACIAS POR TODO.
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #15 (permalink)  
Antiguo 29/09/2004, 10:21
Avatar de Saruman  
Fecha de Ingreso: mayo-2003
Ubicación: Panama city, Panama, Panama
Mensajes: 1.154
Antigüedad: 21 años
Puntos: 5
prueben con esta. me funciona perfectamente y es la que utilizo en todos mis portales

funcion.asp

Código:
Function DBOpenConection()
  Dim Master
  strDBPath = "db/datos.mdb"
	 
  Set Master = Server.CreateObject("ADODB.Connection")
  Master.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath(strDBPath))
  Set DBOpenConection = Master
End Function
default.asp

Código:
<!--#include file="funcion.asp"-->

set Master = DBOpenConection()

sql = "select * from tabla"
set RS = Master.Execute(sql)
__________________
Saruman

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them.
  #16 (permalink)  
Antiguo 29/09/2004, 10:32
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98

Para cerrar y destruir los objetos...me parece que en alguna ocasión alguien posteó un script que destruía cada objeto abierto, supuestamente una vez finalizado el script, se deberían destruir, pero no siempre es así, en que buen lío nos metimos, investigaré como podemos hacer...


Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #17 (permalink)  
Antiguo 29/09/2004, 13:53
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 5 meses
Puntos: 4
ok, muchas gracias, revisare tambien a evercom oes...

por otro lado gracias a los qeu intentan ayudar con las funciones de conexion a una base de datos, ya u_goldman me ayudo a realizarla y qeudo perfecta..
gracias a todos..
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:14.