Problema con Estore procedure

17/06/2005 - 17:09 por Danilo | Informe spam
Saludos.
Utilizo Access 2000 y SQL Server.

Estoy tratando de ejecutar un procedimiento almacenado desde access con la
siguiente sentencia de conexion y siempre me da error de timeout expired.
Desde el SQL QUERY ANALIZER, se ejecuta sin problema.

oCon.Provider = "sqloledb"
oCon.Properties("Data Source").Value = swServidor
oCon.Properties("Initial Catalog").Value = swBaseDatos
oCon.Properties("user id").Value = Nz(DLookup("UID", "[Datos
Servidor]"), "")
oCon.Properties("password").Value = Nz(DLookup("PWD", "[Datos
Servidor]"), "")
oCon.ConnectionTimeout = 30
oCon.Open

oCon.Execute "ActualizaListaPrecios" '< Linea donde se para la
ejecucion
oCon.Close

'********Procedimiento almacenado para su analisis*******
CREATE PROCEDURE ActualizaListaPrecios AS

BEGIN

SET NOCOUNT ON

DECLARE @ins_error INT
DECLARE @del_Error INT
DECLARE @upd_PreciosFinish INT
DECLARE @upd_PreciosAcces INT
DECLARE @upd_PreciosLabor INT
DECLARE @upd_PreciosPartScrap INT
DECLARE @upd_PreciosPlata INT
DECLARE @upd_PreciosUnitario INT

BEGIN TRAN

INSERT INTO Articulos (Codigo, Descripcion, Tipo, Clase, Categoria, [Unidad
Medida], [Peso Estandar], Minimo, [Precio Unitario])
SELECT Nuevos_Items.Articulo, Nuevos_Items.Tipo, Nuevos_Items.Tipo,
'Item/Articulo', Nuevos_Items.[KT], 'DWT',
Nuevos_Items.[Peso Estandar], 0,0
FROM Nuevos_Items

SET @ins_error = @@ERROR

UPDATE [Costos de Envio] SET [Tipo Factura] = N.[Tipo Factura],
[Precio Material] = N.[Precio Material],
[Precio Labor] = N.[Precio Labor],
[Cantidad Piedra] = N.[Cantidad Piedra],
[Precio Piedra] = N.[Precio Piedra],
[Cantidad Accesorio] = N.[Cantidad Accesorio],
[Precio Accesorio] = N.[Precio Accesorio],
[Precio Unitario] = N.[Precio Unitario],
[Peso Estandar] = N.[Peso Estandar]
FROM [Costos de Envio] C INNER JOIN [Nuevos Precios] N
ON C.Articulo = N.[Articulo]
CROSS JOIN [Configuracion Local] L
WHERE (C.[Tipo] NOT Like '%'+L.[Prefijo Desperdicio]+'%'
AND C.[Tipo] NOT Like '%'+L.[Prefijo Parte]+'%')

SET @upd_PreciosFinish = @@ERROR

UPDATE [Costos de Envio] SET [Cantidad Piedra] =
CASE WHEN [Precio Piedra] > 0 THEN 1 ELSE 0 END,
[Cantidad Accesorio] CASE WHEN [Precio Accesorio] > 0 THEN 1 ELSE 0 END
WHERE ([Precio Accesorio] > 0 OR [Precio Piedra] >0)

SET @upd_PreciosAcces = @@ERROR

UPDATE [Costos de Envio] SET [Precio Labor]=0, [Tipo Factura]='A'
FROM [Costos de Envio] CROSS JOIN [Configuracion Local] C
WHERE [Costos de Envio].[Tipo] Like '%'+C.[Prefijo sin terminar]+'%'
SET @upd_PreciosLabor = @@ERROR

UPDATE [Costos de Envio] SET [Precio Material] CASE Categoria
WHEN '10K' THEN 7.79 ELSE 10.94
END, [Precio Unitario] CASE Categoria
WHEN '10K' THEN 7.79 ELSE 10.94
END, [Tipo Factura]='A', [Tipo Multiplicacion]='Por Peso',
[Precio Labor]=0, [Precio Accesorio]=0, [Precio Piedra]=0,
[Cantidad Piedra]=0, [Cantidad Accesorio]=0
FROM [Costos de Envio] CROSS JOIN [Configuracion Local] C
WHERE ([Costos de Envio].[Tipo] Like '%'+C.[Prefijo Parte]+'%'
OR [Costos de Envio].[Tipo] Like '%'+C.[Prefijo Desperdicio]+'%')

SET @upd_PreciosPartScrap = @@ERROR

UPDATE [Costos de Envio] SET [Precio Material]=.30, [Precio Unitario] =.30
FROM [Costos de Envio] CROSS JOIN [Configuracion Local] C
WHERE ([Costos de Envio].[Tipo] Like '%'+C.[Prefijo Parte]+'%'
OR [Costos de Envio].[Tipo] Like '%'+C.[Prefijo Desperdicio]+'%')
AND Categoria='SS'

SET @upd_PreciosPlata = @@ERROR

UPDATE [Costos de Envio] SET [Precio Unitario] [Precio Material]+[Precio Labor]+[Precio Piedra]+[Precio Accesorio]
FROM [Costos de Envio]

SET @upd_PreciosUnitario = @@ERROR

DELETE [Nuevos Precios]
SET @del_error = @@ERROR

IF @ins_error = 0 AND @del_error = 0 AND @upd_PreciosFinish = 0
AND @upd_PreciosAcces = 0 AND @upd_PreciosLabor = 0
AND @upd_PreciosPartScrap = 0 AND @upd_PreciosPlata = 0
AND @upd_PreciosUnitario = 0
BEGIN
COMMIT TRAN
END
ELSE
BEGIN
RAISERROR('Error durante la actualizacion de precios',16,1)

ROLLBACK TRAN
END

SET NOCOUNT OFF
END
GO
 

Leer las respuestas

#1 Alejandro Mesa
17/06/2005 - 18:27 | Informe spam
Danilo,

Cuando lo ejecutas en QA, has medido el tiempo que demora el sp en
ejecutarse?. Si es mayor a 30 segundos entonces debes incrementar la
propiedad CommandTimeout del objeto connection.

...
oCon.CommandTimeout = 50
...


AMB

"Danilo" wrote:

Saludos.
Utilizo Access 2000 y SQL Server.

Estoy tratando de ejecutar un procedimiento almacenado desde access con la
siguiente sentencia de conexion y siempre me da error de timeout expired.
Desde el SQL QUERY ANALIZER, se ejecuta sin problema.

oCon.Provider = "sqloledb"
oCon.Properties("Data Source").Value = swServidor
oCon.Properties("Initial Catalog").Value = swBaseDatos
oCon.Properties("user id").Value = Nz(DLookup("UID", "[Datos
Servidor]"), "")
oCon.Properties("password").Value = Nz(DLookup("PWD", "[Datos
Servidor]"), "")
oCon.ConnectionTimeout = 30
oCon.Open

oCon.Execute "ActualizaListaPrecios" '< Linea donde se para la
ejecucion
oCon.Close

'********Procedimiento almacenado para su analisis*******
CREATE PROCEDURE ActualizaListaPrecios AS

BEGIN

SET NOCOUNT ON

DECLARE @ins_error INT
DECLARE @del_Error INT
DECLARE @upd_PreciosFinish INT
DECLARE @upd_PreciosAcces INT
DECLARE @upd_PreciosLabor INT
DECLARE @upd_PreciosPartScrap INT
DECLARE @upd_PreciosPlata INT
DECLARE @upd_PreciosUnitario INT

BEGIN TRAN

INSERT INTO Articulos (Codigo, Descripcion, Tipo, Clase, Categoria, [Unidad
Medida], [Peso Estandar], Minimo, [Precio Unitario])
SELECT Nuevos_Items.Articulo, Nuevos_Items.Tipo, Nuevos_Items.Tipo,
'Item/Articulo', Nuevos_Items.[KT], 'DWT',
Nuevos_Items.[Peso Estandar], 0,0
FROM Nuevos_Items

SET @ins_error = @@ERROR

UPDATE [Costos de Envio] SET [Tipo Factura] = N.[Tipo Factura],
[Precio Material] = N.[Precio Material],
[Precio Labor] = N.[Precio Labor],
[Cantidad Piedra] = N.[Cantidad Piedra],
[Precio Piedra] = N.[Precio Piedra],
[Cantidad Accesorio] = N.[Cantidad Accesorio],
[Precio Accesorio] = N.[Precio Accesorio],
[Precio Unitario] = N.[Precio Unitario],
[Peso Estandar] = N.[Peso Estandar]
FROM [Costos de Envio] C INNER JOIN [Nuevos Precios] N
ON C.Articulo = N.[Articulo]
CROSS JOIN [Configuracion Local] L
WHERE (C.[Tipo] NOT Like '%'+L.[Prefijo Desperdicio]+'%'
AND C.[Tipo] NOT Like '%'+L.[Prefijo Parte]+'%')

SET @upd_PreciosFinish = @@ERROR

UPDATE [Costos de Envio] SET [Cantidad Piedra] =
CASE WHEN [Precio Piedra] > 0 THEN 1 ELSE 0 END,
[Cantidad Accesorio]> CASE WHEN [Precio Accesorio] > 0 THEN 1 ELSE 0 END
WHERE ([Precio Accesorio] > 0 OR [Precio Piedra] >0)

SET @upd_PreciosAcces = @@ERROR

UPDATE [Costos de Envio] SET [Precio Labor]=0, [Tipo Factura]='A'
FROM [Costos de Envio] CROSS JOIN [Configuracion Local] C
WHERE [Costos de Envio].[Tipo] Like '%'+C.[Prefijo sin terminar]+'%'
SET @upd_PreciosLabor = @@ERROR

UPDATE [Costos de Envio] SET [Precio Material]> CASE Categoria
WHEN '10K' THEN 7.79 ELSE 10.94
END, [Precio Unitario] > CASE Categoria
WHEN '10K' THEN 7.79 ELSE 10.94
END, [Tipo Factura]='A', [Tipo Multiplicacion]='Por Peso',
[Precio Labor]=0, [Precio Accesorio]=0, [Precio Piedra]=0,
[Cantidad Piedra]=0, [Cantidad Accesorio]=0
FROM [Costos de Envio] CROSS JOIN [Configuracion Local] C
WHERE ([Costos de Envio].[Tipo] Like '%'+C.[Prefijo Parte]+'%'
OR [Costos de Envio].[Tipo] Like '%'+C.[Prefijo Desperdicio]+'%')

SET @upd_PreciosPartScrap = @@ERROR

UPDATE [Costos de Envio] SET [Precio Material]=.30, [Precio Unitario] =.30
FROM [Costos de Envio] CROSS JOIN [Configuracion Local] C
WHERE ([Costos de Envio].[Tipo] Like '%'+C.[Prefijo Parte]+'%'
OR [Costos de Envio].[Tipo] Like '%'+C.[Prefijo Desperdicio]+'%')
AND Categoria='SS'

SET @upd_PreciosPlata = @@ERROR

UPDATE [Costos de Envio] SET [Precio Unitario]> [Precio Material]+[Precio Labor]+[Precio Piedra]+[Precio Accesorio]
FROM [Costos de Envio]

SET @upd_PreciosUnitario = @@ERROR

DELETE [Nuevos Precios]
SET @del_error = @@ERROR

IF @ins_error = 0 AND @del_error = 0 AND @upd_PreciosFinish = 0
AND @upd_PreciosAcces = 0 AND @upd_PreciosLabor = 0
AND @upd_PreciosPartScrap = 0 AND @upd_PreciosPlata = 0
AND @upd_PreciosUnitario = 0
BEGIN
COMMIT TRAN
END
ELSE
BEGIN
RAISERROR('Error durante la actualizacion de precios',16,1)

ROLLBACK TRAN
END

SET NOCOUNT OFF
END
GO

Preguntas similares