Esta es una clase que se encuentra dentro de una Dll. Miren como esta distribuido el codigo.
Rem *********************************************
Rem * Modulo Administrador de Catalogo *
Rem *********************************************
Dim cnn_Conexion As ADODB.Connection
Dim rst_catalogo As ADODB.Recordset
Dim rst_catalogoOF As ADODB.Recordset
Dim rst_mps As ADODB.Recordset
Dim rst_ccc As ADODB.Recordset
Dim rst_mcc As ADODB.Recordset
Dim rst_bcc As ADODB.Recordset
Public TipoProducto As Variant
Public CodigoProducto As Variant
Public titulodelproducto As Variant
Public Descripcion As Variant
Public PrecioenPesos As Variant
Public PrecioenDolares As Variant
Public Estado_Stock As Variant
Public Nombre_Imagen As Variant
Public Email_Session As Variant
Public Session_Activa As Variant
Public cantidad As Variant
Private Sub Class_Initialize()
On Error GoTo error
Set cnn_Conexion = New ADODB.Connection
cnn_Conexion.Open "dsn=carritodecompras"
Exit Sub
error:
Call Class_Terminate
End Sub
Private Sub Class_Terminate()
cnn_Conexion.Close
Set rst_catalogo = Nothing
Set rst_catalogoOF = Nothing
Set rst_mps = Nothing
Set rst_mcc = Nothing
Set cnn_Conexion = Nothing
End Sub
Public Function BorrarCarrito(ByVal clave As Variant)
On Error GoTo error
Set rst_bcc = New ADODB.Recordset
sql_string = "DELETE * FROM Tbl_Carrito WHERE Id_Operacion=" & clave
rst_bcc.Open sql_string, cnn_Conexion, adOpenStatic, adLockPessimistic
Set rst_bcc = Nothing
Exit Function
error:
End Function
Public Function MostrarCarrito() As ADODB.Recordset
On Error GoTo error
Set rst_mcc = New ADODB.Recordset
sql_string = "SELECT * FROM Tbl_Carrito WHERE Id_Session=" & Session_Activa
rst_mcc.Open sql_string, cnn_Conexion, adOpenStatic, adLockPessimistic
Set MostrarCarrito = rst_mcc
Exit Function
error:
End Function
Public Function Cargar_carrito()
On Error GoTo error
Set rst_ccc = New ADODB.Recordset
sql_string = "SELECT * FROM Tbl_carrito"
rst_ccc.Open sql_string, cnn_Conexion, adOpenKeyset, adLockPessimistic
rst_ccc.AddNew
rst_ccc("email_cliente") = Email_Session
rst_ccc("id_session") = Val(Session_Activa)
rst_ccc("Titulo_Producto") = titulodelproducto
rst_ccc("Precio_Pesos") = Val(PrecioenPesos)
rst_ccc("Precio_Dolares") = Val(PrecioenDolares)
rst_ccc("Cantidad") = Val(cantidad)
rst_ccc.Update
Set rst_ccc = Nothing
Exit Function
error:
End Function
Public Function MostrarCatalogo() As ADODB.Recordset
On Error GoTo error
Set rst_catalogo = New ADODB.Recordset
sql_string = "SELECT * FROM Tbl_Productos WHERE Id_Tipo_producto=" & Val(TipoProducto) & " " & "AND" & " " & "Stock=" & 1
rst_catalogo.Open sql_string, cnn_Conexion, adOpenStatic, adLockReadOnly
Set MostrarCatalogo = rst_catalogo
Exit Function
error:
End Function
Public Function MostrarCatalogoOfertas() As ADODB.Recordset
On Error GoTo error
Set rst_catalogoOF = New ADODB.Recordset
sql_string = "SELECT * FROM Tbl_Productos WHERE id_codigo_producto=" & Val(CodigoProducto)
rst_catalogoOF.Open sql_string, cnn_Conexion, adOpenStatic, adLockReadOnly
Set MostrarCatalogoOfertas = rst_catalogoOF
Exit Function
error:
End Function
Public Function Mostrar_Producto() As ADODB.Recordset
On Error GoTo error
Set rst_mps = New ADODB.Recordset
sql_string = "SELECT * FROM Tbl_Productos WHERE Id_Tipo_producto=" & Val(TipoProducto) & " " & "AND" & " " & "Id_codigo_Producto=" & Val(CodigoProducto)
rst_mps.Open sql_string, cnn_Conexion, adOpenStatic, adLockReadOnly
Set Mostrar_Producto = rst_mps
Exit Function
error:
End Function
Podran apreciar como esta estructurado..
Interfaces.
metodo inicio
metodo de terminar
demas metodos.
veran que los metodos que devuelven un recordset los recordset no tienen el .close
y veran que en el metodo terminar hago un close de la conexion y los nothing que corresponden.
pero faltan los .close de los recordset que fueron habiertos, y el tema esta ahi.....
cuando les coloco el .close a esos recordset, el sistema se cuelga, cuelga el IIS.
y no se p orque, alguien puede decirme porque puede estar pasando eso. Si la ejecuto asi , la dll funciona bien.
saludos a todos y gracias.