Inexplicable transaccion que se queda a medias

27/08/2004 - 01:03 por Dario | Informe spam
Hola

Por favor una luz..

Desarrollamos con una herramienta Case que se llama
genexus... en esta herramienta estamos ejecutando un
procedimiento almacenado SQL que a pesar de que tiene
explicita una transaccion, al hacer seguimiento en el
profiler de SQL se ve como lo ejecuta a medias

hicimos un procedimiento de prueba de la siguiente forma:

Create procedimientos as
declare @a int
set @a = 1

Begin tran proceso
While @a <= 10000
Begin
insert tablaborrar
select @a, getdate ()
set @a = @a + 1
End
Commit tran proceso



Si se ejecuta directamente en el Query Analyzer
efectivamente inserta los 10000 registros

Pero si se ejecuta desde el Genexus (Generando Codigo VB)
ejecuta entre 150 y 300 registros.

No entiendo como hace una transaccion a medias???

Al hacer un trace a lo que ejecuta el genexus se ven todas
las instrucciones de insert mas o menos unas 180 veces
y al final se ve lo siguientes:

IF @@TRANCOUNT > 0
COMMIT TRAN


Al revisar encuentro que el aplicativo creado desde la
herramienta case generó 180 registros

No entiendo como puede ser que el SQL no termine su
transaccion...no me genera error ni veo en el trace algun
proceso de rollback...esto nunca me habia pasado con SQL
desarrollando por ejemplo directamente desde VB 6.0

No se si habrá algún parametro que no esté contemplando.

Gracias a todos

Preguntas similare

Leer las respuestas

#1 Emilio Boucau \(en casa\)
27/08/2004 - 01:11 | Informe spam
Darío,

yo tampoco entiendo como es que no termina la transacción pero el hecho que
menciones que desde el Query Analyzer o desde VB 6.0 este proceso ande ok me
lleva a descartar que sea un problema de SQL Server. Te recomiendo que
contactes al soporte de Genexus.


Saludos !

Emilio Boucau
Buenos Aires - Argentina
http://www.portalsql.com
Respuesta Responder a este mensaje
#2 Gustavo Larriera [MVP]
27/08/2004 - 02:11 | Informe spam
SQL no ejecuta transacciones a medias. Posiblemente el código que hizo el
generador de aplicaciones realiza procesos en lotes de registros y no maneja
una tarnsacción completa.

Saludos
gux

Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"Dario" wrote in message
news:0f4c01c48bc0$ec944c20$
Hola

Por favor una luz..

Desarrollamos con una herramienta Case que se llama
genexus... en esta herramienta estamos ejecutando un
procedimiento almacenado SQL que a pesar de que tiene
explicita una transaccion, al hacer seguimiento en el
profiler de SQL se ve como lo ejecuta a medias

hicimos un procedimiento de prueba de la siguiente forma:

Create procedimientos as
declare @a int
set @a = 1

Begin tran proceso
While @a <= 10000
Begin
insert tablaborrar
select @a, getdate ()
set @a = @a + 1
End
Commit tran proceso



Si se ejecuta directamente en el Query Analyzer
efectivamente inserta los 10000 registros

Pero si se ejecuta desde el Genexus (Generando Codigo VB)
ejecuta entre 150 y 300 registros.

No entiendo como hace una transaccion a medias???

Al hacer un trace a lo que ejecuta el genexus se ven todas
las instrucciones de insert mas o menos unas 180 veces
y al final se ve lo siguientes:

IF @@TRANCOUNT > 0
COMMIT TRAN


Al revisar encuentro que el aplicativo creado desde la
herramienta case generó 180 registros

No entiendo como puede ser que el SQL no termine su
transaccion...no me genera error ni veo en el trace algun
proceso de rollback...esto nunca me habia pasado con SQL
desarrollando por ejemplo directamente desde VB 6.0

No se si habrá algún parametro que no esté contemplando.

Gracias a todos
Respuesta Responder a este mensaje
#3 JOSE
27/08/2004 - 17:13 | Informe spam
Mira yo utilizo GEnexus 7.5 y evaluamos la ver 8.

Francamente la herramienta GX es muy parca ver 7.5, no
puedes generar var globales, no puedes tener un
seguimiento paso a paso de la aplicación, detectar un
error es bastante laborioso, la interfaz para lacaptura
de datos sólo la puedes hacer muy simple, intenta editar
un GRID (cuadricula) y es imposible, francamente no la
recomiendo, pero en fin la empresa la compro y hay que
darle mantenimiento a programas.

Bueno al punto:
Utilizamos SP y dentro de estos manejamos transacciones,
al analizar el código generado por GX, verificamos que el
mismo GX proteje la transacción así que debes dar en GX
la instrucción implicita de COMMIT o ROLLBACK de acuerdo
al exito del programa en GX sin olvidar que si el SP te
devuelve un fallo tambien proteger la transacción.

NOTA: El llamado de los SP puedes darlo en la preferences
del proyecto o a través de un archivo donde contiene cada
uno de los SP que utilizas en la aplicación.

Escribe y discutimos a detalle nuestra experiencia.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida