Foros del Web » Programando para Internet » ASP Clásico »

Problema con campo MEMO

Estas en el tema de Problema con campo MEMO en el foro de ASP Clásico en Foros del Web. Cuando intento guardar texto HTML en un campo memo me salta el siguiente error: Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC Microsoft ...
  #1 (permalink)  
Antiguo 12/08/2004, 16:53
Avatar de GustavoPY  
Fecha de Ingreso: marzo-2002
Ubicación: Capiatá
Mensajes: 88
Antigüedad: 23 años, 1 mes
Puntos: 0
Pregunta Problema con campo MEMO

Cuando intento guardar texto HTML en un campo memo me salta el siguiente error:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression '' <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Telesurf &rsaquo; Internet &amp; Wireless</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <'.

/gustavoarriola/advertencia.asp, line 48


El código es el siguiente:
**************inicio**************

Dim idArticulo, TituloArticulo, DescripcionArticulo, CuerpoArticulo
Dim SeccionArticulo, AutorArticulo, EmailArticulo
Dim Fecha, EstadoArticulo, campo
TituloArticulo = Request.Form("txtTituloArticulo")
DescripcionArticulo = Request.Form("txtDescripcionArticulo")
CuerpoArticulo = Request.Form("txtCuerpoArticulo")
SeccionArticulo = Request.Form("lstSeccionArticulo")
AutorArticulo = Request.Form("txtAutorArticulo")
EmailArticulo = Request.Form("txtAutorEmail")
EstadoArticulo = Session("EstadoArticulo")
Fecha = Session("Fecha")
If EstadoArticulo = "Editar" then 'Si es una actualización del articulo
idArticulo = Session("idArticulo")
SQL = "UPDATE tblArticulos SET Titulo='" &TituloArticulo& "', Descripcion='" &DescripcionArticulo& "', Articulo='" &CuerpoArticulo& "', IdSeccion=" &SeccionArticulo& ", Autor='" &AutorArticulo& "', Email='" &EmailArticulo& "', FechaUpdate=" &Fecha& " WHERE IdArticulo=" &idArticulo
Conexiondb.Execute(SQL)
mensaje = "Su art&iacute;culo ha sido actualizado correctamente<br>"
mensaje = mensaje & "Gracias por seguir escribiendo."
else 'Si es un nuevo articulo
SQL = "INSERT INTO tblArticulos (Titulo, Descripcion, Articulo, IdSeccion, Autor, Email, FechaPublic) "
SQL = SQL & "VALUES ('"&TituloArticulo& "', '"&DescripcionArticulo& "', '"&CuerpoArticulo& "', "& SeccionArticulo & " , '"&AutorArticulo& "', '"&EmailArticulo& "', " &Fecha & ")"
ConexionDB.Execute(SQL) 'Linea 47
mensaje = "Su art&iacute;culo ha sido agregado correctamente<br>"
mensaje = mensaje & "Gracias por escribir."
End if



***********fin****************

Pero si intento guardar un HTML "corto", el artículo se publica sin problemas!!

¿A qué puede deberse esto?

Desde ya muchas gracias!!
__________________
*********************************
Gustavo Arriola
http://www.gustavoarriola.com
*********************************
  #2 (permalink)  
Antiguo 12/08/2004, 17:15
 
Fecha de Ingreso: abril-2004
Ubicación: México D.F.
Mensajes: 1.724
Antigüedad: 21 años
Puntos: 4
Cual es el campo que dices???
  #3 (permalink)  
Antiguo 12/08/2004, 17:16
 
Fecha de Ingreso: abril-2004
Ubicación: México D.F.
Mensajes: 1.724
Antigüedad: 21 años
Puntos: 4
Olvidaba, la mejor forma es Intentar poner response.write SQL, y ve los valores, comparalos a lo mejor una coma se te fue.
  #4 (permalink)  
Antiguo 12/08/2004, 17:17
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años, 2 meses
Puntos: 535
hacele lo siguiente (lo que está en bold) a todos los request antes de insertar/actualizar algo en la BD:


CuerpoArticulo = Trim(Replace(Request.Form("txtCuerpoArticulo"), "'", "''"))
__________________
...___...
  #5 (permalink)  
Antiguo 14/08/2004, 09:57
Avatar de GustavoPY  
Fecha de Ingreso: marzo-2002
Ubicación: Capiatá
Mensajes: 88
Antigüedad: 23 años, 1 mes
Puntos: 0
Perdón, olvidé especificar que el campo MEMO es Articulo.

El asunto es que cuando guardo una cadena HTML "corta" él lo hace sin problemas, pero a la hora de guardar una página completa (HTML) me salta ese error.

Desde ya muchas gracias!
__________________
*********************************
Gustavo Arriola
http://www.gustavoarriola.com
*********************************
  #6 (permalink)  
Antiguo 14/08/2004, 15:12
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años, 2 meses
Puntos: 535
ya probaste lo que puse más arriba?
  #7 (permalink)  
Antiguo 27/08/2004, 08:44
Avatar de GustavoPY  
Fecha de Ingreso: marzo-2002
Ubicación: Capiatá
Mensajes: 88
Antigüedad: 23 años, 1 mes
Puntos: 0
De acuerdo

Amigo, funciona perfecto!!
pero, que es lo que hace tu solución, al parecer reemplaza las comillas dobles por simples (¿o al revez?) pero ¿trim?

Desde ya muchas gracias!
__________________
*********************************
Gustavo Arriola
http://www.gustavoarriola.com
*********************************
  #8 (permalink)  
Antiguo 27/08/2004, 09:20
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Replace: Regresa una cadena en la cual una subcadena ha sido remplazada por otra un determinado numero de veces.
Trim: Elimina los espacios de ambos extremos de una cadena.

Mas información:

http://msdn.microsoft.com/library/de...vsfctltrim.asp
  #9 (permalink)  
Antiguo 27/08/2004, 10:08
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años, 2 meses
Puntos: 535
Cita:
al parecer reemplaza las comillas dobles por simples (¿o al revez?)
Bueno, Myakire ya te respondió qué es lo que hace tanto el trim como el replace, pero vayamos un poco más allá:

Cada vez que necesites "meter datos" de texto en una sentencia SQL, lo que conviene es hacer un replace de una comilla simple ' por dos de ellas seguidas '' (<-- esto no es una comilla doble como esta: ").

¿Para qué? Fijate cómo es un insert:

INSERT INTO Tabla (Apellido, Nombre) VALUES ('Pérez', 'Juan')

Ahora en vez de Juan Pérez, lo metemos a Juan O'Brian:

INSERT INTO Tabla (Apellido, Nombre) VALUES ('O'Brian', 'Juan')

La comilla simple del apellido arruina el insert. Para solucionarlo, en vez de una comilla simple se colocan dos de ellas seguidas. Luego, la BD interpretará eso como sólo una, guardando O'Brian y no O''Brian
__________________
...___...
  #10 (permalink)  
Antiguo 26/05/2006, 16:12
 
Fecha de Ingreso: mayo-2006
Mensajes: 2
Antigüedad: 19 años
Puntos: 0
Ayuda Con Campo Memo

QUE TAL SALUDOS

MIRA APENAS ACABO DE LEER TU PREGUNTA; TENGO EL MISMO PROBLEMA SOBRE ALMACENAR DATOS EN UN CAMPO MEMO CON SQL y VISUAL BASIC. EL PROBLEMA ES POR CANTIDAD DE CARACTERES AUN CUANDO EL CAMPO ES MEMO. SI ENCONTRASTE LA FORMA DE SOLUCIONARLO OJALA QUE ME PUDIERAS AYUDAR.


DE ANTEMANO MUCHAS GRACIAS.

ATTE:
JORGE
  #11 (permalink)  
Antiguo 13/07/2006, 09:29
 
Fecha de Ingreso: noviembre-2005
Mensajes: 5
Antigüedad: 19 años, 5 meses
Puntos: 0
Pregunta Solo muestra 255 caracteres...(principiante o no?)

Tengo un campo "memo" con un texto existente que sobrepasa los 255 caracteres.
Tengo una página donde deseo mostrar el texto completo pero no se como hacerlo, tengo actualmente <%=RS("descripcion")%> y solo me muestra 255 caracteres. Que debo hacer para mostrar el texto completo?.
Gracias.:
  #12 (permalink)  
Antiguo 13/07/2006, 20:51
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
En SQL Server se usan los campos Text.

Estamos hablando de los mismo?, creo que ya me perdí
  #13 (permalink)  
Antiguo 14/07/2006, 17:04
 
Fecha de Ingreso: noviembre-2005
Mensajes: 5
Antigüedad: 19 años, 5 meses
Puntos: 0
Efectivamente, en Sql hay distintos tipos para texto, si solo usamos el varchar, me permite introducir 255 caracteres máximo, en cambio si utilizo nvarchar me permite hasta 4000 caracteres. Ahora, el varchar = text, nvarchar = memo. Yo deseo mostrar un campo con tipo "memo" o "nvarchar".
Mi problema no es con la base, sino al mostrarlo en la página ASP.
Saludos. Gracias.
  #14 (permalink)  
Antiguo 14/07/2006, 17:35
Avatar de JuanRAPerez
Colaborador
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.393
Antigüedad: 21 años, 6 meses
Puntos: 27
Cita:
Iniciado por jocayo
Mi problema no es con la base, sino al mostrarlo en la página ASP.
una pregunta efectivamente si entras al administrador de tu base y copias los caracteres, en efecto tienes mas de 255???? el registro, no el campo,

y efectivamente son mas de 255?????

sera eu caundo lo guardas solo guardas 255 porque lo mandas por metodo que no es el apropiado ???
__________________
JuanRa Pérez
San Salvador, El Salvador
  #15 (permalink)  
Antiguo 21/07/2006, 12:18
 
Fecha de Ingreso: julio-2006
Mensajes: 4
Antigüedad: 18 años, 9 meses
Puntos: 0
Pregunta yo tmb ya meti datos con comillas simple a una bd

yo tmb ya meti datos con comillas simple a una bd de SQL Server, pero con stored procedure desde Visual Basic, pero me marca un error al leer los datos para mostrarlos.

en:
LsQuery = "SELECT cp_inventario FROM ColectoresPolvo WHERE cp_Modelo = '" & modelo & "'"
xRecordSet.Open LsQuery, cn, adOpenStatic, adLockPessimistic

donde la variable modelo contiene "KNF-1-48/61'", o sea si se guardo la comilla simple pero al momento de leerla marca error
el Error dice:
Error '2147217900 (80040e14)' en tiempo de ejecución:
[Microsoft][ODBC SQL Server Driver][SQL Server]Comilla no cerrada antes de la cadena de carateres 'KNF-1-48/61''



Cita:
Iniciado por Al Zuwaga
Bueno, Myakire ya te respondió qué es lo que hace tanto el trim como el replace, pero vayamos un poco más allá:

Cada vez que necesites "meter datos" de texto en una sentencia SQL, lo que conviene es hacer un replace de una comilla simple ' por dos de ellas seguidas '' (<-- esto no es una comilla doble como esta: ").

¿Para qué? Fijate cómo es un insert:

INSERT INTO Tabla (Apellido, Nombre) VALUES ('Pérez', 'Juan')

Ahora en vez de Juan Pérez, lo metemos a Juan O'Brian:

INSERT INTO Tabla (Apellido, Nombre) VALUES ('O'Brian', 'Juan')

La comilla simple del apellido arruina el insert. Para solucionarlo, en vez de una comilla simple se colocan dos de ellas seguidas. Luego, la BD interpretará eso como sólo una, guardando O'Brian y no O''Brian
  #16 (permalink)  
Antiguo 21/07/2006, 19:23
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Alternativas:

1) No guardes la comilla simple, guarda otro caracter y remplázalo
2) No hagas consultas concatenando instrucciones, mejor usa parámetros y lee mediente SP's

Saludos
  #17 (permalink)  
Antiguo 16/08/2006, 16:17
 
Fecha de Ingreso: mayo-2006
Mensajes: 2
Antigüedad: 19 años
Puntos: 0
Solucion a campo Memo en DBF para mas de 255 caracteres

Que tal, saludos a todos.

Bueno sobre la forma de meter mas de 255 caracteres a un campo Memo, en el caso de hacerlo desde Visual Basic, es de la siguiente forma:

Hay que concatenar la cadena de los primeros 255 caracteres y despues el resto de la cadena es decir.

si CadenaX = 300 caracteres

hay que meterlos asi.....

CampoMemo = 254 caracteres + 46 caracteres.

Para que me entiendan voy a hacer un ejemplo con SQL

INSERT INTO Tabla (Nombre, Observ) VALUES ('Juan', '[cadenaX]')

El chiste es separar [cadenaX] asi:

INSERT INTO Tabla (Nombre, Observ) VALUES ('Juan', 'left(cadenax,254)'+'right(cadenax,46)')

fijense que hay una concatenacion '+' despues de los 254 caracteres dentro de un mismo campo. Pues esa es la que sirve para meter la cadena completa.
Les pondre un ejemplo de un codigo y observen:


Private sub Insertar ()
Com.CommandText = "INSERT INTO DATOS (NOMBRE,OBSERV) VALUES ('" & UCase(Trim(txt_Nombre.Text)) & "','" & QuitaCarac(UCase(Trim(txt_Observ.Text))) & "')"
Set RS = Com.Execute
End Sub


Ahora una rutina para preparar la cadena y dejarla lista para insertar es la sig:

Private Function QuitaCarac(Cadena As String) As String
'QUITA LOS RETORNOS DE CARRO PARA ALMACENAR EN CAMPO, PREPARA UNA CADENA DE MAS DE 254 CARACTERES PARA INSERTAR A CAMPO MEMO
Dim X As Integer
Dim Cont As Integer
Dim Texto As String
Dim Car As String
Dim N As Integer
Con = Len(Cadena)
Texto = ""
X = 1
N = 0
Do
N = N + 1
If N >= 254 Then
N = 0
Car = "' + '"
Texto = Texto + Car
End If
Car = Mid(Cadena, X, 1)
If Car = Chr(10) Then
Car = Chr(13)
ElseIf Car = "'" Or Car = "+" Then
GoTo 1
End If
Texto = Texto + Car
1 X = X + 1
Loop Until X > Con
QuitaCarac = Texto
End Function

Esta funcion lo que hara sera separar en bloques de 254 caracteres la cadena
CadenaNueva= Bloque254 '+' Bloque254 '+' ... '+' BloqueRestante

Espero que les sirva de algo, o que les ayude a resolver algunas dudas.

Ojala que ahora alguien pueda averiguar por que al usar el comando UPDATE, siguiendo el mismo procedimiento, solo deja actualizar 508 caracteres y mas de 508 se bloquea la aplicación sin mostrar un aviso de error ni nada.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:44.