Problemas con variables de cadena

19/05/2004 - 12:50 por Pedro J. | Informe spam
Hola:
Lo cierto es que se trata de algo cuando menos "raro", no salgo de mi
asombro al ver el comportamiento de un procedimiento almacenado que manejo;
este procedimiento cuenta con una variable (varchar 8000) para almacenar el
cuerpo de un correo que voy a enviar. Como podeis suponer el valor del
cuerpo es dinámico, generado a partir de consultas a varias tablas. Pues el
problema es que se inserta dentro del cuerpo un signo de admiración.
Curiosamente el signo tiene una posición fija, independientemente de la
longitud de la cadena, es decir, si la cadena aumenta de longitud el
caracter sigue en la posición 800 aproximadamente por lo que se intercala en
otra palabra distinta.

En espera de vuestras noticias recibid un saludo.

Preguntas similare

Leer las respuestas

#1 ulises
19/05/2004 - 15:49 | Informe spam
Creo que seríamos de más ayuda si envias el procedimiento
y algo da data para revisarlo :)

Saludos,
Ulises

Hola:
Lo cierto es que se trata de algo cuando menos "raro", no


salgo de mi
asombro al ver el comportamiento de un procedimiento


almacenado que manejo;
este procedimiento cuenta con una variable (varchar 8000)


para almacenar el
cuerpo de un correo que voy a enviar. Como podeis suponer


el valor del
cuerpo es dinámico, generado a partir de consultas a


varias tablas. Pues el
problema es que se inserta dentro del cuerpo un signo de


admiración.
Curiosamente el signo tiene una posición fija,


independientemente de la
longitud de la cadena, es decir, si la cadena aumenta de


longitud el
caracter sigue en la posición 800 aproximadamente por lo


que se intercala en
otra palabra distinta.

En espera de vuestras noticias recibid un saludo.


.

Respuesta Responder a este mensaje
#2 Pedro J.
19/05/2004 - 16:12 | Informe spam
El procedimiento es algo así (he quitado algunas cosas insustanciales)
CREATE PROCEDURE dbo.pa_correo_PujaAdjudicada
/* Este procedimiento tiene como misión informar a los clientes
de que su puja ha sido adjudicada */
@vIdPuja as int -- Identificador de la puja

AS

DECLARE @vCuerpo as varchar(8000)
DECLARE @vAsunto as varchar(100)
DECLARE @vIdProducto as int -- identificador del producto
DECLARE @vTitulo as varchar(70) -- Nombre del producto
DECLARE @vPrecioInicial as money -- Precio por el que salió el producto a
subasta
DECLARE @vPeso as decimal(7,2)
DECLARE @vCantidadPujada as integer -- Cantidad inicial por la que pujo el
cliente
DECLARE @vCantidadAsignada as integer -- Cantidad asignada a la puja
DECLARE @vPrecio as money -- Precio por el que pujó
DECLARE @vNombre as varchar(30)
DECLARE @vApellidos as varchar(50)
DECLARE @vDireccion as varchar(60)
DECLARE @vCodPostal as varchar(5) -- Código postal del cliente
DECLARE @vPoblacion as varchar(50)
DECLARE @vProvincia as varchar(100)
DECLARE @vTelefono as varchar(9)
DECLARE @vEmail as varchar(60) -- dirección email del cliente
DECLARE @vIdCliente as int -- Identificador del cliente
declare @vIdentificadorConfirmacion as varchar(50) --identificador único
para confirmaciones
declare @vProveedor as varchar(1) --Proveedor del productoF

DECLARE @vURLConfirmacion as varchar(250) -- Enlace para confirmar la
aceptación de la puja
DECLARE @vRemitente as varchar(100) -- Dirección email origen d
DECLARE @vPrecioPortes as money --Precio de los portes
DECLARE @vPorIVA as int --Porcentaje de IVA(siempre 16% excepto los
clientes exentos)
DECLARE @vIVA as money
DECLARE @vBase as money
declare @vEmailAdministrador as varchar(100) -- Dirección a la que se envía
una copia del correo
SET @vBase=0
SET @vIVA=0


SET @vPorIVA
IF @vCodPostal is null
SET @vCodPostal=''
SET @vRemitente=''
SET @vEmailAdministrador=''
SET @vURLConfirmacion="www.vendodetodo.com/enlace.asp'
SELECT @vIdProducto=Productos.IdProducto, @vTitulo=Productos.Titulo,
@vPrecioInicial=Productos.PrecioInicial, @vPeso=Productos.Peso,
@vCantidadPujada=Pujas.CantidadPujada,
@vCantidadAsignada=Pujas.CantidadAsignada,
@vPrecio=Pujas.Precio, @vNombre=Clientes.Nombre,
@vApellidos=Clientes.Apellidos, @vDireccion=Clientes.Direccion,
@vCodPostal=Clientes.CodPostal, @vPoblacion=Clientes.Poblacion,
@vProvincia= Provincias.Descripcion,
@vTelefono=Clientes.Telefono, @vEmail=Clientes.Email,
@vIdCliente=Clientes.IdCliente,
@vIdentificadorConfirmacion=cast(pujas.IdentificadorConfirmacion as
varchar(50)),
@vProveedor=Productos.Proveedor
FROM Provincias RIGHT OUTER JOIN
Clientes ON Provincias.idprovincia = Clientes.IdProvincia
RIGHT OUTER JOIN
Productos RIGHT OUTER JOIN
Pujas ON Productos.IdProducto = Pujas.IdProducto ON
Clientes.IdCliente = Pujas.IdCliente
WHERE Pujas.IdPuja=@vIdPuja

SET @vPeso=round(@vPeso*@vCantidadAsignada,2)

SELECT @vPrecioPortes = TarifasEnvio.Precio
FROM TarifasEnvio RIGHT OUTER JOIN
Clientes ON TarifasEnvio.IdZona = Clientes.IdZona
WHERE (Clientes.IdCliente = @vIdCliente) AND (TarifasEnvio.PesoDesde <@vPeso) AND (TarifasEnvio.PesoHasta >= @vPeso)
If @vPrecioPortes is null
SET @vPrecioPortes=0

SET @vAsunto='Su puja ha sido ADJUDICADA '
set @vCuerpo = '<HTML><BODY>' + Char(13)

SET @vCuerpo= +@vCuerpo + 'Estimado usuario: <br>'
SET @vCuerpo = @vCuerpo + 'Tenemos el gusto de informale que es uno de los
adjudicatarios del siguiente producto:<br>'

SET @vCuerpo = @vCuerpo + 'Los datos de la subasta son: <br>' + Char(13)
SET @vCuerpo = @vCuerpo + 'Referencia Adjudicación: ' + cast(@vIdPuja as
varchar)+ @vProveedor + '<br>' + Char(13)
SET @vCuerpo = @vCuerpo + 'Referencia Producto: ' + cast(@vIdProducto as
varchar)+ @vProveedor +'<br>' + Char(13)
SET @vCuerpo = @vCuerpo + 'Producto: ' + @vTitulo +'<br>' + Char(13)
set @vCuerpo = @vCuerpo + 'Precio inicial: ' + cast(@vPrecioInicial as
varchar) + ' Euros' +'<br>' + Char(13)
set @vCuerpo = @vCuerpo + 'Precio pujado: ' + cast(@vPrecio as varchar) + '
Euros'+'<br>' + Char(13)
set @vCuerpo = @vcuerpo + 'Cantidad pujada: '+ cast(@vCantidadPujada as
varchar) +'<br>' + Char(13)
set @vCuerpo = @vCuerpo + 'Cantidad adjudicada: ' +cast(@vCantidadAsignada
as varchar) +'<br>' + Char(13)
set @vCuerpo = @vCuerpo + 'Peso de la cantidad adjudicada: ' +cast(@vPeso
as varchar) +'<br><br>' + Char(13)

set @vCuerpo = @vCuerpo + 'DATOS DE LA FORMA DE PAGO E IMPORTES:<br>' +
Char(13)
seT @vCuerpo = @vCuerpo + ' Precio: ' + cast(@vPrecio as varchar) +
'Euros ' + ' * ' + cast(@vCantidadAsignada as varchar) + ' unidad'
if @vCantidadAsignada>1
seT @vCuerpo = @vCuerpo + 'es'
SET @vBASE=round(@vPrecio*@vCantidadAsignada, 2)
SET @vCuerpo = @vCuerpo + ' = ' + cast(@vBase as varchar)+ ' Euros<br>' +
Char(13)
SET @vCuerpo = @vCuerpo + ' Portes: ' + cast(@vPrecioPortes as varchar)
+ ' Euros<br>' + Char(13)
SET @vBase= @vBase+ @vPrecioPortes
SET @vIVA=round(@vBase * @vPorIVA /100,2)
SET @vCuerpo = @vCuerpo + ' IVA (' +cast(@vPorIVA as varchar) + '%):' +
cast(@vIVA as varchar)+ ' Euros<br>' + Char(13)
SET @vCuerpo = @vCuerpo + ' TOTAL:' + CAST((@vBase+@vIVA) as varchar) +
' Euros<br><br>' + Char(13)

set @vCuerpo = @vCuerpo + 'DATOS DEL ENVIO: <br>' + Char(13)
set @vCuerpo = @vCuerpo + 'Tfno. contacto: '+ @vTelefono + '<br><br>' +
Char(13)
set @vCuerpo = @vCuerpo + 'Para confirmar la adjudicación de esta puja (y
cambiar si lo desea la dirección de envio y destinatario) ha de pulsar ' +
CHAR(13)
set @vCuerpo = @vCuerpo + ' <a href="' + @vURLConfirmacion + cast(@vIdPuja
as varchar) + '&confirmacion=' + @vIdentificadorConfirmacion +
'">aquí.</a><br><br>' + CHAR(13)
set @vCuerpo = @vCuerpo + 'El pago se podrá realizar contrarembolso
mediante Seur, con un coste del 3.5% sobre el total del importe o mediante
transferencia bancaria al número de cuenta XXXX/XXXX/XX/XXXXXXXXXX de Caja
España. <br>' + Char(13)
set @vCuerpo = @vCuerpo + 'En caso de realizar una transferencia, tendrá
que incluír la referencia de la Puja. <br><br>' + Char(13)
set @vCuerpo = @vCuerpo + 'VENDODETODO<br>' + Char(13)
set @vCuerpo = @vCuerpo + 'Subastas Informáticas<br>' + Char(13)
set @vCuerpo = @vCuerpo + 'Calle Del Suspiro Verde,13<br>' + Char(13)
set @vCuerpo = @vCuerpo + 'Centro Comercial Los de la Tele<br>' + Char(13)
set @vCuerpo = @vCuerpo + 'VillaRebujillo de Arriba, Madrid, 28806<br>' +
Char(13)
set @vCuerpo = @vCuerpo + '<br>' + Char(13)
set @vCuerpo = @vCuerpo + 'http://www.vendodetodo.com<br>' + Char(13)

set @vCuerpo = @vCuerpo + '</BODY></HTML>' + Char(13)

EXEC sp_send_cdosysmail @vRemitente, @vEmail, @vAsunto , @vCuerpo
EXEC sp_send_cdosysmail @vRemitente, @vEmailAdministrador, @vAsunto ,
@vCuerpo

RETURN
GO




Y el resultado obtenido algo así como:
Estimado usuario:
Tenemos el gusto de informale que es uno de los adjudicatarios del siguiente
producto:
Los datos de la subasta son:
Referencia Adjudicación: 1272M
Referencia Producto: 10300M
Producto: Producto para hacer prueba
Precio inicial: 10.00 Euros
Precio pujado: 10.00 Euros
Cantidad pujada: 1
Cantidad adjudicada: 1
Peso de la cantidad adjudicada: 6.00

DATOS DE LA FORMA DE PAGO E IMPORTES:
Precio: 10.00Euros * 1 unidad = 10.00 Euros
Portes: 8.00 Euros
IVA (16%):2.88 Euros
TOTAL:20.88 Euros

DATOS DEL ENVIO:
Tfno. contacto: 544452322

Para confirmar la adjudicación de esta puja (y cambiar si lo desea la
dirección de envio y destinatario) ha de pulsar aquí.

El pago se podrá realizar contrarembolso mediante Seur, con u! n coste del
3.5% sobre el total del importe o mediante transferencia bancaria al número
de cuenta XXXX/XXXX/XX/XXXXXXXXXX de Caja España.
En caso de realizar una transferencia, tendrá que incluír la referencia de
la Puja.

VENDODETODO
Subastas Informáticas
Calle Del Suspiro Verde,13
Centro Comercial Los de la Tele
VillaRebujillo de Arriba, Madrid, 28806

http://www.vendodetodo.com

En el resultado se puede observar como en el párrafo que comienza por "El
pago se podrá realizar", donde debería poner "un coste" pone "u! n coste",
es el signo de admiración y el espacio en blanco lo que me inserta en el
mensaje en un lugar fijo.



"ulises" escribió en el mensaje
news:f2c801c43da8$1228f290$
Creo que seríamos de más ayuda si envias el procedimiento
y algo da data para revisarlo :)

Saludos,
Ulises

Hola:
Lo cierto es que se trata de algo cuando menos "raro", no


salgo de mi
asombro al ver el comportamiento de un procedimiento


almacenado que manejo;
este procedimiento cuenta con una variable (varchar 8000)


para almacenar el
cuerpo de un correo que voy a enviar. Como podeis suponer


el valor del
cuerpo es dinámico, generado a partir de consultas a


varias tablas. Pues el
problema es que se inserta dentro del cuerpo un signo de


admiración.
Curiosamente el signo tiene una posición fija,


independientemente de la
longitud de la cadena, es decir, si la cadena aumenta de


longitud el
caracter sigue en la posición 800 aproximadamente por lo


que se intercala en
otra palabra distinta.

En espera de vuestras noticias recibid un saludo.


.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida