DESARROLLO EN 3 CAPAS

10/11/2005 - 02:58 por rafael | Informe spam
Bueno , perdonen la pregunta reiterada pero no encuentro el post anterior.
Explico mi problema, Trabajo con Visual Basic 6.0 SP 6, y SQL Server 2000
Profesional.
Estoy programado con capas, y ya tengo la capa de acceso a datos y la capa
de entidades
Por ejemplo :
Clase entidadPersona
Private Nombre as string
Private Apellido as string
.
.
Propiedades para cada una de las variables publicas
Let Nombre
Get Nombre.
...

Clase EntidadHabilidad
Private Habilidad as string
Propiedades para cada una de las variables publicas
Let Nombre
Get Nombre.
...

clase datosPersonas
Public function Grabar(nuevaPersona as entidadPersona) as boolean
Dim Coneccion As ADODB.Connection
Dim Comando As ADODB.Command
Codigo para grabar datos de persona en la tabla persona
Comando.Execute
Comando.ActiveConnection = Nothing
Coneccion.Close
Set Comando = Nothing
Set Coneccion = Nothing
Grabar = True
end function


Clase DatosHabilidad
Public function Grabar(nuevaHabilidad as entidadHabilidad) as boolean
Dim Coneccion As ADODB.Connection
Dim Comando As ADODB.Command
Codigo para grabar datos de habilidad
Comando.Execute
Comando.ActiveConnection = Nothing
Coneccion.Close
Set Comando = Nothing
Set Coneccion = Nothing
Grabar = True
end function

Bueno hasta ahi no hay problema
Ahora estaba pensando armar la capa de logica de negocios asi
clase LogicaPersona(nuevaPersona as entidadPersona, nuevaHabilidad as
entidadHabilidad)
Dim Coneccion As ADODB.Connection
Dim Comando As ADODB.Command
dim dPersona as datosPersona
dim dHabilidad as datosHabilidad
codigo para establecer la conexion
Coneccion.BeginTrans
if dPErsona.Grabar(nuevaPersona) then
if dHabilidad.Grabar(nuevaHabilidad) then
Coneccion.ComitTrans
else
Coneccion.RollbackTrans
else
Coneccion.RollbackTrans
end if

Bueno lo hice y funciona. Graba tanto los datos de persona y habilidad.
Pero el problema que no aplica la transaccion. es decir se puede grabar
persona y no necesariamente la habilidad
todo como un bloque
Lo he tenido que implementar ambas clases en un solo procedimiento.
No se porque no funcione el begintrans.
Lo unico que se me puede ocurrir es que en cada funcion de las clases de
acceso a datos
uso una conexion propia.
Agradezo de antemano cualquier ayuda
 

Leer las respuestas

#1 Tomás M.
10/11/2005 - 09:18 | Informe spam
Escribí algo sobre esto no hace mucho, lo puedes ver aquí:

http://www.elguille.info/colabora/N...Capas2.htm

Espero que te sirva.

Tomás M

"rafael" escribió en el mensaje
news:
Bueno , perdonen la pregunta reiterada pero no encuentro el post anterior.
Explico mi problema, Trabajo con Visual Basic 6.0 SP 6, y SQL Server 2000
Profesional.
Estoy programado con capas, y ya tengo la capa de acceso a datos y la capa
de entidades
Por ejemplo :
Clase entidadPersona
Private Nombre as string
Private Apellido as string
.
.
Propiedades para cada una de las variables publicas
Let Nombre
Get Nombre.
...

Clase EntidadHabilidad
Private Habilidad as string
Propiedades para cada una de las variables publicas
Let Nombre
Get Nombre.
...

clase datosPersonas
Public function Grabar(nuevaPersona as entidadPersona) as boolean
Dim Coneccion As ADODB.Connection
Dim Comando As ADODB.Command
Codigo para grabar datos de persona en la tabla persona
Comando.Execute
Comando.ActiveConnection = Nothing
Coneccion.Close
Set Comando = Nothing
Set Coneccion = Nothing
Grabar = True
end function


Clase DatosHabilidad
Public function Grabar(nuevaHabilidad as entidadHabilidad) as boolean
Dim Coneccion As ADODB.Connection
Dim Comando As ADODB.Command
Codigo para grabar datos de habilidad
Comando.Execute
Comando.ActiveConnection = Nothing
Coneccion.Close
Set Comando = Nothing
Set Coneccion = Nothing
Grabar = True
end function

Bueno hasta ahi no hay problema
Ahora estaba pensando armar la capa de logica de negocios asi
clase LogicaPersona(nuevaPersona as entidadPersona, nuevaHabilidad as
entidadHabilidad)
Dim Coneccion As ADODB.Connection
Dim Comando As ADODB.Command
dim dPersona as datosPersona
dim dHabilidad as datosHabilidad
codigo para establecer la conexion
Coneccion.BeginTrans
if dPErsona.Grabar(nuevaPersona) then
if dHabilidad.Grabar(nuevaHabilidad) then
Coneccion.ComitTrans
else
Coneccion.RollbackTrans
else
Coneccion.RollbackTrans
end if

Bueno lo hice y funciona. Graba tanto los datos de persona y habilidad.
Pero el problema que no aplica la transaccion. es decir se puede grabar
persona y no necesariamente la habilidad
todo como un bloque
Lo he tenido que implementar ambas clases en un solo procedimiento.
No se porque no funcione el begintrans.
Lo unico que se me puede ocurrir es que en cada funcion de las clases de
acceso a datos
uso una conexion propia.
Agradezo de antemano cualquier ayuda




Preguntas similares