desarrollo

10/11/2005 - 03:01 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

Preguntas similare

Leer las respuestas

#1 Ju
10/11/2005 - 07:14 | Informe spam
No veo el sentido de los if (supongo que mas abajo tendrás otro end if que
no has publicado) yo utilizaría un try en lugar de if y una transacion por
procedimiento.

****************************************
Colabora con el grupo, contesta a este mensaje
y dinos si te sirvió o no la respuesta dada.
Muchas gracias.
****************************************
****************************************
Salu2

[DCE2003 ***] + VSTO
[DCE2005 **]
www.juank.tk
www.mvp-access.com
****************************************
"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


Respuesta Responder a este mensaje
#2 Lord Voldemort
10/11/2005 - 16:57 | Informe spam
ya has publicado esto en los news de vb6?
optendrias mas respuestas ahi creo...

"rafael" wrote in message
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


Respuesta Responder a este mensaje
#3 cali
10/11/2005 - 18:35 | Informe spam
tu problema creo k radica en que en los subs donde haces las inserciones ,
los objetos command tiene k hacer referencia al obj connection con el k abre
la transaccion, creo que de esa forma en caso de error se podria revertir lo
antes hecho..prueba

____________
Daniel Franco

"rafael" wrote in message
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


Respuesta Responder a este mensaje
#4 Victor
11/11/2005 - 00:16 | Informe spam
El problema lo tienes en que aplicas el BeginTrans en una conexion y luego
grabas los datos con otras conexiones, la transacción solo es válida para la
conexion donde haces el BeginTrans, podrías pasar la conexión como parámetro
a los métodos grabar.

Un saludo.


"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


Respuesta Responder a este mensaje
#5 rafael
15/11/2005 - 23:24 | Informe spam
Gracias por el aporte a todos, y ya lo publique en el grupo adecuado, pido
disculpas por si me equivoque de grupo e incomode a alguien. Este tema ha
generado una polemica a mi criterio sana, porque es algo muy complejo.
Espero puedan aportar sus puntos de vista y generar una retroalimentacion
positiva.
Si quiere contribuir se esta llevando en los newsgroup
microsoft.public.es.desarrollo y microsoft.public.es.vb, Desarrollo en 3
capas
NO ESTOY PUBLICITANDO HACIENDO PROPAGANDA NI NADA POR EL ESTILO.
Ni lo pretendo hacer, me parece odioso hacer eso, solo que no quiero
publicar mensajes en el grupo equivocado. Y me gustaria como mencione en el
parrafo
superior que puedan aportar sus puntos de vista, conocimientos, comentarios,
etc.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida