Clases, Herencia y DLL

03/09/2004 - 02:08 por Vicente Azúa Gutiérrez | Informe spam
Como estan mi problema es el siguiente:
Tengo una clase que tiene una propiedad a la cual le he creado una
referencia a un OBJETO ADODB.RECORDSET usando el CREATEOBJECT. Luego la he
generado en DLL.

De otro proyecto tambien he creado una CLASE BASE y tambien con la
propiedad que enlaza en esta ocasión a la CLASE QUE CREE EN LA DLL.

Uso esa clase base para crear una tercera clase pero esta vez es una clase
HEREDAD de la BASE con esta establezco todos los datos para el acceso a
una sola tabla.

Pruebo el ejemplo en FOX, creando un formulario dentro del proyecto y
hasta ahi me funciona.

El problema es cuando creo con el último proyecto una DLL para poderla
llamar de cualquier aplicación. AL momento de activar la conección me dice
que hay muchas instancias abiertas.

Si alguien me puede ayudar le puedo enviar los projecto para que me
entiendan un poco mas.

Gracias.
PD: Trato de aplicar el concepto de multicapas
CAPA 1: Enlace a datos (1 DLL)
CAPA 2: LOGICA DEL NEGOCIO (2 DLL) == 2 Clases


-
PortalFox :: Nada corre como un zorr
http://www.portalfox.co

PortalFox - NNTP Forum Gatewa
 

Leer las respuestas

#1 Carlos Rojas
12/09/2004 - 02:36 | Informe spam
Hola
Lo que yo he hecho es lo siguiente:
un proyecto llamado "CapaLogica" para la capa de Logica de negocios en el
cual he puesto un archivo prg que tiene la siguiente estructura

DEFINE CLASS CapaLogica as Session OLEPUBLIC
FUNCTION CerrarFactura(nFactura as Number) as number

if nFactura <=0 then
return 0
endif

LOCAL oDatos as CAPADATOS.capadatos
oDatos = CREATEOBJECT("CAPADATOS.capadatos")
oDatos.Conectar()
lResultado=odatos.CerrarFactura(nFactura)
oDatos.Desconectar
if lResultado then
return 1
else
return -1
endif
*si la funcion retorna 0 es por que es un numero de factura invalido
*retorna -1 si no existe el numero de factura o no logra cerrarla
*retorna 1 si logra cerrarla con éxito
ENDFUNC

FUNCTION AlgunaOtraFuncion (Agumento1 as Number, Argumento2 as String) as
String
*.
*.
*.
*Aca tu logica para esta funcion , OJO que no DEBES abrir ninguna tabla en
*esta Capa, por lo general son solo if , do case, do while que van a
trabajar
*con las variables que le envien como argumento
*si necesitas modificar algun dato en la base de datos pues lo haces usando
*la capa de datos.
* LOCAL oDatos as CAPADATOS.capadatos
* oDatos = CREATEOBJECT("CAPADATOS.capadatos")
* oDatos.Conectar()
* lResultado=oDatos.AlgunMETODO()

ENDFUNC
ENDDEFINE

-
La capa de datos la tengo en otro proyecto llamado CAPADATOS y tiene un
archivo prg que contiene lo siguiente:

DEFINE CLASS CapaDatos as Session OlePublic
PROTECTED miConeccion

miConeccion = ""
directorio="C:\ElDirectorioDondeEstáLaDBC\"

Procedure Conectar
SET EXCLUSIVE off
SET DELETED on
oConeccion = CREATEOBJECT("adodb.connection")
oConeccion.Open("Provider=VFPOLEDB.1;" ;
+ "Data Source="+this.directorio+"basedatos.dbc;" ;
+ "Password='';Collating Sequence=MACHINE")

This.miConeccion = oConeccion

EndProc

PROCEDURE Desconectar

this.miConeccion.close
this.miConeccion=null

ENDPROC

FUNCTION FinalizarMatricula(nFactura as Number )

lcSQL="update Fac set fin = DATE() where idFactura='"+STR(nFactura,10)+"'"
nAfectadas=0
this.miconeccion.execute(lcSQL,nAfectadas)
if nAfectadas<1 then
return .f.
else
return .t.
eneif
ENDFUNC
ENDDEFINE

para que puedas utilizar las capas debes de generar las dll, lo bueno es que
fox registra las dll al generarlas asi que no hay mayor problema en la pc
donde las desarrolles, tendras que registrarlas tu mismo o crear programas
de instalación si quieres distribuir estas dll

Obviamente, esto es solo una pequeñisima parte de todo lo que el sistema
hace.
La capa de Cliente la he programado en ASP pues este es un sistema WEB, el
inconveniente que tengo con el IIS es que para realizar actualizaciones al
sistema debo detener el servicio web y reiniciarlo para poder generar las
dll, SI ALGUIEN TIENE UNA SOLUCION A ESTO PORFA AYUDA!!!!!!!, pero en fin
creo que ya me estoy acostumbrando y las modificaciones ya son muy poco
frecuentes :-D

Si alguien tiene alguna crítica pues bienvenida sea.


Saludos
Carlos Rojas



"Vicente Azúa Gutiérrez" escribió en el mensaje
news:
Como estan mi problema es el siguiente:
Tengo una clase que tiene una propiedad a la cual le he creado una
referencia a un OBJETO ADODB.RECORDSET usando el CREATEOBJECT. Luego la he
generado en DLL.

De otro proyecto tambien he creado una CLASE BASE y tambien con la
propiedad que enlaza en esta ocasión a la CLASE QUE CREE EN LA DLL.

Uso esa clase base para crear una tercera clase pero esta vez es una clase
HEREDAD de la BASE con esta establezco todos los datos para el acceso a
una sola tabla.

Pruebo el ejemplo en FOX, creando un formulario dentro del proyecto y
hasta ahi me funciona.

El problema es cuando creo con el último proyecto una DLL para poderla
llamar de cualquier aplicación. AL momento de activar la conección me dice

que hay muchas instancias abiertas.

Si alguien me puede ayudar le puedo enviar los projecto para que me
entiendan un poco mas.

Gracias.
PD: Trato de aplicar el concepto de multicapas
CAPA 1: Enlace a datos (1 DLL)
CAPA 2: LOGICA DEL NEGOCIO (2 DLL) == 2 Clases



PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway

Preguntas similares