Sentencia SQL - Apóstrofe y Comillas dobles

15/07/2003 - 00:08 por Claudio | Informe spam
Hola a todos:

Quisiera ayuda para solucionar el problema del apóstrofe en sentencia SQL.
Como necesito que en el campo texto se almacene tanto las Comillas dobles(")
como la
comilla simple o apostrofe (') opté por el momento trabajar así:

Update TablaCalle set Descalle=""" & Text2.Text & """ where CodCalle=" &
Text1.Text
- donde Descalle es el campo de texto

Lo que hago en la sentencia es reemplazar la comilla simple por dos comillas
dobles
de esta manera soluciono el problema de la comilla simple, pero me aparece
el problema
de que me arroja error al querrer almacenar texto que incluyan comillas
dobles.

Pense en usar la funcion replace para reemplazar en la caja de texto las
comillas
dobles por dos simples de esta manera:
Text2.Text = Replace(Text2.Text, """, "''")
pero me arroja error

Quisiera saber como solucionan este probema o bien
como puedo hacer para que en un texto me reemplace las comillas dobles
por dos comillas simples

Cualquier Ayuda, será agradecida

Preguntas similare

Leer las respuestas

#1 Ivanhoe
15/07/2003 - 01:51 | Informe spam
Quisiera ayuda para solucionar el problema del apóstrofe en sentencia SQL.
Como necesito que en el campo texto se almacene tanto las Comillas


dobles(")
como la comilla simple o apostrofe (')



"Update TablaCalle set Descalle=" & Chr$(34) & Text2.Text & Chr$(34) & "
where CodCalle=" & Text1.Text

reemplaza 34,...
Respuesta Responder a este mensaje
#2 Leonardo Azpurua
15/07/2003 - 03:46 | Informe spam
"Claudio" escribió en el mensaje
news:
Hola a todos:

Quisiera ayuda para solucionar el problema del apóstrofe en sentencia SQL.
Como necesito que en el campo texto se almacene tanto las Comillas


dobles(")
como la
comilla simple o apostrofe (') opté por el momento trabajar así:

Update TablaCalle set Descalle=""" & Text2.Text & """ where CodCalle=" &
Text1.Text
- donde Descalle es el campo de texto

Lo que hago en la sentencia es reemplazar la comilla simple por dos


comillas
dobles
de esta manera soluciono el problema de la comilla simple, pero me aparece
el problema
de que me arroja error al querrer almacenar texto que incluyan comillas
dobles.

Pense en usar la funcion replace para reemplazar en la caja de texto las
comillas
dobles por dos simples de esta manera:
Text2.Text = Replace(Text2.Text, """, "''")
pero me arroja error

Quisiera saber como solucionan este probema o bien
como puedo hacer para que en un texto me reemplace las comillas dobles
por dos comillas simples



Hola, Claudio:

Access acepta que utilizas comillas dobles o sencillas para delimitar los
valores de texto en una instrucción SQL. Pero SQL Server y la mayoría de los
otros SGBD que conozco, requieren que para delimitar los valores de texto se
utilice la comilla simple.

Tanto Access como SQL Server interpretan la secuencia de dos comillas
simples dentro de un valor de tipo texto como si se tratara de una sola
comilla (i.e. 'Mc''Donalds' producirá Mc'Donalds).

En algun momento reemplacé las comillas simples por "<&SQUOT&>". Y al
extraer el contenido del campo al momento de la lectura -siempre lo hago a
través de una función que filtra los valores NULL y estandariza los
contenidos antes de pasarlos al programa- reemplazaba <&SQUOT&> por comillas
simples nuevamente. Ese método tiene la ventaja de que es absolutamente
independiente de culquier SGBD que estés utilizando. El problema comenzó a p
resentarse cuando los usuarios empezaron a manipular directamente la BD y se
encontraron con aquel montón de secuencias especiales.

Puedes utilizar una función que convierta un string al formato requerido por
la BD, por ejemplo:

Public Function String2DB(sArg as String) as String
Dim sRetVal as String
sRetVal = "'" & Replace(sArg, "'", "''") & "'"
String2DB = sArg
End Function

Y escribir, por ejemplo:

"UPDATE itemsVenta SET Descripcion = " & String2DB(txDescripcion.Text) & "
WHERE Codigo = " & String2DB(txCodigo.Text)

La ventaja de este método -utilizar funciones para formatear los elementos
que utilizas en las instrucciones SQL- es que según vaya aumentando la
cantidad de proveedores, puedes discriminar, a partir de la propiedad
Provider de la conexión, y devolver un valor aceptable para cada uno de los
diferentes SGBD con los cuales te conectes.

Salud!

Leonardo
MS MVP
Respuesta Responder a este mensaje
#3 Claudio
15/07/2003 - 15:36 | Informe spam
Hola Leonardo:

Gracias por contestar mi inquietud.
Te comento que en Access me arroja error la forma de trabajar
que me pasaste. Si bien me di cuenta que en la ultima línea de la
funcion que me pasaste quisiste poner String2DB = sRetVal

Public Function String2DB(sArg as String) as String
Dim sRetVal as String
sRetVal = "'" & Replace(sArg, "'", "''") & "'"
String2DB = sArg
End Function

Supongamos que Text2.Text = "Mc'Donnals"
en la sentencia SQL me quedaría:
Update TablaCalle set Descalle='Mc''Donnals' where CodCalle=1

y en Access esto arroja error, porque no acepta comillas simples dentro de
la cadena de texto
De todos modos lo que me pasaste me va a servir para SQL Server.

La forma que te pase de trabajar, me permite almacenar cuantas comillas
simples quiera,
pero no me deja que la cadena de texto tenga comillas.
Lo que tal vez necesite es reemplazar "comillas" por dos comillas simples

osea
Text2.Text = Biblioteca Popular "San Martin"
por
Text2.Text = Biblioteca Popular ''San Martin''


voy a ver como lo continuo
de todos modos muchas gracias

saludos
Claudio

"Leonardo Azpurua" <l a z p u r u a g (arroba) c a n t v (punto) n e t>
escribió en el mensaje news:

"Claudio" escribió en el mensaje
news:
> Hola a todos:
>
> Quisiera ayuda para solucionar el problema del apóstrofe en sentencia


SQL.
> Como necesito que en el campo texto se almacene tanto las Comillas
dobles(")
> como la
> comilla simple o apostrofe (') opté por el momento trabajar así:
>
> Update TablaCalle set Descalle=""" & Text2.Text & """ where CodCalle=" &
> Text1.Text
> - donde Descalle es el campo de texto
>
> Lo que hago en la sentencia es reemplazar la comilla simple por dos
comillas
> dobles
> de esta manera soluciono el problema de la comilla simple, pero me


aparece
> el problema
> de que me arroja error al querrer almacenar texto que incluyan comillas
> dobles.
>
> Pense en usar la funcion replace para reemplazar en la caja de texto las
> comillas
> dobles por dos simples de esta manera:
> Text2.Text = Replace(Text2.Text, """, "''")
> pero me arroja error
>
> Quisiera saber como solucionan este probema o bien
> como puedo hacer para que en un texto me reemplace las comillas dobles
> por dos comillas simples

Hola, Claudio:

Access acepta que utilizas comillas dobles o sencillas para delimitar los
valores de texto en una instrucción SQL. Pero SQL Server y la mayoría de


los
otros SGBD que conozco, requieren que para delimitar los valores de texto


se
utilice la comilla simple.

Tanto Access como SQL Server interpretan la secuencia de dos comillas
simples dentro de un valor de tipo texto como si se tratara de una sola
comilla (i.e. 'Mc''Donalds' producirá Mc'Donalds).

En algun momento reemplacé las comillas simples por "<&SQUOT&>". Y al
extraer el contenido del campo al momento de la lectura -siempre lo hago a
través de una función que filtra los valores NULL y estandariza los
contenidos antes de pasarlos al programa- reemplazaba <&SQUOT&> por


comillas
simples nuevamente. Ese método tiene la ventaja de que es absolutamente
independiente de culquier SGBD que estés utilizando. El problema comenzó a


p
resentarse cuando los usuarios empezaron a manipular directamente la BD y


se
encontraron con aquel montón de secuencias especiales.

Puedes utilizar una función que convierta un string al formato requerido


por
la BD, por ejemplo:

Public Function String2DB(sArg as String) as String
Dim sRetVal as String
sRetVal = "'" & Replace(sArg, "'", "''") & "'"
String2DB = sArg
End Function

Y escribir, por ejemplo:

"UPDATE itemsVenta SET Descripcion = " & String2DB(txDescripcion.Text) & "
WHERE Codigo = " & String2DB(txCodigo.Text)

La ventaja de este método -utilizar funciones para formatear los elementos
que utilizas en las instrucciones SQL- es que según vaya aumentando la
cantidad de proveedores, puedes discriminar, a partir de la propiedad
Provider de la conexión, y devolver un valor aceptable para cada uno de


los
diferentes SGBD con los cuales te conectes.

Salud!

Leonardo
MS MVP


Respuesta Responder a este mensaje
#4 Claudio
15/07/2003 - 15:47 | Informe spam
Hola Ivanhoe:

Creo que me hice un merengue con tantas comillas.
La forma que me pasaste como también la que estoy utilizando, que
aparece en el primer mensaje permite almacenar comillas simples.

Lo que necesito ademas es que la cadena me pueda almacenar comillas("")
osea
Text2.Text = Biblioteca Popular "San Martin" (error - no acepta comillas)
por
Text2.Text = Biblioteca Popular ''San Martin'' (ok, pero debería reemplazar
comillas por dos comillas simples)

por lo que mi sentencia SQL necesitaria poder tolerar no solo las comillas
simples como vos bien me indicaste
sino tambien las comillas

Si tenes alguna nueva idea te lo agradecería

Muchas Gracias
saludos
claudio



"Ivanhoe" escribió en el mensaje
news:#
> Quisiera ayuda para solucionar el problema del apóstrofe en sentencia


SQL.
> Como necesito que en el campo texto se almacene tanto las Comillas
dobles(")
> como la comilla simple o apostrofe (')

"Update TablaCalle set Descalle=" & Chr$(34) & Text2.Text & Chr$(34) & "
where CodCalle=" & Text1.Text

reemplaza 34,...



Respuesta Responder a este mensaje
#5 Leonardo Azpurua
15/07/2003 - 16:38 | Informe spam
Hola, Claudio:

Es extraño lo que me cuentas. Acabo de escribir en la ventana de ejecución
inmediata esto (usando DAO 3.6 contra Access 2K):

dbHandle.Execute "UPDATE itemsInventario SET Descripcion = 'Zapatos Modelo
Mc''Donalds talla 10' WHERE Codigo = '240124'"

Y no tuve ningún problema.

Escribiéndote, pensé que a lo mejor el problema tenía que ver con usar DAO
en vez de ADO, de manera que lo probé contra una conexión ADO 2.5 (siempre
contra Acc2K) y tambien funcionó.

Salud!

Leonardo
MS MVP


"Claudio" escribió en el mensaje
news:#
Hola Leonardo:

Gracias por contestar mi inquietud.
Te comento que en Access me arroja error la forma de trabajar
que me pasaste. Si bien me di cuenta que en la ultima línea de la
funcion que me pasaste quisiste poner String2DB = sRetVal

Public Function String2DB(sArg as String) as String
Dim sRetVal as String
sRetVal = "'" & Replace(sArg, "'", "''") & "'"
String2DB = sArg
End Function

Supongamos que Text2.Text = "Mc'Donnals"
en la sentencia SQL me quedaría:
Update TablaCalle set Descalle='Mc''Donnals' where CodCalle=1

y en Access esto arroja error, porque no acepta comillas simples dentro de
la cadena de texto
De todos modos lo que me pasaste me va a servir para SQL Server.

La forma que te pase de trabajar, me permite almacenar cuantas comillas
simples quiera,
pero no me deja que la cadena de texto tenga comillas.
Lo que tal vez necesite es reemplazar "comillas" por dos comillas simples

osea
Text2.Text = Biblioteca Popular "San Martin"
por
Text2.Text = Biblioteca Popular ''San Martin''


voy a ver como lo continuo
de todos modos muchas gracias

saludos
Claudio

"Leonardo Azpurua" <l a z p u r u a g (arroba) c a n t v (punto) n e t>
escribió en el mensaje news:
>
> "Claudio" escribió en el mensaje
> news:
> > Hola a todos:
> >
> > Quisiera ayuda para solucionar el problema del apóstrofe en sentencia
SQL.
> > Como necesito que en el campo texto se almacene tanto las Comillas
> dobles(")
> > como la
> > comilla simple o apostrofe (') opté por el momento trabajar así:
> >
> > Update TablaCalle set Descalle=""" & Text2.Text & """ where CodCalle="


&
> > Text1.Text
> > - donde Descalle es el campo de texto
> >
> > Lo que hago en la sentencia es reemplazar la comilla simple por dos
> comillas
> > dobles
> > de esta manera soluciono el problema de la comilla simple, pero me
aparece
> > el problema
> > de que me arroja error al querrer almacenar texto que incluyan


comillas
> > dobles.
> >
> > Pense en usar la funcion replace para reemplazar en la caja de texto


las
> > comillas
> > dobles por dos simples de esta manera:
> > Text2.Text = Replace(Text2.Text, """, "''")
> > pero me arroja error
> >
> > Quisiera saber como solucionan este probema o bien
> > como puedo hacer para que en un texto me reemplace las comillas dobles
> > por dos comillas simples
>
> Hola, Claudio:
>
> Access acepta que utilizas comillas dobles o sencillas para delimitar


los
> valores de texto en una instrucción SQL. Pero SQL Server y la mayoría de
los
> otros SGBD que conozco, requieren que para delimitar los valores de


texto
se
> utilice la comilla simple.
>
> Tanto Access como SQL Server interpretan la secuencia de dos comillas
> simples dentro de un valor de tipo texto como si se tratara de una sola
> comilla (i.e. 'Mc''Donalds' producirá Mc'Donalds).
>
> En algun momento reemplacé las comillas simples por "<&SQUOT&>". Y al
> extraer el contenido del campo al momento de la lectura -siempre lo hago


a
> través de una función que filtra los valores NULL y estandariza los
> contenidos antes de pasarlos al programa- reemplazaba <&SQUOT&> por
comillas
> simples nuevamente. Ese método tiene la ventaja de que es absolutamente
> independiente de culquier SGBD que estés utilizando. El problema comenzó


a
p
> resentarse cuando los usuarios empezaron a manipular directamente la BD


y
se
> encontraron con aquel montón de secuencias especiales.
>
> Puedes utilizar una función que convierta un string al formato requerido
por
> la BD, por ejemplo:
>
> Public Function String2DB(sArg as String) as String
> Dim sRetVal as String
> sRetVal = "'" & Replace(sArg, "'", "''") & "'"
> String2DB = sArg
> End Function
>
> Y escribir, por ejemplo:
>
> "UPDATE itemsVenta SET Descripcion = " & String2DB(txDescripcion.Text) &


"
> WHERE Codigo = " & String2DB(txCodigo.Text)
>
> La ventaja de este método -utilizar funciones para formatear los


elementos
> que utilizas en las instrucciones SQL- es que según vaya aumentando la
> cantidad de proveedores, puedes discriminar, a partir de la propiedad
> Provider de la conexión, y devolver un valor aceptable para cada uno de
los
> diferentes SGBD con los cuales te conectes.
>
> Salud!
>
> Leonardo
> MS MVP
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida