SoloCodigo
Programación General => Visual Basic 6.0 e inferiores => Mensaje iniciado por: MindEye en Jueves 15 de Septiembre de 2005, 00:41
-
- Hola compys.
- Vereis, mi problema es que cuando hago la siguiente consulta:
SQL = "select * from `almace` where `nomproduto`='" & "Semilla's" & "';"
- No me deja realizarla, me da un error.
- Como lo puedo sorbentar...
- Gracias.
-
<!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>SQL </td></tr><tr><td id='CODE'><!--sql1-->SQL = "[color=blue;font-weight]Select * From almacen"[/color] <!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->
<!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>SQL </td></tr><tr><td id='CODE'><!--sql1-->SQL = SQL & " Where nomproducto = " & 'Aquí va el valor de la comparación <!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->
-
- El problema esta en que el valor a comparar, es de tipo VARHCAR, y cuando le paso el valor, ( que yo sepa ) para comparar, se lo tengo que pasar entre comillas simples.
- Pero el problema me surje cuando el valor para comparar, contiene una comilla simple, osea
SQL = "select * from `tabla` where `nombre`=' " & "Julian" & " ';"
Con esta no hay problem
SQL = "select * from `tabla` where `nombre`=' " & "Julian's" & " ';"
Esta es la que me da problemas.
No me deja ejecutar la consulta. Me da un error.
- Que puedo hacer....
- Y gracias por la ayuda.
-
Lo que pasa es que en ese momento cierras la primera comilla que abristes, lo que podrias hacer ahi, seria utilizar una variable que contenga el valor de la comilla simple, eso pienso yo, ahi si no sabo.
's(Aqui estarias cerrando)" & " ';"(Aqui la volverias a abrir)
-
Hola Mindeye!
No tengo la solución, pero si tengo comentarios.
Hace ya un tiempo tuve el mismo problema. El problema, como bien lo sospechas, es la comilla que está en la cadena a comparar.
Simplemente no pude. Me cansé de buscar en foros (éste y otros); si bien encontré discusiones referidas al problema, nunca se mencionó una solución real. Sólo proposiciones tentativas que terminaban en nada.
No quisiera decir esto, pero mi recomendación es que busques la forma de no incluir estas comillas en los campos de las tablas, pues son un problema. Al final, me convencí (si estoy equivocado, por favor que alguien lo diga ya). Como te decía, me convencí de que es un problema sin solución, y no importa el truco que tratemos de usar, siempre vence.
A la espera de algún iluminado con la solución, les saludo con la esperanza no del todo muerta.
:(
-
En SQL de Access hay dos formas de encontrar una comilla simple.
Para encontrar Julian's se usa 'Julian''s'
Comilla simple, Julian, comilla simple, comilla simple, s, comilla simple
La otra opción es: 'Julian[']s'
:)
También descubrí una rutina para que se basa en este principio para buscar palabras semejantes o que pudieran estar mal escritas con o sin acento por ejemplo:
El usuario busca 'cancion' pero en la base de datos existe 'canción' o al revés, el usuario busca canción y en la base de datos existe CANCION sin acento. Si les interesa la publico.
:comp:
-
Si usas SQL Server esta solucionado, pues es mejor utilizar un procedimiento almacenado con un parametro de tipo cadena y desde VB lo llamas pasandole el parametro
por ejemplo:
El Porcedimiento almacenado seria mas o menos asi:
------------------------------------------------------------
CREATE PROCEDURE pruebita
@nombre varchar(20)
AS
SELECT * FROM Tabla WHERE nombre = @nombre
GO
-----------------------------------
para llamarlo desde VB seria:
-----------------------------------
Dim cnx As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim prm As New ADODB.Parameter
Dim rst As New ADODB.Recordset
cnx.Open "Provider=SQLOLEDB.1; etc."
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "pruebita"
Set prm = cmd.CreateParameter("nom", adVarChar, adParamInput, 20)
prm.Value = "Julian's" <----aki como veras no hay problema
cmd.Parameters.Append prm
cmd.ActiveConnection = cnx
Set rst = cmd.Execute <----aki te devuelve el recordset
El chiste es utilizar un parametro para no estar concatenando con el apostrofe (') ke es donde esta el problema.
Claro esto es con SQL Server, es la ventaja de utilizar un SGBD en regla y no el motor MS JET (access).
Saludos. :hola:
-
En resumen, dos soluciones:
* Usas store procedures si tu DB te lo permite
* para contener en la consulta la comilla simple escribes o haces que la comilla se repita.
Ej
'Julian''s'
Salu2
:comp:
-
Todos los días se aprende algo nuevo!
Gracias, también lo probaré.
:kicking:
-
- Gracias copmys.
- Yo trabajo con MySQL.
- Lo del las dos comillas, me funciona. me quedo con este.
- Super gracias.