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

Crear muchas cenexiones mediante una SUB

Estas en el tema de Crear muchas cenexiones mediante una SUB en el foro de ASP Clásico en Foros del Web. < > Buenas, tengo una SUB para conectarme a una BD y crear una conexión a ella: este código está en un include: Código: DIM ...
  #1 (permalink)  
Antiguo 16/09/2005, 14:41
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años, 2 meses
Puntos: 535
Crear muchas cenexiones mediante una SUB

<>


Buenas, tengo una SUB para conectarme a una BD y crear una conexión a ella:

este código está en un include:
Código:
DIM Conn 'no sé por qué si le saco esto no funciona
Sub ConnOn()
	cst = "Driver={SQL Server};Server=ifamserver;Database=base1;UID=;PWD="
	Set Conn = Server.CreateObject("ADODB.Connection")
	Conn.open cst
End Sub

y éste está en el script y hago un include al código de arriba:
Código:
ConnOn() 'acá la abro
SQL = "SELECT ... blablabla"
Set rs = '... bablabla
rs.Open SQL, Conn 

Pero creo que me voy a tener que conectar en un mismo script a más de una base de datos (por lo menos 2)


Pensé en modificar la SUB para pasarle el nombre de la BD como argumento, pero... como diferencio a las conexiones si ambas se llamarían Conn??? (que daría errores, lógicamente)


No sé si fui claro, pero la idea es poder conectarme así:

rs1.Open SQL, SUBConectarCon('base1')
rs2.Open SQL, SUBConectarCon('base2')


</>
__________________
...___...
  #2 (permalink)  
Antiguo 16/09/2005, 15:06
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años, 2 meses
Puntos: 535
Bueno, buscando llegué a un ejemplo... pero es prácticamente lo mismo que hago yo:
http://www.shiningstar.net/articles/...s.asp?ID=ROLLA
__________________
...___...
  #3 (permalink)  
Antiguo 16/09/2005, 15:09
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
No se si funcione, pero que tal algo como esto:

Código:
Sub ConnOn(ds_nombre)
        execute "Conn_"&db_nombre
	cst = "Driver={SQL Server};Server=ifamserver;Database=base1;UID=;PWD=  "
	Set "Conn_"&db_nombre = Server.CreateObject("ADODB.Connection")
	"Conn_"&db_nombre.open cst
End Sub


rs1.Open SQL, SUBConectarCon('base1')
rs2.Open SQL, SUBConectarCon('base2')


Editando: execute en lugar de exec
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #4 (permalink)  
Antiguo 16/09/2005, 15:50
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años, 2 meses
Puntos: 535
pues no


Código:
Sub SUBConectarCon(db_nombre)
    execute "Conn_" & db_nombre
	cst = "Driver={SQL Server};Server=ifamserver;Database=" & db_nombre & ";UID=;PWD="
	Set "Conn_" & db_nombre = Server.CreateObject("ADODB.Connection")
	"Conn_" & db_nombre.open cst
End Sub

set rs1 = server.CreateObject("adodb.recordset")
rs1.Open "SELECT * FROM Provincias", SUBConectarCon("IFAM_AnteDesarrollo")
El código anterior me dice:

Código:
Error de compilación de Microsoft VBScript error '800a03f3'
Se esperaba '='
...., line 16

Set "Conn_" & db_nombre = Server.CreateObject("ADODB.Connection")


Modificando un poco la sub...

Código:
Sub SUBConectarCon(db_nombre)
   execute "Conn_" & db_nombre
	cst = "Driver={SQL Server};Server=ifamserver;Database=" & db_nombre & ";UID=;PWD="
	Set eval("Conn_" & db_nombre) = Server.CreateObject("ADODB.Connection")
	eval("Conn_" & db_nombre).open cst
End Sub


'Sub SUBConectarCon(db_nombre)
'    execute "Conn_" & db_nombre
'	cst = "Driver={SQL Server};Server=ifamserver;Database=" & db_nombre & ";UID=;PWD="
'	Set "Conn_" & db_nombre = Server.CreateObject("ADODB.Connection")
'	"Conn_" & db_nombre.open cst
'End Sub

set rs1 = server.CreateObject("adodb.recordset")
rs1.Open "SELECT * FROM Provincias", SUBConectarCon("IFAM_AnteDesarrollo") 
me dice...
Código:
Error de Microsoft VBScript en tiempo de ejecución error '800a000d'
No coinciden los tipos: 'SUBConectarCon'
.../Default.asp, line 23
En donde la línea 23 es la que marqué en rojo (por lo menos, acá sale de la función... debe ser que no está devolviendo un objeto.. ¿no?)
__________________
...___...
  #5 (permalink)  
Antiguo 16/09/2005, 16:01
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Y si cambias la Sub por una Function donde devuelvas el eval("string")?

Deja hacer unas pruebas a ver si podemos echarlo a volar...
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #6 (permalink)  
Antiguo 16/09/2005, 16:09
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años, 2 meses
Puntos: 535
u_g, gracias, igual ahora por fin estoy terminando mi semana y no creo que haga nada hasta el lunes que viene (el fin de semana voy a estar con otras cosillas )

Ya me voy! Ya me voy raudamente por las cervezas bien frías!


__________________
...___...
  #7 (permalink)  
Antiguo 16/09/2005, 17:18
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Marito AZ, tu con tus cervezas y yo aqui programando

Bueno, te cuento, despues de pensarlo un poco, se me ocurrio hacer una coleccion de conexiones, no se si sera el approach que necesitas, pero esto funciona:

Código:
<%
Function ConectionSet(db_nombre)
	Dim arr()
	arrNombres = split(db_nombre, ":.")
	for j = 0 to uBound(arrNombres)
		cst = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath(".") & "\" & arrNombres(j)
		Set ObjConn = Server.CreateObject("ADODB.Connection")
		ObjConn.Open cst
		Redim Preserve arr(j+1)
		arr(j) = ObjConn
	next
	erase arrNombres
	ConectionSet = arr
End Function

conections = ConectionSet("base1.mdb:.base2.mdb")

strSQL = "SELECT * FROM tbl_date"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open strSQL, conections(0), 3, 3
while not rs.EOF
	Response.Write rs(1) & "<br>"
	rs.MoveNext
wend

Response.Write "<hr>"

strSQL = "SELECT * FROM cities"
Set rs2 = Server.CreateObject("ADODB.Recordset")
rs2.Open strSQL, conections(1), 3, 3
while not rs2.EOF
	Response.Write rs2(2) & "<br>"
	rs2.MoveNext
wend
%>

A la postre a lo mejor resulta lo mismo que "hard-codearlas" pero bueno, esta bien para perder el tiempo un rato...


Salu
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #8 (permalink)  
Antiguo 16/09/2005, 18:24
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 20 años, 3 meses
Puntos: 6
Un apunte: sobre por qué no funciona si no la defines fuera (jeje a mí me pasó lo mismo y ya me dijiste por qué era), es porque la toma como variable interna de la función, no global. Esto pasa también con los objetos recordset, por ejemplo, y no sé si hasta con variables normales.

Todo lo que vaya a ser creado dentro de la función, si quieres que pueda ser usado fuera, tienes que declararlo como variable global.

Saludos
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 15:35.