• Jueves 9 de Mayo de 2024, 20:14

Autor Tema:  Re: Para quienes dominan SQL  (Leído 2682 veces)

giomar

  • Miembro MUY activo
  • ***
  • Mensajes: 270
    • Ver Perfil
Re: Para quienes dominan SQL
« en: Jueves 7 de Agosto de 2003, 19:15 »
0
He notado un problema al trabajar con SQL, por ejemplo he echo una aplicacion donde realizo una busqueda incremental de datos a una tabla algo sencillo si pero la dificultad que encuentro es al colocar en mi TextBox un apostrofe ( ' ).
Lo que veo que pasa es de que como VB concatena sus variables asi '" & objeto & "' de alguna manera lo confunde, bueno no se con exactitud.
Si alguien sabe como puedo solucionar esto por favor haganmelo conocer.
Ademas voy a dejar la aplicacion con el problema.
Saudos y de antemano GRACIAS.
Giomar...
Giomar B.
Desarrollador Web Profesional


JackRandall

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Para quienes dominan SQL
« Respuesta #1 en: Domingo 10 de Agosto de 2003, 00:25 »
0
lomejor seria ke el apostrofe lo metas directamente en la instruccion y contatenes tu mismo ejemplo:

sql = "INSERT INTO tabla (nombre, telefono) VALUES('" & text1.text & "', '" & text2.text & "')"

y listo

giomar

  • Miembro MUY activo
  • ***
  • Mensajes: 270
    • Ver Perfil
Re: Para quienes dominan SQL
« Respuesta #2 en: Martes 19 de Agosto de 2003, 20:29 »
0
Disculpame pero no llego a entenderte lo que me quieres decir.
En el comentario que me das no veo una solucion para lo he indicado.
Si tienes otra idea o puede aclararme mejor la idea que ya me escribistes te lo agradeceria mucho.
Un saludo y nuevamente gracias por tu tiempo
Giomar B.
Desarrollador Web Profesional


Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Para quienes dominan SQL
« Respuesta #3 en: Miércoles 20 de Agosto de 2003, 09:09 »
0
Cuando concatenes o montes la sentencia SQL , puedes hacer lo siguiente:

Replace(Text1.Text, Chr(29), Chr(180))

Que es ni más ni menos que sustituir el carácter ' (Chr(29)) por ´ (Chr(180)). Luego, a la hora de presentar el campo si te importa el que el carácter esté cambiado, haz el proceso contrario:

Text1.Text = Replace(Recordset1.Fields(0).Valur, Chr(180), Chr(29))

Otra cosa que podrías hacer es en el evento 'KeyPress' del TextBox, cambiar la pulsación de ' por ´ o otro carácter que tu vieras:

If KeyAscii = 29 Then KeyAscii = 180

Espero que esto te sirva de ayuda.
Suerte.

giomar

  • Miembro MUY activo
  • ***
  • Mensajes: 270
    • Ver Perfil
Re: Para quienes dominan SQL
« Respuesta #4 en: Miércoles 20 de Agosto de 2003, 21:29 »
0
Agrege a mi proyecto el codigo que me indicas pero no obtuvo frutos.
Aqui te dejo el codigo para que lo puedas revisar y poder detectar el error.
Dim rsbusca As New ADODB.Recordset
Dim sql As String

Private Sub Form_Load()
Set rsbusca = New ADODB.Recordset
rsbusca.CursorLocation = adUseClient
sql = "select * from productos order by nombreproducto "
rsbusca.Open sql, cn, adOpenDynamic, adLockReadOnly
lista.ListField = "nombreproducto"
Set lista.RowSource = rsbusca
lista.Refresh
Text1.Text = Empty
End Sub

Private Sub Text1_Change()
If Len(Trim(Text1.Text)) > 0 Then
    rsbusca.Close
    rsbusca.Source = "select p.idproducto, p.nombreproducto, p.idcategoría, p.cantidadporunidad, p.preciounidad, c.NombreCategoría  from productos p, categorías c where p.idcategoría=c.idcategoría and nombreproducto like '" & Text1.Text & "%'  order by nombreproducto"
    rsbusca.Open
    If rsbusca.RecordCount = 0 Then
        MsgBox "El Producto no Existe", vbCritical, "AVISO"
        Text1.SetFocus
        Set lista.RowSource = Nothing
    Else
        Set lista.RowSource = rsbusca
        lista.Refresh
    End If
Else
        rsbusca.Close
        rsbusca.Source = "select p.idproducto, p.nombreproducto, p.idcategoría, p.cantidadporunidad, p.preciounidad, c.NombreCategoría  from productos p, categorías c where p.idcategoría=c.idcategoría order by nombreproducto"
        rsbusca.Open
        Set lista.RowSource = rsbusca
        lista.Refresh
End If

End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
Text1.Text = Replace(Text1.Text, Chr(180), Chr(29))
'Ha tambien probe con el IF y salia el mismo mensaje de error.
End Sub


Un saludo..
Giomar B.
Desarrollador Web Profesional


roy

  • Miembro activo
  • **
  • Mensajes: 46
    • Ver Perfil
Re: Para quienes dominan SQL
« Respuesta #5 en: Miércoles 20 de Agosto de 2003, 22:19 »
0
hola pues yo no le veo error a tu consulta, pero mis consultas las hago de esta manera, y realmente no cambian mucho de lo que tu muestras

if rstdatos.state then rstdatos.close
rstdatos.open source:="select * from claves where clave>10 and descripcion like '" & txtdescrip.text & "%' order by clave",activeconnection:=cnnpredial

solo mi pregunta y tu conexion?

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Para quienes dominan SQL
« Respuesta #6 en: Jueves 21 de Agosto de 2003, 08:24 »
0
Donde dice:

rsbusca.Source = "select p.idproducto, p.nombreproducto, p.idcategoría, p.cantidadporunidad, p.preciounidad, c.NombreCategoría from productos p, categorías c where p.idcategoría=c.idcategoría and nombreproducto like '" & Text1.Text & "%' order by nombreproducto"

Debería decir:

rsbusca.Source = "select p.idproducto, p.nombreproducto, p.idcategoría, p.cantidadporunidad, p.preciounidad, c.NombreCategoría from productos p, categorías c where p.idcategoría=c.idcategoría and nombreproducto like '" & Replace(Text1.Text, Chr(29), Chr(180)) & "%' order by nombreproducto"

Por otro lado si metes este código en el evento Change del TextBox, cada vez que el usuario pulse una tecla y se modifique el contenido del textbox, se desencadenará el evento y la consiguiente consulta, cosa que no creo que te interese.
Puedes programar el evento Validate (ojo con la propiedad CauseValidation del resto de los controles) o puedes utilizar el evento LostFocus o puedes añadir un CommandButton o algo así para ejecutar la consulta.

A ver si esto te sirve. Suerte.

giomar

  • Miembro MUY activo
  • ***
  • Mensajes: 270
    • Ver Perfil
Re: Para quienes dominan SQL
« Respuesta #7 en: Jueves 21 de Agosto de 2003, 19:40 »
0
La idea del programa es que segun se vayan ingresando datos al text en la lista se vean todos los elementos que comienzan con esos dichos, lo que comunmente se le llama Busqueda Incremental de Datos, por eso es que lo programo asi.
Ahora probe el codigo y en realidad ya no se produce el error pero existen dos detalles:
1. Que embes de Chr(29) es Chr(39) cuando lo hago con Chr(29) no pasa nada en cambio con Chr(39) resulta.
2. Que pasa si en mi base de datos necesite hacer una busqueda incremental por proveedores y un proveedor tenga el nombre de "Empresa Ronal's" haciendo el programa como me han ayudado solo podria escribir hasta "Empresa Ronal" pues al colocar ese vendito caracter (') saldria el mensaje de error "el proveedor no existe" mi pregunta es esta
Estaria bien eso?
y que tal si en la tabla eisten los siguientes registros:
Ab'aaaaaa
Ab'bbbbbb
Ab'cccccccc
Ab'dddddd
Osea a lo que voy es de que el programa puede hacer una correcta busqueda incremental de datos pero no puede ser capaz de listarme un solo producto o lo que sea al colocar ese vendito caracter(').
Un saludo...
Y Gracias por su tiempo..
<<_GIOMAR_>>
Giomar B.
Desarrollador Web Profesional


J.M.Movilla

  • Miembro MUY activo
  • ***
  • Mensajes: 427
    • Ver Perfil
Re: Para quienes dominan SQL
« Respuesta #8 en: Jueves 21 de Agosto de 2003, 20:36 »
0
A ver, Giomar:  Hace meses surgió este mismo tema y quedó resuelto...

Cuestiona si existe el carácter ' en el campo que va a formar parte de la consulta, por ejemplo:

n = InStr( Campo, "'")  '  Comilla simple entre dos comillas dobles

if n > "0" Then
   Campo = Left( Campo, n) & "'"  & Mid( Campo, n+1)
end if

Con ello hemos sustituído una comilla simple por dos comillas simples seguidas...  que surte el mismo efecto que cuando se usan dos comillas dobles seguidas para insertar comillas en una variable entrecomillada...  Jo... qué difícil es de explicar una cosa tan "simple"...

Verás cómo te funciona...  Lo cual me producirá una gran satisfacción...  Un saludo.

giomar

  • Miembro MUY activo
  • ***
  • Mensajes: 270
    • Ver Perfil
Para quienes dominan SQL
« Respuesta #9 en: Viernes 22 de Agosto de 2003, 17:32 »
0
Con el codigo del amigo J.M.Movilla obtuve el resultado que desea.
Lo adicione en mi aplicacion y resulta a la perfeccion.
Con esto doy por concluido el caso de este vendito caracter(') que ya me tenia loco..
Claro sin antes agradecer a todos los que pusieron de su parte para ayudarme a resolverlo.
Un saludo compañeros...
Hasta la proxima...
<<_GIOMAR_>>:beer::jumpie:
Giomar B.
Desarrollador Web Profesional