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

Clase para conexion BD

Estas en el tema de Clase para conexion BD en el foro de ASP Clásico en Foros del Web. Hola, estoy intentando hacer una clase parra agrupar los metodos de BD, tengo así: Código: <% Class bdConex Dim conex 'ADODB.Connection Dim errNum Dim errMsg ...
  #1 (permalink)  
Antiguo 18/09/2007, 04:21
Avatar de PosProdukcion  
Fecha de Ingreso: noviembre-2004
Ubicación: Manzanares el Real (Madrid)
Mensajes: 726
Antigüedad: 20 años, 5 meses
Puntos: 9
Clase para conexion BD

Hola, estoy intentando hacer una clase parra agrupar los metodos de BD, tengo así:

Código:
<%
  Class bdConex
    
    Dim conex 'ADODB.Connection
    Dim errNum
    Dim errMsg
    Dim strSQL

    Public Sub bdConex
        'Crea la conexion
        Set conex = Server.CreateObject ("ADODB.Connection")
        
        On error resume next
        conex.Open Application("cadenaConexion")

        'Actualiza el valor de error
        errNum = Err.number
       
    End Sub
  
    Public Sub cerrar
        conex.Close
        'Set conex = nothing
    End Sub
    
  End Class
%>
Para llamarle desde un script ASP, hago:

Código:
<!-- #include file="clases/bdConex.asp" -->

Dim conexion
Set conexion = new bdConex

conexion.cerrar() 
El problema está al cerrar la conexión, me dice Se requiere un objeto: 'conex'

¿Cuál es el problema? ¿Será que no mantiene la instancia del objeto conex entre la llamada a Open y la llamada a cerrar? ¿Solución?

Gracias
  #2 (permalink)  
Antiguo 18/09/2007, 07:16
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Re: Clase para conexion BD

Pues no es que no se mantenga, simplemente no existe ¿dónde mandas llamar al procedimiento bdConex?, recuerda que esto no es C donde con colocar un método con el nombre de la clase se hace constructor.
Debes de implementar este método:

Código:
Private Sub Class_Initialize()
    Set conex = Server.CreateObject ("ADODB.Connection")
    conex.Open Application("cadenaConexion")
End Sub
Saludos
  #3 (permalink)  
Antiguo 18/09/2007, 09:40
Avatar de PosProdukcion  
Fecha de Ingreso: noviembre-2004
Ubicación: Manzanares el Real (Madrid)
Mensajes: 726
Antigüedad: 20 años, 5 meses
Puntos: 9
Re: Clase para conexion BD

Y al Initialize() hay que llamarlo expresamente, no basta con el New Clase(), no?

Última edición por Myakire; 18/09/2007 a las 10:37
  #4 (permalink)  
Antiguo 18/09/2007, 10:38
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Re: Clase para conexion BD

Cita:
Y al Initialize() hay que llamarlo expresamente, no basta con el New Clase(), no?
No el método llamado Class_Initialize() es el constructor de las pseudo clases de vbscript, así como el Class_Terminate() es el destructor, sobra decir que se invocan solitos al instanciar la clase

Saludos
  #5 (permalink)  
Antiguo 08/07/2008, 10:44
 
Fecha de Ingreso: marzo-2003
Mensajes: 524
Antigüedad: 22 años, 1 mes
Puntos: 2
Respuesta: Clase para conexion BD

Bueno quería preguntar como se podría ocupar esta misma clase llamando una consulta o Procedimiento Almacenado en SQL Server y en la Clase retorne los registros
  #6 (permalink)  
Antiguo 08/07/2008, 11:09
Avatar de PosProdukcion  
Fecha de Ingreso: noviembre-2004
Ubicación: Manzanares el Real (Madrid)
Mensajes: 726
Antigüedad: 20 años, 5 meses
Puntos: 9
Respuesta: Clase para conexion BD

Te dejo mi versión....

Código:
Class bdConex
    Public rsQuery  'Es un array doble que contiene los datos leidos de BD, es
                    'una copia del recordset, pero en formato array
    Public totalRegistros

    Public Sub Query(cadenaSQL)
        Dim rs

        'Crea la conexion
        Set conex = server.createobject ("ADODB.Connection")
        conex.Open Application("cadenaConexion")

        Set rs = server.createobject("ADODB.RecordSet")
        rs.CursorType = 3
        'LockType = Read-Only
        rs.LockType = 1
        'CursorLocation = adUseClient
        rs.CursorLocation = 3
        'Y abrimos el Recordset
        'objRecordset.Open source,actconn,cursortyp,locktyp,opt
        rs.Open cadenaSQL, conex, 3, 1, 1

        'Obtengo los datos con GetRows
        If Not(rs.EOF) and Not(rs.BOF) Then
            rsQuery = rs.GetRows
            totalRegistros = rs.RecordCount
        Else
            totalRegistros = 0
        End If
        
        'Cierro y limpio objetos ya
        rs.Close
        conex.Close
        set rs = nothing
        set conex = nothing
    End Sub

    Public Sub Ejecuta(strSQL)
        Dim i
        Dim rsInsert

        'Crea la conexion
        Set conex = server.createobject ("ADODB.Connection")
        conex.Open Application("cadenaConexion")
        Set rsInsert = server.createobject("ADODB.RecordSet")
        
        set rsInsert = conex.execute(strSQL)

        conex.Close
        set rsInsert = nothing
        set conex = nothing

    End Sub
   ...........
  #7 (permalink)  
Antiguo 08/07/2008, 21:01
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 22 años, 8 meses
Puntos: 16
Respuesta: Clase para conexion BD

wuau.... no tenia idea de estos.

Class_Initialize()
Class_Terminate()

yo los hacia a mano.
  #8 (permalink)  
Antiguo 09/07/2008, 03:25
Avatar de PosProdukcion  
Fecha de Ingreso: noviembre-2004
Ubicación: Manzanares el Real (Madrid)
Mensajes: 726
Antigüedad: 20 años, 5 meses
Puntos: 9
Respuesta: Clase para conexion BD

Cita:
Iniciado por Muzztein Ver Mensaje
wuau.... no tenia idea de estos.

Class_Initialize()
Class_Terminate()

yo los hacia a mano.
Bueno, para mí el inconveniente es que no aceptan parámetros, así que en muchos casos en lugar de Initialize() uso un método inicializador con parámetros
  #9 (permalink)  
Antiguo 09/07/2008, 10:34
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 22 años, 8 meses
Puntos: 16
Respuesta: Clase para conexion BD

claro, por que deben ser usados para crear los valores por defecto que tendran las variables a utilizar y cosas asi
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 11:23.