Duda - Visual Basic - Access

Alien_crrpt

Gracias, pero ya he localizado el fallo. xD era entre [ ]
Buenas.
Tengo una base de datos que tiene el nombre del campo con espacios, por ejemplo Apellido 1 y Apellido 2.

Cuando en un formulario de Access pulso el botón buscar tiene que generar una consulta SQL. Pero cuando quiero indicar los campos con espacios me da error, he probado varias cosas, pero me sigue dando error.

A ver si alguien de aquí sabe solucionarlo. He probado entre comillas simples pero nada.

Private Sub btnBuscar_Click()
Dim Consulta As String
    
Consulta = "SELECT Tomadores.IdTomador, Tomadores.Nombre, 'Tomadores.Apellido 1', 'Tomadores.Apellido 2', Tomadores.DNI " Consulta = Consulta & "FROM Tomadores " Consulta = Consulta & "WHERE Tomadores.IdTomador Like '*" & Me.txtBusqueda & "*' OR Tomadores.Nombre Like '*" & Me.txtBusqueda & "*' OR Tomadores.Apellido 1 Like '*" & Me.txtBusqueda & "*' OR Tomadores.Apellido 2 Like '*" & Me.txtBusqueda & "*' OR Tomadores.DNI Like '*" & Me.txtBusqueda & "*'" MsgBox (Consulta) Me.Lista.RowSource = Consulta End Sub
Vedrfolnir

Tiene que ir entre [ ]
De nada.

1
PaCoX

el sql injection es tan obvio que duele :(

1 respuesta
Alien_crrpt

#3 Pues ahora me pasa algo parecido con los espacios, pero no funciona él [ ]. El problema es cuando de un cuadro combinado recojo el nombre de los campos de la tabla y ese campo tiene espacios. Si no tiene espacios, el campo no hay problema como por ejemplo Nombre.

Solucionado, si era con [ ]

"WHERE [" & Me.cuadroCombinadoSeleccionCampo & "] Like '" & Me.TextoBusqueda & "'"

Private Sub BotonBusqueda_Click()
    Dim Consulta As String
    Dim SQL As String
    
If IsNull(Me.cuadroCombinadoSeleccionCampo) Then MsgBox "Seleccione un campo", vbExclamation, "Aviso" Me.txtBusqueda = Null Me.cuadroCombinadoSeleccionCampo.SetFocus ElseIf IsNull(Me.TextoBusqueda) Then MsgBox "Escriba la busqueda", vbExclamation, "Aviso" Me.TextoBusqueda.SetFocus Else Consulta = "SELECT Tomadores.IdTomador, Tomadores.Nombre, Tomadores.[Apellido 1], Tomadores.[Apellido 2], Tomadores.DNI " Consulta = Consulta & "FROM Tomadores" Consulta = Consulta & " WHERE " & Me.cuadroCombinadoSeleccionCampo & " Like '*" & Me.TextoBusqueda & "*'" Me.Lista.RowSource = Consulta SQL = "SELECT * FROM Tomadores " SQL = SQL & "WHERE " & Me.cuadroCombinadoSeleccionCampo & " Like '*" & Me.TextoBusqueda & "*'" Me.Subformulario_Tomadores1.Form.RecordSource = SQL End If End Sub
Alien_crrpt

Más dudas, no sé lo que hace realmente. O si lo sé y no lo entiendo del todo.
Encontré ese código que lo que hace es separar los campos vacíos o nulos de los que no están nulos.
Por ejemplo, si los asegurados tienen una fecha de avisos, aparecerán arriba y los que no tengan fecha de asegurados aparecerán abajo.

ORDER BY IIf(IsNull(Asegurados.[Fecha Avisos])=False,0,1);

No entiendo, que hace exactamente esta función para que separe los nulos de los no nulos. Si solo le pasa un 0 o 1 al ORDER BY. A menos que el ORDER BY al recibir un 0, pone los nulos abajo y al recibir un 1 pone los nulos arriba.

Bueno, toqueteando, he seguido mejorando el código.
Y ahora he conseguido que los que tengan fecha de aviso y la fecha actual no supere la fecha del campo [Fecha Avisos] se muestren arriba, luego se muestren los nulos y por último los que la fecha actual ha superado a los registros con una fecha de avisos posterior.

ORDER BY IIf(IsNull(Asegurados.[Fecha Avisos])=False,IIf(Asegurados.[Fecha Avisos]>=Date(),0,1),1)

Creo que está bien.

Usuarios habituales

  • Alien_crrpt
  • PaCoX
  • Vedrfolnir