Problema con VB6 contra Access2000 y LIKE

Estoy haciendo una aplicación en Visual Basic 6 que ataca a una BD en Access 2000.
Las conexiones a la Base de Datos las hago de la siguiente manera:
Dim bd As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strSelect as String
StrSelect = ?Select * from cliente?
bd.Provider = "Microsoft.Jet.OLEDB.4.0"
bd.Open RutaBD
rs.Open strSelect, bd, adOpenForwardOnly, adLockOptimistic
If rs.BOF and rs.EOF Then
<sentencias>
Else
<sentencias>
End If
rs.Close
Set rs = Nothing
bd.Close
Set bd = Nothing
Pero tengo un problema con las Select que contienen comparaciones con el operador Like. Me explico:
Cliente
Código Nombre
1 Marc
2 Mark
Si hago Select * from cliente where cliente.nombre like ?Marc? Funciona.
Pero si hago Select * from cliente where cliente.nombre like ?M*? No funciona.
Ni tampoco Select * from cliente where cliente.nombre like ?Mar??.
Por otro lado si hago la consulta con el Asistente de Access, el resultado es correcto. Pero si copio la línea SQL que crea éste al VB sigue sin funcionar. ¿Por eso mi problema creo que esta solo en el uso de los comodines *?.
No es problema ortográfico ya que substituyo comillas por chr(34) y el * por chr(42) y compruebo la sentencia strSelect con un MsgBox antes de abrir el recordset y esta bien escrita.
¿Me puedes ayudar? Yo no le veo solución.
Respuesta
1
No me queda claro que te funcione ninguno de los casos que me comentas. Lo digo por que el operador like espera una cadena, y las cadenas se delimitan con comillas simples en SQL. La sintaxis correcta y el resultado esperado es el siguiente:
Select * From cliente Where cliente.nombre like 'Marc'
<-- Te devolverá la primera fila de la tabla.
Select * From cliente Where cliente.nombre like 'M*'
<-- Te devolverá las dos filas.
Select * From cliente Where cliente.nombre like 'Mar?'
<-- Te devolverá las dos filas.
Recordarte además, que * reemplaza a cualquier cadena, incluso de longitud 0, ¿pero? Reemplaza a un carácter, es decir:
Select * From cliente Where cliente.nombre like 'M*ar?'
<-- Te devolverá las dos filas.
Select * From cliente Where cliente.nombre like 'M?ar?'
<-- No devolverá ninguna fila.
En caso de duda, pregúntame de nuevo.
He pedido una aclaración y no sé si te ha llegado bien.
De todas formas finalizo ésta pregunta, y aprovecho para agradecerte el esfuerzo hasta ahora.
Marc.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas