Pregunta

13/05/2004 - 13:56 por Heidi | Informe spam
Hola a todos,
Tengo un trigger que envía un mensaje de error y detiene la transaccion si
se cumple una condición, la cuestion es que cuando envío el mensaje (la
aplicación esta en VisualFox), me sale otra cosa, si valida bien las
condiciones, pero me sale lo siguiente

No es posible pasar datos hacia tabla de inventario.
Posible causa :
Mensaje : Error de conectividad: [Microsoft][ODBC SQL Server Driver][SQL
Server]1
Mientras que si estoy en acces si sale bien el error despues del 1 es
decir,
No es posible pasar datos hacia tabla de inventario.
Posible causa :
Mensaje : Error de conectividad: [Microsoft][ODBC SQL Server Driver][SQL
Server]1La orden 17841 ya se encuentra cumplida, comuniquese con costos
(#50000)
el trigger es el siguiente: (la primera parte, donde valida si es 0 si saca
el mensaje bien en ambos programas).
Mil gracias por su valiosa ayuda
CREATE TRIGGER MvtoInvValida
ON MVTOINV
FOR INSERT, UPDATE
AS
DECLARE @TipoMvto CHAR(5), @OrdenNro INT, @Cumplida INT
SELECT @TipoMvto = TIPOMVTO, @OrdenNro = ORDENNRO
FROM inserted WHERE TIPOMVTO = 'S13' OR TIPOMVTO = 'S19'
IF (@OrdenNro = 0)
BEGIN
RAISERROR ('Este tipo de movimiento no puede tener Orden 0!!',
16, 1)
ROLLBACK TRANSACTION
END
ELSE
BEGIN
SELECT @OrdenNro = CONVERT(INT, i.ORDENNRO) FROM inserted i
WHERE i.TIPOMVTO = 'S13' OR i.TIPOMVTO = 'S19'
SELECT @Cumplida = o.Cumplida
FROM [SERVIDOR\SERVIDOR2000].SIP.DBO.COS_ORDENES o
WHERE o.[Número Orden] = @OrdenNro
PRINT @Cumplida
IF (@Cumplida = 1)
BEGIN
RAISERROR ('La orden %u ya se encuentra cumplida, comuniquese con
costos!!',
16, 1, @OrdenNro)
ROLLBACK TRANSACTION
END
END

Preguntas similare

Leer las respuestas

#1 Maxi
13/05/2004 - 14:09 | Informe spam
Estimada Heidi, tu problema es como Fox usa el ODBC ;-) te recomendaria ir
al news de Vfox para ver que te dicen ellos, pero no es problema de Sql
Server sino en Access pasaria lo mismo :p

Suerte


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Heidi" escribió en el mensaje
news:
Hola a todos,
Tengo un trigger que envía un mensaje de error y detiene la transaccion si
se cumple una condición, la cuestion es que cuando envío el mensaje (la
aplicación esta en VisualFox), me sale otra cosa, si valida bien las
condiciones, pero me sale lo siguiente

No es posible pasar datos hacia tabla de inventario.
Posible causa :
Mensaje : Error de conectividad: [Microsoft][ODBC SQL Server Driver][SQL
Server]1
Mientras que si estoy en acces si sale bien el error despues del 1 es
decir,
No es posible pasar datos hacia tabla de inventario.
Posible causa :
Mensaje : Error de conectividad: [Microsoft][ODBC SQL Server Driver][SQL
Server]1La orden 17841 ya se encuentra cumplida, comuniquese con costos
(#50000)
el trigger es el siguiente: (la primera parte, donde valida si es 0 si


saca
el mensaje bien en ambos programas).
Mil gracias por su valiosa ayuda
CREATE TRIGGER MvtoInvValida
ON MVTOINV
FOR INSERT, UPDATE
AS
DECLARE @TipoMvto CHAR(5), @OrdenNro INT, @Cumplida INT
SELECT @TipoMvto = TIPOMVTO, @OrdenNro = ORDENNRO
FROM inserted WHERE TIPOMVTO = 'S13' OR TIPOMVTO = 'S19'
IF (@OrdenNro = 0)
BEGIN
RAISERROR ('Este tipo de movimiento no puede tener Orden 0!!',
16, 1)
ROLLBACK TRANSACTION
END
ELSE
BEGIN
SELECT @OrdenNro = CONVERT(INT, i.ORDENNRO) FROM inserted i
WHERE i.TIPOMVTO = 'S13' OR i.TIPOMVTO = 'S19'
SELECT @Cumplida = o.Cumplida
FROM [SERVIDOR\SERVIDOR2000].SIP.DBO.COS_ORDENES o
WHERE o.[Número Orden] = @OrdenNro
PRINT @Cumplida
IF (@Cumplida = 1)
BEGIN
RAISERROR ('La orden %u ya se encuentra cumplida, comuniquese con
costos!!',
16, 1, @OrdenNro)
ROLLBACK TRANSACTION
END
END










Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.676 / Virus Database: 438 - Release Date: 03/05/2004
Respuesta Responder a este mensaje
#2 Javier Loria
13/05/2004 - 16:30 | Informe spam
Hola Heidi:
No soy experto en Fox :(, pero es muy probable que el error venga
acompanado de otros errores y solo estes viendo el primero. En esta
coleccion es donde viene tu mensaje personalizado.
Si estas usando ADO debes buscar en la coleccion de errores de la
conexion. Si esta usando otro modelo alguno de los expertos de Fox debe
saber.
Por ultimo, tu trigger esta disenado para que Inserted tenga una sola
fila :(. Debes o enviar un error cuando hay mas de una fila, o cambiarlo
para que use conjuntos de datos y no programacion procedimental.
Algo como esto (sin probar), es lo que que probablemente te sirve:
=-- Tenemos una orden en 0?
IF EXISTS (SELECT * FROM Inserted
WHERE (TIPOMVTO = 'S13' OR TIPOMVTO = 'S19')
AND ORDENNRO=0 )
BEGIN
RAISERROR ('Este tipo de movimiento no puede tener Orden 0!!',16, 1)
ROLLBACK TRANSACTION
END

IF EXISTS (SELECT *
FROM [SERVIDOR\SERVIDOR2000].SIP.DBO.COS_ORDENES o
JOIN Inserted
ON O.[Número Orden]=Inserted.OrdenNro
WHERE (Inserted.TIPOMVTO = 'S13'
OR Inserted.TIPOMVTO = 'S19')
AND o.Cumplida=1
BEGIN
RAISERROR ('La orden %u ya se encuentra cumplida, comuniquese con
costos!!', 16, 1, @OrdenNro)
ROLLBACK TRANSACTION
END
= Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Heidi escribio:
Hola a todos,
Tengo un trigger que envía un mensaje de error y detiene la
transaccion si se cumple una condición, la cuestion es que cuando
envío el mensaje (la aplicación esta en VisualFox), me sale otra
cosa, si valida bien las condiciones, pero me sale lo siguiente

No es posible pasar datos hacia tabla de inventario.
Posible causa :
Mensaje : Error de conectividad: [Microsoft][ODBC SQL Server
Driver][SQL Server]1
Mientras que si estoy en acces si sale bien el error despues del 1
es decir,
No es posible pasar datos hacia tabla de inventario.
Posible causa :
Mensaje : Error de conectividad: [Microsoft][ODBC SQL Server
Driver][SQL Server]1La orden 17841 ya se encuentra cumplida,
comuniquese con costos (#50000)
el trigger es el siguiente: (la primera parte, donde valida si es 0
si saca el mensaje bien en ambos programas).
Mil gracias por su valiosa ayuda
CREATE TRIGGER MvtoInvValida
ON MVTOINV
FOR INSERT, UPDATE
AS
DECLARE @TipoMvto CHAR(5), @OrdenNro INT, @Cumplida INT
SELECT @TipoMvto = TIPOMVTO, @OrdenNro = ORDENNRO
FROM inserted WHERE TIPOMVTO = 'S13' OR TIPOMVTO = 'S19'
IF (@OrdenNro = 0)
BEGIN
RAISERROR ('Este tipo de movimiento no puede tener Orden 0!!',
16, 1)
ROLLBACK TRANSACTION
END
ELSE
BEGIN
SELECT @OrdenNro = CONVERT(INT, i.ORDENNRO) FROM inserted i
WHERE i.TIPOMVTO = 'S13' OR i.TIPOMVTO = 'S19'
SELECT @Cumplida = o.Cumplida
FROM [SERVIDOR\SERVIDOR2000].SIP.DBO.COS_ORDENES o
WHERE o.[Número Orden] = @OrdenNro
PRINT @Cumplida
IF (@Cumplida = 1)
BEGIN
RAISERROR ('La orden %u ya se encuentra cumplida, comuniquese con
costos!!',
16, 1, @OrdenNro)
ROLLBACK TRANSACTION
END
END
Respuesta Responder a este mensaje
#3 Heidi
13/05/2004 - 19:12 | Informe spam
Javier, espero no abusar de ti, y si es asi pues no hay problema con que no
me respondas esto, tengo el siguiente trigger, pero me da error y ademas no
he podido hacer algo con conjunto de registros de otra forma para lo que
necesito que es enviar un e-mail que de los datos de la factura a alguien,
me podrías ayudar algo? (solo si es posible), me dicen que tiene errores de
sintaxis pero el SQL no me dice errores de sintaxis.

Mil gracias
DROP TRIGGER [MvtoFac_Ins]
CREATE TRIGGER [MvtoFac_Ins] ON [dbo].[MVTOFAC]
FOR INSERT AS
SET XACT_ABORT ON


DECLARE @rcm int
DECLARE @SiNo INT
DECLARE @Desde NVARCHAR(4000),
@Desde_Nombre NVARCHAR(4000),
@Para NVARCHAR(4000),
@Titul NVARCHAR(4000),
@Mensaje NVARCHAR(4000),
@Mensaje1 NVARCHAR(4000),
@Servidor NVARCHAR(4000),
@MensajeDef NVARCHAR(4000)
SET @SiNo = 0
SET @Desde = Suser_sname()
SET @Desde_Nombre = HOST_NAME()
SET @Para = ''
SET @Titul = 'Orden Facturada'
SET @Mensaje 'Orden,Titulo,Cliente,Trabajo,Nombre,Pedido,Factura,VrUnidad,Cantidad,VrTota
l' + CHAR(13) + CHAR(10)
SET @Mensaje1 = ' '
SET @Servidor = 'SERVIDOR'
DECLARE @Cantidad NUMERIC(15,2), @Factura CHAR(10), @Nombre CHAR(60),
@NPedido CHAR(10), @OrdenNro CHAR(10),@Producto CHAR(20), @ValorUnit
NUMERIC(17,4), @Titulo CHAR(60)
DECLARE @FacBruto NUMERIC(15,2), @FacCodMoneda CHAR(5), @FacFactura
CHAR(10),
@FacFecha DATETIME, @Nit CHAR(15), @NomCli CHAR(60), @FacNota CHAR(255),
@FacOrden CHAR(10), @FacTipoDcto CHAR(2), @FacTipoVta CHAR(5)
DECLARE rcmvto CURSOR GLOBAL SCROLL FOR
SELECT Ins.CANTIDAD, Ins.FACTURA, Ins.NOMBRE, Ins.NPEDIDO, Ins.ORDENNRO,
Ins.PRODUCTO, Ins.VALORUNIT, Lot.DESCRIPCIO
FROM inserted Ins INNER JOIN MTLOTE Lot ON Ins.ORDENNRO = Lot.CODLOTE
WHERE ((LEFT(FACTURA,3) = '211' AND
((ORDENNRO)>'0')) OR
(LEFT(FACTURA,3) = '200')AND
((ORDENNRO)>'0'))
OPEN rcmvto
FETCH FIRST FROM rc
INTO @Cantidad, @Factura, @Nombre, @NPedido, @OrdenNro, @Producto,
@ValorUnit, @Titulo
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE rtfac CURSOR LOCAL SCROLL FOR
SELECT FAC.BRUTO, FAC.CODMONEDA, FAC.FACTURA, FAC.FECHA, FAC.NIT,
CLI.NOMBRE,
FAC.NOTA, FAC.ORDEN, FAC.TIPODCTO, FAC.TIPOVTA
FROM FACTURAS FAC INNER JOIN CLIENTES CLI ON FAC.NIT = CLI.NIT
WHERE (FAC.FACTURA = @Factura AND FAC.TIPODCTO = 'FA' AND (FAC.TIPOVTA '2' OR FAC.TIPOVTA = '1')) OR
(FAC.FACTURA = @Factura AND FAC.TIPODCTO = 'FR' AND (FAC.TIPOVTA = '2' OR
FAC.TIPOVTA = '1'))
OPEN rtfac
FETCH FIRST FROM rtfac
INTO @FacBruto, @FacCodMoneda, @FacFactura, @FacFecha, @Nit, @NomCli,
@FacNota,
@FacOrden, @FacTipoDcto, @FacTipoVta
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SiNo = 1
SET @Mensaje1 = @Mensaje1 + CHAR(13) + CHAR(10)
+ 'Orden ' + @OrdenNro + CHAR(13) + CHAR(10)
+ 'Titulo ' + @Titulo + CHAR(13) + CHAR(10)
+ 'Cliente ' + @NomCli + CHAR(13) + CHAR(10)
+ 'Producto ' + @Producto + '-' + @Nombre + CHAR(13) + CHAR(10)
+ 'Pedido ' + @NPedido + CHAR(13) + CHAR(10)
+ 'Factura ' + @Factura + CHAR(13) + CHAR(10)
+ 'VrUnidad ' + @ValorUnit + CHAR(13) + CHAR(10)
+ 'Cantidad ' + @Cantidad + CHAR(13) + CHAR(10)
+ 'VrTotal ' + @FacBruto + CHAR(13) + CHAR(10)
SET @Mensaje = @Mensaje + @OrdenNro + ',' + @Titulo + ',' + @NomCli + ','
+ @Producto
+ ',' + @Nombre + ',' + @NPedido + ',' + @Factura + ',' + @ValorUnit + ','
+
@Cantidad + ',' + @FacBruto + CHAR(13) + CHAR(10)
FETCH NEXT FROM rt
INTO @FacBruto, @FacCodMoneda, @FacFactura, @FacFecha, @Nit, @NomCli,
@FacNota,
@FacOrden, @FacTipoDcto, @FacTipoVta
END
CLOSE rtfac
DEALLOCATE rtfac
FETCH NEXT FROM rcmvto
INTO @Cantidad, @Factura, @Nombre, @NPedido, @OrdenNro, @Producto,
@ValorUnit, @Titulo
END
CLOSE rcmvto
DEALLOCATE rcmvto
IF @SiNo = 1
BEGIN
SET @MensajeDef = @Mensaje1 + CHAR(10) + CHAR(13) + 'Datos Para Excel' +
CHAR(10) + CHAR(13) + @Mensaje
EXEC @rcm = master.dbo.xp_smtp_sendmail
@FROM = @Desde,
@FROM_NAME = @Desde_Nombre,
@TO = N'',
@subject = @Titul,
@message = @MensajeDef,
@server = @Servidor
END
SET XACT_ABORT OFF

"Javier Loria" escribió en el mensaje
news:
Hola Heidi:
No soy experto en Fox :(, pero es muy probable que el error venga
acompanado de otros errores y solo estes viendo el primero. En esta
coleccion es donde viene tu mensaje personalizado.
Si estas usando ADO debes buscar en la coleccion de errores de la
conexion. Si esta usando otro modelo alguno de los expertos de Fox debe
saber.
Por ultimo, tu trigger esta disenado para que Inserted tenga una sola
fila :(. Debes o enviar un error cuando hay mas de una fila, o cambiarlo
para que use conjuntos de datos y no programacion procedimental.
Algo como esto (sin probar), es lo que que probablemente te sirve:
=> -- Tenemos una orden en 0?
IF EXISTS (SELECT * FROM Inserted
WHERE (TIPOMVTO = 'S13' OR TIPOMVTO = 'S19')
AND ORDENNRO=0 )
BEGIN
RAISERROR ('Este tipo de movimiento no puede tener Orden 0!!',16, 1)
ROLLBACK TRANSACTION
END

IF EXISTS (SELECT *
FROM [SERVIDOR\SERVIDOR2000].SIP.DBO.COS_ORDENES o
JOIN Inserted
ON O.[Número Orden]=Inserted.OrdenNro
WHERE (Inserted.TIPOMVTO = 'S13'
OR Inserted.TIPOMVTO = 'S19')
AND o.Cumplida=1
BEGIN
RAISERROR ('La orden %u ya se encuentra cumplida, comuniquese con
costos!!', 16, 1, @OrdenNro)
ROLLBACK TRANSACTION
END
=> Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Heidi escribio:
> Hola a todos,
> Tengo un trigger que envía un mensaje de error y detiene la
> transaccion si se cumple una condición, la cuestion es que cuando
> envío el mensaje (la aplicación esta en VisualFox), me sale otra
> cosa, si valida bien las condiciones, pero me sale lo siguiente
>
> No es posible pasar datos hacia tabla de inventario.
> Posible causa :
> Mensaje : Error de conectividad: [Microsoft][ODBC SQL Server
> Driver][SQL Server]1
> Mientras que si estoy en acces si sale bien el error despues del 1
> es decir,
> No es posible pasar datos hacia tabla de inventario.
> Posible causa :
> Mensaje : Error de conectividad: [Microsoft][ODBC SQL Server
> Driver][SQL Server]1La orden 17841 ya se encuentra cumplida,
> comuniquese con costos (#50000)
> el trigger es el siguiente: (la primera parte, donde valida si es 0
> si saca el mensaje bien en ambos programas).
> Mil gracias por su valiosa ayuda
> CREATE TRIGGER MvtoInvValida
> ON MVTOINV
> FOR INSERT, UPDATE
> AS
> DECLARE @TipoMvto CHAR(5), @OrdenNro INT, @Cumplida INT
> SELECT @TipoMvto = TIPOMVTO, @OrdenNro = ORDENNRO
> FROM inserted WHERE TIPOMVTO = 'S13' OR TIPOMVTO = 'S19'
> IF (@OrdenNro = 0)
> BEGIN
> RAISERROR ('Este tipo de movimiento no puede tener Orden 0!!',
> 16, 1)
> ROLLBACK TRANSACTION
> END
> ELSE
> BEGIN
> SELECT @OrdenNro = CONVERT(INT, i.ORDENNRO) FROM inserted i
> WHERE i.TIPOMVTO = 'S13' OR i.TIPOMVTO = 'S19'
> SELECT @Cumplida = o.Cumplida
> FROM [SERVIDOR\SERVIDOR2000].SIP.DBO.COS_ORDENES o
> WHERE o.[Número Orden] = @OrdenNro
> PRINT @Cumplida
> IF (@Cumplida = 1)
> BEGIN
> RAISERROR ('La orden %u ya se encuentra cumplida, comuniquese con
> costos!!',
> 16, 1, @OrdenNro)
> ROLLBACK TRANSACTION
> END
> END


Respuesta Responder a este mensaje
#4 Javier Loria
14/05/2004 - 01:03 | Informe spam
Hola:
Con gusto lo reviso.
Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Heidi escribio:
Javier, espero no abusar de ti, y si es asi pues no hay problema con
que no me respondas esto, tengo el siguiente trigger, pero me da
error y ademas no he podido hacer algo con conjunto de registros de
otra forma para lo que necesito que es enviar un e-mail que de los
datos de la factura a alguien, me podrías ayudar algo? (solo si es
posible), me dicen que tiene errores de sintaxis pero el SQL no me
dice errores de sintaxis.

Mil gracias
DROP TRIGGER [MvtoFac_Ins]
CREATE TRIGGER [MvtoFac_Ins] ON [dbo].[MVTOFAC]
FOR INSERT AS
SET XACT_ABORT ON


DECLARE @rcm int
DECLARE @SiNo INT
DECLARE @Desde NVARCHAR(4000),
@Desde_Nombre NVARCHAR(4000),
@Para NVARCHAR(4000),
@Titul NVARCHAR(4000),
@Mensaje NVARCHAR(4000),
@Mensaje1 NVARCHAR(4000),
@Servidor NVARCHAR(4000),
@MensajeDef NVARCHAR(4000)
SET @SiNo = 0
SET @Desde = Suser_sname()
SET @Desde_Nombre = HOST_NAME()
SET @Para = ''
SET @Titul = 'Orden Facturada'
SET @Mensaje >


'Orden,Titulo,Cliente,Trabajo,Nombre,Pedido,Factura,VrUnidad,Cantidad,VrTota
l' + CHAR(13) + CHAR(10)
SET @Mensaje1 = ' '
SET @Servidor = 'SERVIDOR'
DECLARE @Cantidad NUMERIC(15,2), @Factura CHAR(10), @Nombre CHAR(60),
@NPedido CHAR(10), @OrdenNro CHAR(10),@Producto CHAR(20), @ValorUnit
NUMERIC(17,4), @Titulo CHAR(60)
DECLARE @FacBruto NUMERIC(15,2), @FacCodMoneda CHAR(5), @FacFactura
CHAR(10),
@FacFecha DATETIME, @Nit CHAR(15), @NomCli CHAR(60), @FacNota
CHAR(255), @FacOrden CHAR(10), @FacTipoDcto CHAR(2), @FacTipoVta
CHAR(5)
DECLARE rcmvto CURSOR GLOBAL SCROLL FOR
SELECT Ins.CANTIDAD, Ins.FACTURA, Ins.NOMBRE, Ins.NPEDIDO,
Ins.ORDENNRO, Ins.PRODUCTO, Ins.VALORUNIT, Lot.DESCRIPCIO
FROM inserted Ins INNER JOIN MTLOTE Lot ON Ins.ORDENNRO = Lot.CODLOTE
WHERE ((LEFT(FACTURA,3) = '211' AND
((ORDENNRO)>'0')) OR
(LEFT(FACTURA,3) = '200')AND
((ORDENNRO)>'0'))
OPEN rcmvto
FETCH FIRST FROM rc
INTO @Cantidad, @Factura, @Nombre, @NPedido, @OrdenNro, @Producto,
@ValorUnit, @Titulo
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE rtfac CURSOR LOCAL SCROLL FOR
SELECT FAC.BRUTO, FAC.CODMONEDA, FAC.FACTURA, FAC.FECHA, FAC.NIT,
CLI.NOMBRE,
FAC.NOTA, FAC.ORDEN, FAC.TIPODCTO, FAC.TIPOVTA
FROM FACTURAS FAC INNER JOIN CLIENTES CLI ON FAC.NIT = CLI.NIT
WHERE (FAC.FACTURA = @Factura AND FAC.TIPODCTO = 'FA' AND
(FAC.TIPOVTA = '2' OR FAC.TIPOVTA = '1')) OR
(FAC.FACTURA = @Factura AND FAC.TIPODCTO = 'FR' AND (FAC.TIPOVTA > '2' OR FAC.TIPOVTA = '1'))
OPEN rtfac
FETCH FIRST FROM rtfac
INTO @FacBruto, @FacCodMoneda, @FacFactura, @FacFecha, @Nit,
@NomCli, @FacNota,
@FacOrden, @FacTipoDcto, @FacTipoVta
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SiNo = 1
SET @Mensaje1 = @Mensaje1 + CHAR(13) + CHAR(10)
+ 'Orden ' + @OrdenNro + CHAR(13) + CHAR(10)
+ 'Titulo ' + @Titulo + CHAR(13) + CHAR(10)
+ 'Cliente ' + @NomCli + CHAR(13) + CHAR(10)
+ 'Producto ' + @Producto + '-' + @Nombre + CHAR(13) + CHAR(10)
+ 'Pedido ' + @NPedido + CHAR(13) + CHAR(10)
+ 'Factura ' + @Factura + CHAR(13) + CHAR(10)
+ 'VrUnidad ' + @ValorUnit + CHAR(13) + CHAR(10)
+ 'Cantidad ' + @Cantidad + CHAR(13) + CHAR(10)
+ 'VrTotal ' + @FacBruto + CHAR(13) + CHAR(10)
SET @Mensaje = @Mensaje + @OrdenNro + ',' + @Titulo + ',' + @NomCli
+ ',' + @Producto
+ ',' + @Nombre + ',' + @NPedido + ',' + @Factura + ',' +
@ValorUnit + ',' +
@Cantidad + ',' + @FacBruto + CHAR(13) + CHAR(10)
FETCH NEXT FROM rt
INTO @FacBruto, @FacCodMoneda, @FacFactura, @FacFecha, @Nit,
@NomCli, @FacNota,
@FacOrden, @FacTipoDcto, @FacTipoVta
END
CLOSE rtfac
DEALLOCATE rtfac
FETCH NEXT FROM rcmvto
INTO @Cantidad, @Factura, @Nombre, @NPedido, @OrdenNro, @Producto,
@ValorUnit, @Titulo
END
CLOSE rcmvto
DEALLOCATE rcmvto
IF @SiNo = 1
BEGIN
SET @MensajeDef = @Mensaje1 + CHAR(10) + CHAR(13) + 'Datos Para
Excel' + CHAR(10) + CHAR(13) + @Mensaje
EXEC @rcm = master.dbo.xp_smtp_sendmail
@FROM = @Desde,
@FROM_NAME = @Desde_Nombre,
@TO = N'',
@subject = @Titul,
@message = @MensajeDef,
@server = @Servidor
END
SET XACT_ABORT OFF

"Javier Loria" escribió en el mensaje
news:
Hola Heidi:
No soy experto en Fox :(, pero es muy probable que el error venga
acompanado de otros errores y solo estes viendo el primero. En esta
coleccion es donde viene tu mensaje personalizado.
Si estas usando ADO debes buscar en la coleccion de errores de la
conexion. Si esta usando otro modelo alguno de los expertos de Fox
debe saber.
Por ultimo, tu trigger esta disenado para que Inserted tenga una
sola fila :(. Debes o enviar un error cuando hay mas de una fila, o
cambiarlo para que use conjuntos de datos y no programacion
procedimental.
Algo como esto (sin probar), es lo que que probablemente te sirve:
=>> -- Tenemos una orden en 0?
IF EXISTS (SELECT * FROM Inserted
WHERE (TIPOMVTO = 'S13' OR TIPOMVTO = 'S19')
AND ORDENNRO=0 )
BEGIN
RAISERROR ('Este tipo de movimiento no puede tener Orden 0!!',16,
1) ROLLBACK TRANSACTION
END

IF EXISTS (SELECT *
FROM [SERVIDOR\SERVIDOR2000].SIP.DBO.COS_ORDENES o
JOIN Inserted
ON O.[Número Orden]=Inserted.OrdenNro
WHERE (Inserted.TIPOMVTO = 'S13'
OR Inserted.TIPOMVTO = 'S19')
AND o.Cumplida=1
BEGIN
RAISERROR ('La orden %u ya se encuentra cumplida, comuniquese con
costos!!', 16, 1, @OrdenNro)
ROLLBACK TRANSACTION
END
=>> Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Heidi escribio:
Hola a todos,
Tengo un trigger que envía un mensaje de error y detiene la
transaccion si se cumple una condición, la cuestion es que cuando
envío el mensaje (la aplicación esta en VisualFox), me sale otra
cosa, si valida bien las condiciones, pero me sale lo siguiente

No es posible pasar datos hacia tabla de inventario.
Posible causa :
Mensaje : Error de conectividad: [Microsoft][ODBC SQL Server
Driver][SQL Server]1
Mientras que si estoy en acces si sale bien el error despues del 1
es decir,
No es posible pasar datos hacia tabla de inventario.
Posible causa :
Mensaje : Error de conectividad: [Microsoft][ODBC SQL Server
Driver][SQL Server]1La orden 17841 ya se encuentra cumplida,
comuniquese con costos (#50000)
el trigger es el siguiente: (la primera parte, donde valida si es 0
si saca el mensaje bien en ambos programas).
Mil gracias por su valiosa ayuda
CREATE TRIGGER MvtoInvValida
ON MVTOINV
FOR INSERT, UPDATE
AS
DECLARE @TipoMvto CHAR(5), @OrdenNro INT, @Cumplida INT
SELECT @TipoMvto = TIPOMVTO, @OrdenNro = ORDENNRO
FROM inserted WHERE TIPOMVTO = 'S13' OR TIPOMVTO = 'S19'
IF (@OrdenNro = 0)
BEGIN
RAISERROR ('Este tipo de movimiento no puede tener Orden 0!!',
16, 1)
ROLLBACK TRANSACTION
END
ELSE
BEGIN
SELECT @OrdenNro = CONVERT(INT, i.ORDENNRO) FROM inserted i
WHERE i.TIPOMVTO = 'S13' OR i.TIPOMVTO = 'S19'
SELECT @Cumplida = o.Cumplida
FROM [SERVIDOR\SERVIDOR2000].SIP.DBO.COS_ORDENES o
WHERE o.[Número Orden] = @OrdenNro
PRINT @Cumplida
IF (@Cumplida = 1)
BEGIN
RAISERROR ('La orden %u ya se encuentra cumplida, comuniquese con
costos!!',
16, 1, @OrdenNro)
ROLLBACK TRANSACTION
END
END
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida