Comunidad Gambas-es
[SOLUCIONADO] Me surge un problema con una cadena a contra pie - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forumdisplay.php?fid=3)
+--- Foro: General (https://gambas-es.org/forumdisplay.php?fid=4)
+--- Tema: [SOLUCIONADO] Me surge un problema con una cadena a contra pie (/showthread.php?tid=580)



Me surge un problema con una cadena a contra pie - gambafeliz - 07-09-2021

Hola

Me surge un problema que me pilla a contra pie, y vamos que no voy a marcar el Gol Smile

Tengo una TextBox que voy metiendo texto y que lo voy contrastando con el evento KeyRelease() contra mi base de datos, el problema es antiguo y ya debería tener incluso solución pero estaba en Visual Basic y en Gambas pues no se me ocurre la solución aunque sea la misma. Pues el problema es que tengo un texto tal como Tejare's y que cuando buscon en mi consulta pongo algo como Descripcion = 'Tejare'%' y se ode todo ya que debería ser 'Tejare"'"%' pero lo peor es que como uso la caja texto TextBox para todo con respecto a la base de datos pues me va a petar todas las sentencias SQL sean Select, Insert, Update etc ya que le paso el TextBox. Hasta ahora no pasaba nada hasta que me he encontrado el apostrofe.

Que solución me dais teniendo en cuenta mi caso tan particular.

Gracias.

=== Solucionado ========================

La solución es concatenar con la palabra a buscar en la consulta esta cadena "'", si se detecta que el usuario escribe un (apostrofe ') en el TextBox, pero sinceramente aunque esta es la solución, he decidido, ya que es para mi programa personal, no admitir en mi base de datos apostrofes ya que me obliga a detectar y automatizar este caso en todas mis consultas presentes y futuras. Esto estará así hasta que vea algo más global y menos costoso para mi desarrollo.


RE: Me surge un problema con una cadena a contra pie - Shordi - 07-09-2021

Pues así, sin código, como siempre, sólo te puedo decir:

Pre-procesa lo que le mandas a la BD. No lo mandes tal cual. un

GAMBAS
  1. s=Replace(textbox1.text,"'","\"'\"")
  2. miresult=miconexion.exec(s)



antes de mandarlo debería solucionar el problema.

Saludos


RE: Me surge un problema con una cadena a contra pie - gambafeliz - 07-09-2021

Es así como me dices lo se, pero no consigo aislarlo. Como me cuentas me sale así:

WHERE Descripciones.Nombre LIKE 'a'%'

Y en la consola de Gambas dice esto: a"'"

En el debug al tracearlo dice: "a\"'\""

Alguna pista mas, gracias


RE: Me surge un problema con una cadena a contra pie - Shordi - 07-09-2021

Sin ver código no digo na... Big Grin Big Grin Big Grin Cool


RE: Me surge un problema con una cadena a contra pie - gambafeliz - 07-09-2021

Gracias Shordi y perdona era mucho lío presentar el código te lo aseguro. Y por otra parte te comprendo y te lo agradezco para mi simplemente tu interés para ayudarme es lo que más valoro.

Gracias de verdad.

Nota: Lo he resuelto y funciona pero es algo que no voy a permitir que se produzca en ninguna caja de entrada. El usuario en vez de escribir Tejare's tendrá que poner Tejares y punto pelotillas.


RE: Me surge un problema con una cadena a contra pie - calcena - 08-09-2021

Buenas si lo que quieres incluir en una query es ' solo tienes, para sqlite que incluir tres apostrofes seguidas, esto te hará un insert/update incluyedo la ' simple en la palabra.

GAMBAS
  1. Replace(textbox.Text, "'", "'''")



Ale a rodar!!


RE: Me surge un problema con una cadena a contra pie - jguardon - 08-09-2021

Siempre recomiendo el uso de la función Subst(). La hay estática para cualquier uso sin BD y el objeto Connection tiene su propio método Subst, para sustituir variables dentro de cadenas SQL sin tener que preocuparnos de las comillas, apóstrofes y sucias concatenaciones.

Para cadenas: https://gambaswiki.org/wiki/lang/subst
 
Para BD: http://gambaswiki.org/wiki/comp/gb.db/_connection/subst

La ventaja de usar Subst es que automáticamente escapa los caracteres especiales según sea necesario, así que le podemos pasar directamente el contenido de un textbox en uno de los parámetros y sustituirlo en la cadena sql por su comodín correspondiente: es decir, que al primer carácter de sustitución &1 le corresponde el valor del primer parámetro, a &2 el segundo y así sucesivamente. Sencillo y limpio.

También podemos usar SQLRequest, que abstrae las consultas sencillas de cualquier motor de bases de datos:

http://gambaswiki.org/wiki/comp/gb.db/sqlrequest

Saludos


RE: Me surge un problema con una cadena a contra pie - gambafeliz - 08-09-2021

Primero lo primero, un Hola calcena efusivo, espero que estés bien.

Supongo que lo que me propones funciona pero en mi caso particular ya lo he resuelto, pero me temo que aunque me gustaría poner en la base de datos el apostrofé va hacer imposible por el momento, ya que supone que tengo que revisar absolutamente todo mi código para recibir este dato desde la base de datos y volver a insertar, actualizar otra vez a la base de datos y por el momento me supongo que será un lío pa mi (fijate pa mi ni mas ni menos) Smile

Hola, jguardon desde luego en este foro sois en general la pera limonera. Tu amplia explicación me ha gustado pero si has leido lo que he contestado a calcenas pues mas o menos es igual.

A no ser que alguien me diga que estoy equivocado.

1º tengo que resolver o unificar las consultas SQL para detectar en un mismo lugar cosas como los apostrofes y de momento se me ha hecho la mente un lío y lo voy a posponer, no sabia que mi código por un simple apostrofé ha hecho que mi código se caiga como un castillo de naipes.

Gracias y jguardon que peazo de foro y miembros tenemos.