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

Problema include y conexion

Estas en el tema de Problema include y conexion en el foro de ASP Clásico en Foros del Web. El error que estoy cometiendo debe ser bien tonto, pero no doy con el ni con informacion al respecto: una cadena de conexion en un ...
  #1 (permalink)  
Antiguo 12/09/2006, 02:32
moncherote
Invitado
 
Mensajes: n/a
Puntos:
Problema include y conexion

El error que estoy cometiendo debe ser bien tonto, pero no doy con el ni con informacion al respecto:

una cadena de conexion en un include(conexion.asp):

Código:
<%
Function conexion()
	Set conn = Server.CreateObject("ADODB.Connection")
	conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath(".\xxxx\xxx.mdb"))
end function
%>
y hago en include :

Código:
<!-- #include file="conexion.asp" -->
y llamo a la funcion cuando quiero abrir la conexion:

Código:
conexion()
sql="Select ..."
set rs = conn.execute(sql)
pero ya no llega a esto, me da el error:

Código:
Error de compilación de Microsoft VBScript (0x800A03EA)
Error de sintaxis
/xxx/xxx/conexion.asp, line 2
o sea, en la linea del function. Lo he puesto tambien como sub. Igualito.
Error habrá, pero cual??
  #2 (permalink)  
Antiguo 12/09/2006, 07:10
Avatar de diegopedro  
Fecha de Ingreso: agosto-2006
Ubicación: Santiago
Mensajes: 120
Antigüedad: 17 años, 10 meses
Puntos: 0
EN que momento devuelves la variable CONN
<%
Function conexion()
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath(".\xxxx\xxx.mdb"))
end function
%>
  #3 (permalink)  
Antiguo 12/09/2006, 07:14
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Unidad 1- Principios de Programaciòn
1.1 .Variables Locales y Globales


Bueno, ya en serio el problema que tienes es con el ámbito de las variables, y es un ejemplo claro de lo que puedes hacer con vbs que no podrías hacer con otro lenguaje que fuera compilado o exigiera declara variables.

Cita:
<%
Function conexion()
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath(".\xxxx\xxx.mdb"))
end function

conexion()
sql="Select ..."
set rs = conn.execute(sql)

%>
Creas un objeto conn de tipo Connection que solo vive el tiempo que dura la función, ya lo que loclaraste en la misma función, y por ende ASP no sabra que hacer con conn.execute.

Pero ese no es tu error. Tu error es que le pusistes paréntesis a la funciòn sin necesitarlos. Y no regresas valor

Saludos
  #4 (permalink)  
Antiguo 13/09/2006, 09:45
moncherote
Invitado
 
Mensajes: n/a
Puntos:
A ver si me entero Myakire... me dices que lo ponga así

Código:
<%
Function conexion(conn)
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath(".\xxxx\xxx.mdb"))
end function

conexion(conn)
sql="Select ..."
set rs = conn.execute(sql)

%>
es eso lo que me dices que ponga para que funcione??

PD: gracias a ambos.
  #5 (permalink)  
Antiguo 13/09/2006, 09:59
Avatar de diegopedro  
Fecha de Ingreso: agosto-2006
Ubicación: Santiago
Mensajes: 120
Antigüedad: 17 años, 10 meses
Puntos: 0
<%
sub conexion
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath(".\xxxx\xxx.mdb"))
end sub
------------------
dim conn
call conexion
sql="Select ..."
set rs = conn.execute(sql)
conn.close
set conn=nothing
%>
  #6 (permalink)  
Antiguo 13/09/2006, 10:52
moncherote
Invitado
 
Mensajes: n/a
Puntos:
no..

a mi primer post me remito. ya dije que ya lo habia probado con un sub, y me da el mismo error. no me da error de variables.

Código:
Error de compilación de Microsoft VBScript (0x800A03EA)
Error de sintaxis
/xxx/conexion.asp, line 2
que viene a ser:

Código:
<%
sub conexion <--AQUI
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath(".\xxxx\xxx.mdb"))
end sub %>

un saludo

Última edición por moncherote; 13/09/2006 a las 10:59
  #7 (permalink)  
Antiguo 14/09/2006, 05:22
moncherote
Invitado
 
Mensajes: n/a
Puntos:
...por que puede ser????

da un problema con la sintaxis, yo no veo nada mal...si subo el sub al lado del "<%" me da en la linea 1, asi que es por el sub... k pasaaa????
  #8 (permalink)  
Antiguo 14/09/2006, 07:14
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Cita:
Creas un objeto conn de tipo Connection que solo vive el tiempo que dura la función, ya lo que loclaraste en la misma función, y por ende ASP no sabra que hacer con conn.execute.

Pero ese no es tu error. Tu error es que le pusistes paréntesis a la funciòn sin necesitarlos. Y no regresas valor
Yo te mencionaba en ese mensaje que tenias dos errores, bueno, 3 en realidad:

1) El de sintaxis, que tenias parèntesis vacios en una función
2) El de lógica, que no considerabas el ámbito del objeto Conn que no vivirà fuera de la funció
3) Que no regresas nada en la función

Lo tuyo se arregla bien fácil:

<%
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath(".\xxxx\xxx.mdb"))
sql="Select ..."
set rs = conn.execute(sql)
conn.close
set conn=nothing
%>

Y ya. Sin funciones ni nada. Si no quieres estar repitiendo còdigo, pues haz un include con la creación del objeto y su apertura y lo llamas desde todos tus programas.

Tu idea de usar una función es buena, pero debestomar en cuanta los tipos de datos de regeso, por ejemplo:

Cita:
Function MiConexion
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath(".\xxxx\xxx.mdb"))
MiConexion = conn
set conn = nothing
End Function
Ahi tienes una función que crea un objeto, y lo regresa

Ahora, para usarla deberias de hacer algo como:

Cita:
Set ObjConn = Server.CreateObject("ADODB.Connection")
ObjConn = MiConexion
Set objRS = Server.createobject("ADODB.Recordset")
objRS.Open "select top 20 * from nombres a",ObjConn ,adopenstatic,adcmdtext
etcetera
....
Saludos
  #9 (permalink)  
Antiguo 14/09/2006, 08:59
moncherote
Invitado
 
Mensajes: n/a
Puntos:
hola Myakire.

Agradezco tus respuestas, pero es que creo que no nos estamos entendiendo:
- reconozco que en el primer ejemplo que puse peque con el tema de las variables (principios de programacion, ...) pero el problema creo que no es ese.
- lo que pasa es que ya no me acepta ni la sintaxis del codigo del archivo include. he puesto exactamente tu código y me pone lo mismo : error de sintaxis en la linea 2 (function miconexion).

si consigo saber por que me hace esto, creo que podré proseguir con el ejemplo que tu me has puesto. (el segundo me ha gustado.)
  #10 (permalink)  
Antiguo 14/09/2006, 12:11
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Ese código funciona perfectamente, mira te hago un copy-paste de la prueba que hice para constatarlo:

Código:
<!-- #INCLUDE File="adovbs.inc" -->
<%
Function MiConexion
 Set oConn1 = Server.CreateObject("ADODB.Connection")
 oConn1.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="& Server.MapPath("prueba.mdb")
 MiConexion = oConn1
 set oConn1 = nothing
End Function
%>
<script runat=server LANGUAGE="VBSCRIPT">

  Dim oConn1,oRs1
  Set oConn1 = Server.CreateObject("ADODB.Connection")
  Set oRS1 = Server.createobject("ADODB.Recordset")

'oConn1.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="& Server.MapPath("prueba.mdb")
oConn1 = MiConexion 
oRS1.Open "select top 20 * from nombres a",oConn1,adopenstatic,adcmdtext

vector = oRs1.GetRows

NumCampo = 1 ' La posición del campo que corresponda con "nombre_cliente"
For contador=0 to Ubound(vector,2)
  nomcli = vector(NumCampo, contador)
  if len(nomcli)>4 then
     nomcli = mid(nomcli,1,4)&".."
  end if
	response.write vector(NumCampo, contador) & ": " & nomcli & "<br>"
Next	
	
'	while not oRs1.EOF
'	  response.write oRs1(1)&"<br>"
'	  oRs1.MoveNext
'	Wend
</script>
No borre ni quite nada, si eso lo pegas en un .asp y lo corres (claro, si tienes el archivo adovbs) te debe de funcionar.

Aqui el chiste es no aferrarse a algo y ver las posibilidades. Recuerda que esta ayuda que te trato de brindar es de buena fè y con la única intensión de ayudarte a aprender.

Saludos
  #11 (permalink)  
Antiguo 15/09/2006, 08:20
moncherote
Invitado
 
Mensajes: n/a
Puntos:
De acuerdo ok

Myakire, de verdad te agradezco toda la ayuda, veo en la cantidad de respuestas que me has dado que realmente intentas ayudarme. Puede que tengas razón y yo me haya cerrado de alguna forma, por lo que trataré de empezar de cero.

quiero que este simple codigo fuente :

Código:
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath(".\xxxx\xxx.mdb"))
sql="Select ..."
set rs = conn.execute(sql)
poder optimizarlo un poco, para no tener que escribir cada vez las lineas de crear la conexion en cada pagina, simplemente hacer una llamada al codigo guardado en un include y poder ejecutar un recordset.

algo asi como

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

conectate <-- aqui llamo al codigo guardado en el include "conexion.asp"
sql="Select ..."
set rs = conn.execute(sql)
gracias
  #12 (permalink)  
Antiguo 18/09/2006, 08:36
moncherote
Invitado
 
Mensajes: n/a
Puntos:
Pregunta ..

alguien??? que no salgo desta!!! que debe ser bien facil!!
  #13 (permalink)  
Antiguo 18/09/2006, 14:26
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
<!-- #include file="conexion.asp" -->
<%
sql="Select ..."
set rs = conn.execute(sql)

y en conexion.asp

Set conn = Server.CreateObject("ADODB.Connection")
conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath(".\xxxx\xxx.mdb"))
  #14 (permalink)  
Antiguo 18/09/2006, 20:57
Avatar de Falhor  
Fecha de Ingreso: diciembre-2005
Ubicación: Buenos Aires
Mensajes: 425
Antigüedad: 18 años, 6 meses
Puntos: 5
Una cosa... En este código:
Código:
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath(".\xxxx\xxx.mdb"))
sql="Select ..."
set rs = conn.execute(sql)
Hay algo que no entiendo... No creás el objeto RecordSet...
Está bien, entiendo que no es el problema... El tema es que creo que debería funcionar... No puede mandarte error en "sub conexion" =S.

Saludos.
  #15 (permalink)  
Antiguo 19/09/2006, 06:33
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Supongo que lo del recordSet es algo que se obió, debido a que el problema original es que moncherote desea algo para no estar repitiendo la cadena de conexión en cada página (creo yo que es previniendo que en algún momento se cambiará de nombre o ruta)
  #16 (permalink)  
Antiguo 19/09/2006, 08:35
 
Fecha de Ingreso: febrero-2005
Mensajes: 29
Antigüedad: 19 años, 3 meses
Puntos: 0
Cita:
Iniciado por Myakire Ver Mensaje
<!-- #include file="conexion.asp" -->
<%
Set rs = Server.CreateObject("ADODB.RecordSet") 'para que no sea obvio...

sql="Select ..."
set rs = conn.execute(sql)

y en conexion.asp

Set conn = Server.CreateObject("ADODB.Connection")
conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath(".\xxxx\xxx.mdb"))
Eso funciona a la perfección....apoyo a Myakire
  #17 (permalink)  
Antiguo 19/09/2006, 10:29
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Hay formas mejores y/o más estructurados (una clase, por ejemplo), pero con lo que tenemos en ASP 3.0, no hay muchas formas de escaparse un include.
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 22:47.