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

Ayuda Dll Please

Estas en el tema de Ayuda Dll Please en el foro de ASP Clásico en Foros del Web. He creado una dll con el siguiente código: Sub conectar() Set oconn = Server.CreateObject("adodb.connection") strconn = "Driver={SQL Server};Description=xxx;SERVER=ANDRES;UID=administ rador;PWD=xxx;DATABASE=xxx" oconn.open strconn End Sub Es suficiente ...
  #1 (permalink)  
Antiguo 16/12/2002, 02:19
 
Fecha de Ingreso: septiembre-2002
Mensajes: 39
Antigüedad: 22 años, 8 meses
Puntos: 0
Ayuda Dll Please

He creado una dll con el siguiente código:

Sub conectar()

Set oconn = Server.CreateObject("adodb.connection")
strconn = "Driver={SQL Server};Description=xxx;SERVER=ANDRES;UID=administ rador;PWD=xxx;DATABASE=xxx"
oconn.open strconn

End Sub

Es suficiente con esto para que funcione desde mi página asp. En esta página Asp inserto el siguiente código:

<%
Dim objeto
set objeto = server.createobject("projectoprueba.classprueba")


strsql = "SELECT TOP 3 * FROM noticias "
Set RS = Server.CreateObject("ADODB.Recordset")
RS.Open strSQL, oconn,3,1
%>

al ejecutarla me muestra un error:

Argumentos incorrectos, fuera del intervalo permitido o en conflicto con otros. en la linea

RS.Open strSQL, oconn,3,1

Que estoy haciendo mal para poder cargar la dll yhacer el recordset desde mi página asp?

Nota: La Dll la registro sin ningun tipo de problemas puesto que solo con las 2 primeras lineas de la página asp carga sin problemas.


Gracias de antemano
  #2 (permalink)  
Antiguo 16/12/2002, 02:33
 
Fecha de Ingreso: febrero-2002
Ubicación: Mi ASP Bunker
Mensajes: 397
Antigüedad: 23 años, 2 meses
Puntos: 1
Por lo q veo instancias tu dll pero a la variable objeto, y no a la variable "oconn" que pasas como argumento al abrir el RS.

entonces seria :

Dim oconn
set oconn = server.createobject("projectoprueba.classprueba")

va??
  #3 (permalink)  
Antiguo 16/12/2002, 02:42
 
Fecha de Ingreso: septiembre-2002
Mensajes: 39
Antigüedad: 22 años, 8 meses
Puntos: 0
Intento fallido

Lo intente asi:

Dim oconn
set oconn = server.createobject("projectoprueba.classprueba")

strsql = "SELECT TOP 3 * FROM noticias "
Set RS = Server.CreateObject("ADODB.Recordset")
RS.Open strSQL, oconn,3,1

pero sigue dando el mismo error en la ultima linea
  #4 (permalink)  
Antiguo 16/12/2002, 02:51
 
Fecha de Ingreso: febrero-2002
Ubicación: Mi ASP Bunker
Mensajes: 397
Antigüedad: 23 años, 2 meses
Puntos: 1
Aparte de eso, entonces la dll no te retorna nada, solo abre la conexion y nada mas, pero no retorna nada, entonces cambia la dll por :

Function conectar() 'cambiar Sub por Function

Set oconn = Server.CreateObject("adodb.connection")
strconn = "Driver={SQL Server};Description=xxx;SERVER=ANDRES;UID=administ
rador;PWD=xxx;DATABASE=xxx"
oconn.open strconn

conectar = oconn ' agregar esto

End Function
  #5 (permalink)  
Antiguo 16/12/2002, 03:17
 
Fecha de Ingreso: septiembre-2002
Mensajes: 39
Antigüedad: 22 años, 8 meses
Puntos: 0
De nuevo argumentos incorrectos

DLL:

Function conectar()

Set oconn = Server.CreateObject("adodb.connection")
strconn = "Driver={SQL Server};Description=Comsultasonline;SERVER=ANDRES; UID=administrador;PWD=matrix2003;DATABASE=tiendaa3 st"
oconn.open strconn

conectar = oconn

End Function


Páginas ASP:

<%
Dim oconn
set oconn = server.createobject("demo3.classdemo3")


strsql = "SELECT TOP 3 * FROM noticias "
Set RS = Server.CreateObject("ADODB.Recordset")
RS.Open strSQL, oconn,3,1

%>

error en la linea
RS.Open strSQL, oconn,3,1

Tipo de error:
ADODB.Recordset (0x800A0BB9)
Argumentos incorrectos, fuera del intervalo permitido o en conflicto con otros.


me vuelvo loco.

¿Puede deberse a que estoy registrando varias Dll con el objeto oconn?
  #6 (permalink)  
Antiguo 16/12/2002, 03:22
 
Fecha de Ingreso: febrero-2002
Ubicación: Mi ASP Bunker
Mensajes: 397
Antigüedad: 23 años, 2 meses
Puntos: 1
No, es que no es tan simple e = crear una dll como un codigo asp.
Te recomendaria mejor veas este link como crear una dll:

http://www.forosdelweb.com/showthrea...&highlight=dll

sino busca : dll con el buscador, hay algunos usuarios q crearon algo similar a lo q necesitas y te puedan ayudar con certeza.

saludos!
  #7 (permalink)  
Antiguo 16/12/2002, 04:21
 
Fecha de Ingreso: septiembre-2002
Mensajes: 39
Antigüedad: 22 años, 8 meses
Puntos: 0
No lo consigo

Por favor alguien me puede pasar un ejemplo simple de una dll con una conexion a base de datos y una página asp con la llamada a la funcion o sub haciendo un recordselect.

PLEASE no se si es mucho pedir pero me es de vital importancia.

Gracias nochero por tu ayuda peor no encontre nada claro en las referencias de los foros.
  #8 (permalink)  
Antiguo 16/12/2002, 07:02
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 23 años, 5 meses
Puntos: 0
todavia no se que hace tu dll...si lo que hace es realizar una consulta sql a tu base de datos...entonces lo que tendrias que referenciar seria el recordset al resultado de tu funcion.

te dare un pequeño ejemplo.

codigo de tu dll

******************************
Public Function Rescatar() As Recordset

Dim ConnectionString As String
Dim strsql As String
Dim rs As Recordset


ConnectionString = "Driver={SQL Server};Description=xxx;SERVER=ANDRES;UID=administ
rador;PWD=xxx;DATABASE=xxx"
Set rs = CreateObject("ADODB.Recordset")
strsql = "select * from tabla"
rs.Open strsql, ConnectionString, adOpenForwardOnly

Set Rescatar = rs

End Function

***************************
en tu codigo de asp para llamar el retorno del recorset se hace de la siguiente forma.

CODIGO ASP

Set objeto = Server.CreateObject("nombre_dll.nombre_clase")
Set rs = objeto.Rescatar()
while not rs.eof
response.write rs("campo1")
rs.movenext
wend
  #9 (permalink)  
Antiguo 16/12/2002, 07:42
 
Fecha de Ingreso: septiembre-2002
Mensajes: 39
Antigüedad: 22 años, 8 meses
Puntos: 0
error al copilar código

Hola bakanzipp

he copiado el código que me facilitas en un nuevo proyecto en visual 6

al crearlo e intentar copilar la dll me muestra el siguiente mensaje

user-defined type not defined en la linea:

Public Function Rescatar() As Recordset

a que se debe esto?
  #10 (permalink)  
Antiguo 16/12/2002, 07:45
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 23 años, 5 meses
Puntos: 0
revistaste bien que tu proyecto tengas las componentes del recordset en las referencia?..

haz esto no copies y pegues..

sino que escribe el encabezado de la funcion y cuando ecribas AS...verifica que exista el uso de recordset, sino agregaselos a la referencia...
  #11 (permalink)  
Antiguo 16/12/2002, 07:58
 
Fecha de Ingreso: septiembre-2002
Mensajes: 39
Antigüedad: 22 años, 8 meses
Puntos: 0
Funcionó

Muchisimas gracias por tu tiempo y tu ayuda. Tu Código funcionón perfectamente con tus aclaraciones.

ESPERO que este post sea de utilidad para otros usuarios.

Gracias de nuevo.
  #12 (permalink)  
Antiguo 16/12/2002, 08:34
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 23 años, 5 meses
Puntos: 0
para empezar es un ejemplo sencillo...pero a medida que vayas avanzando puedes pulir esto de una mejor forma...

lo idel seria.

asp-->dll-->stored procedure.

asi en vez de ejecutar directamente el sql en tu dll lo hagas en un procedimiento de almacenado..

ademas para el tema de conexion es recomendable crear un modulo aparte que cree la conexion y sea llamado en cada procedimiento o funcion de tus clases...

recuerda de liberar los objetos que crees para que no ocupes demasiados recursos...

uuf...en fin muchas cosas..de ahi puedes darle mas seguridad encriptando tu string de conexion...o leerlo desde un .ini.

la cosa es ir poco a poco...ah..y una cosa importante...trata de buscar articulos de microsoft de que propiedades tienen que r chekeadas para la compilacion de tu dll..

las dll's son bastantes problematicas...

hay ke puro irse a .net
  #13 (permalink)  
Antiguo 16/12/2002, 13:28
 
Fecha de Ingreso: septiembre-2002
Mensajes: 39
Antigüedad: 22 años, 8 meses
Puntos: 0
Cuestion de variables

He creado mi componente Dll y esta es parte del código:
(Añadi las referencias de Active Server Pages library y Data Objets Recordset)



Private Response As Response

Sub OnStartPage(ContextoPasado As ScriptingContext)


Set miContexto = ContextoPasado

Set Response = miContexto.Response
End Sub

Public Function configuracion() As Recordset

Dim ConnectionString As String
Dim strsql As String
Dim rs As Recordset


ConnectionString = "Driver={SQL Server};Description=Comsultasonline;SERVER=****;UI D=***;PWD=****;DATABASE=****"

' divisas


Set rs = CreateObject("ADODB.Recordset")
strsql = "select * from divisas"
rs.Open strsql, ConnectionString, adOpenForwardOnly

espana = rs("espana")
malemania = rs("alemania")
mfrancia = rs("francia")
mitalia = rs("italia")
mportugal = rs("portugal")
mholanda = rs("holanda")
minglaterra = rs("inglaterra")
musa = rs("usa")

' este bucle solo lo inserto de prueba - NO HACE FALTA solo me pinta un registro

While Not rs.EOF
Response.Write rs("espana")
rs.MoveNext
Wend

Set rs = Nothing

End Function

----------------------------------------
En mi página ASP insertto el siguiente código:

<%
Set zamijemplo = Server.CreateObject("midll.miclass")

cObject.configuracion


%>

Como es lógico en el resultado me el primer registro de la tabla pero mi cuestion es...

¿Como mantengo las variables de la dll activas en la página ASP, por ejemplo el resultado de espana que almaceno en la variable mespana?
  #14 (permalink)  
Antiguo 16/12/2002, 13:37
 
Fecha de Ingreso: septiembre-2002
Mensajes: 39
Antigüedad: 22 años, 8 meses
Puntos: 0
aclaracion

todas las variables que utilizo creo que deberian de sere constantes puesto que para que las páginas funcionen deben de recoger los valores de todas esas variables.

Que metodo utilizo para que sus valores sean constantes y puedan recogerse desde cualquier parte de la página

¿Es preferible hacer cada consulta dentro de una clase si requiero de todas las variables a la vez?
  #15 (permalink)  
Antiguo 16/12/2002, 13:50
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 23 años, 5 meses
Puntos: 0
por mas que repaso tu codigo no entiendo que es lo que quieres hacer...

podrias explayarte un poco mas?
  #16 (permalink)  
Antiguo 16/12/2002, 14:03
 
Fecha de Ingreso: septiembre-2002
Mensajes: 39
Antigüedad: 22 años, 8 meses
Puntos: 0
me explico

Posee varias páginas asp.

imaginemos que antes tendria:
1. Página principal asp
1. archivo include con la conexión
1. archivo include config con los recordset de necesarios para extraer las variables.

Suponiendo que por ejemplo tengo una tabla llamada divisas
con campos correspondientes a x paises. Sacar los valores de cada país para cargarlos en la página como valores constantes no para pintarlos.

Otro ejemplo.

Una tabla con 3 campos

1. ModoBanner true/false
2. nombre del banner gif
3. nombre del banner flash

si Modo Banner es true (1) pues tendria que recoger la variable que almacena el nombre del archivo del banner correspondiente
y publicarlo.

Si como antes lo puse aquí realizo una sola conexión con multiples consultas dentro de la dll ¿Como mantengo los valores de las variables? o explicandome más aun

<img src="IMAGES/banners/<%=bannergif%>" width="468" height="60" border="0">

donde banner deberia ser el nombre del archivo.

¿Es recomendable hacer todos los select dentro de una misma clase o mejor separarlos? Claro esta teniendo en cuenta de que tengo que cargarlos todos de una. De lo contrario seria mas logico invocar solo aquellos que necesitare.
  #17 (permalink)  
Antiguo 16/12/2002, 14:23
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 23 años, 5 meses
Puntos: 0
a ver...

todavia ando un poco mareado con la logica que quieres hacer...

pero si no quieres rescatar todo el recordset con valores que no usuaras...hace un filtro y rescata solo los resgistros que necesites.

a tus funciones o procedimientos tambien puedes enviarles parametros de entrada que te sirvan para rescatar solo una parte de tu tabla.

Public Function configuracion(ByVal entrada as string) As Recordset

Dim ConnectionString As String
Dim strsql As String
Dim rs As Recordset


ConnectionString = "Driver={SQL Server};Description=Comsultasonline;SERVER=****;UI
D=***;PWD=****;DATABASE=****"

' divisas


Set rs = CreateObject("ADODB.Recordset")
strsql = "select * from divisas where campo ='"& entrada &"'"
y en tu codigo de asp al llamar a la funcion le pasas el parametro de entrada

CODIGO ASP

Set objeto = Server.CreateObject("nombre_dll.nombre_clase")
Set rs = objeto.configuracion(valor_entrada)
while not rs.eof
response.write rs("campo1")
rs.movenext
wend


ademas recuerda que si quieres que permanezcan los valores de tus campos retornado puedes usar variables de session...cookies...o input ocultos.
  #18 (permalink)  
Antiguo 19/12/2002, 01:50
 
Fecha de Ingreso: septiembre-2002
Mensajes: 39
Antigüedad: 22 años, 8 meses
Puntos: 0
Funciona ¡¡¡¡

Bueno al final lo conseguí pero solo de la siguiente forma:


***********ARCHIVO DLL

Public Function selectencuesta() As Recordset

Dim ConnectionString As String
Dim strsql As String
Dim rs As Recordset


ConnectionString = "Driver={SQL Server};Description=***;SERVER=**;UID=**;PWD=**;DA TABASE=**"

Set rs = CreateObject("ADODB.Recordset")
strsql = "SELECT * from encuestas where activa = 0"

rs.Open strsql, ConnectionString, 3, 1
Set selectencuesta = rs

End Function


***********ARCHIVO ASP


Set objrecordsert = Server.CreateObject("DLL.CLASS")
set Rs = objrecordsert.selectencuesta(cint(poll))



Ahora estoy probando la forma de crear solo la conexion desde la dll sin ningun recorsed y crear este desde la página asp pero me da error


***********ARCHIVO DLL


Function conectar()

Set oconn = Server.CreateObject("adodb.connection")
strconn = "Driver={SQL Server};Description=***;SERVER=**;UID=**;PWD=**;DA TABASE=**"

oconn.Open strconn

conectar = oconn

End Function


***********ARCHIVO ASP

set Objeto = server.createobject("conection.conexion")
set Oconn = Objeto.conectar()



error: Object required Linea >>

set Oconn = Objeto.conectar()


donde esta mi fallo?
  #19 (permalink)  
Antiguo 19/12/2002, 07:00
 
Fecha de Ingreso: junio-2002
Mensajes: 13
Antigüedad: 22 años, 10 meses
Puntos: 0
mira para trabajar con dll's y asp tienes que separar las cosas..

o sea...

no puedes crear objetos en ASP y tratar de ocuparlos en la dll si no se los envias de alguna forma (via referencial por ejemplo)...

si vas a hacer la consulta en la pagina..crea el objeto de conexion en la pagina.

si vas a hacer la consulta en la dll...TIENES que crear tu objeto en la dll.
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 08:19.