Guardar bloques de código en variables

Es una pregunta para Sveinbjorn El Rojo

Hola

Para hacer búsquedas en varios campos a la vez tengo un recordsource con muchas líneas que me dan problemas.

Tengo un recordsource del tipo:

Recordsource ="select * from TLibros where libros like '" & Buscar & "' " & _
"OR libros LIKE '* " & Me.txt_Buscar & " *' " & _
"OR libros LIKE '" & Me.txt_Buscar & "[,.;:]*' " & _
"OR libros LIKE '* " & Me.txt_Buscar & "[,.;:]*'"

En realidad el recordsource sigue con más campos y más "or para buscar en ellos, no solo en libros sino en más. Y claro al final tengo muchas continuaciones de línea y me dice el sistema que son demasiadas.

He leído que podría crear bloques de código más cortos y guardarlos en variables. Después se anexan las variables para guardar el código final.

Para hacer las variables he puesto esto:

LIBROS = "select * from TLibros WHERE libros LIKE '" & Me.Buscar & "' " & _
"OR libros LIKE '* " & Me.Buscar & " *' " & _
"OR libros LIKE '" & Me.Buscar & "[,.;:]' " & _
"OR libros LIKE '* " & Me.Buscar & "[,.;:]*'"

AUTOR = "select * from TLibros WHERE autor LIKE '" & Me.Buscar & "' " & _
"OR autor LIKE '* " & Me.Buscar & " *' " & _
"OR autor LIKE '" & Me.Buscar & "[,.;:]' " & _
"OR autor LIKE '* " & Me.Buscar & "[,.;:]*'"

Luego las he anexado para formar el código final:

RecordSource = "select * from TLibros WHERE libros OR autor"

Pero me da error y no sé qué puede estar mal. ¿Las variables se ponen en el mismo evento? ¿Me falta algo de código o tal vez tengo algún fallo? Ya me dices

1 respuesta

Respuesta
1

El "Select campo from tabla" sólo debe de ir en la primera variable, o en ninguna si luego lo pones como inicio del recordsource.

Otra solución, más obvia, a tu problema es usar menos saltos de línea, por ejemplo, en vez de saltar casa OR, salta cada dos.

Hola

En realidad salto de línea cada tres "or", en cada línea pongo tres "or" para así evitar como dices tantas líneas. Aquí he puesto un "or" en cada línea solo para que fuera más fácil visualizarlo y no aburrir con un montón de código. Pero aún así como tengo muchos campos y la búsqueda es específica se generan muchas líneas... muy a mi pesar.

¿En cuanto a tu primera solución quedarían así las variables sin select campo from tabla?

LIBROS = "WHERE libros LIKE '" & Me.Buscar & "' " & _
"OR libros LIKE '* " & Me.Buscar & " *' " & _
"OR libros LIKE '" & Me.Buscar & "[,.;:]' " & _
"OR libros LIKE '* " & Me.Buscar & "[,.;:]*'"

AUTOR = "WHERE autor LIKE '" & Me.Buscar & "' " & _
"OR autor LIKE '* " & Me.Buscar & " *' " & _
"OR autor LIKE '" & Me.Buscar & "[,.;:]' " & _
"OR autor LIKE '* " & Me.Buscar & "[,.;:]*'"

¿Y el recordsource así?

RecordSource = "select * from TLibros WHERE libros OR autor"

Es que me da error... algo hago mal o me falta por poner en las variables.Muchas gracias por la ayuda

Vamos a ver, copiar y pegar códigos que encuentras por ahí no te sirve de nada si no los entiendes y puedes solucionar los errores que te van surgiendo...

Una sentencia SQL tiene esta estructura (http://www.w3schools.com/sql/sql_select.asp):

SELECT campos FROM Tabla WHERE condición ORDER BY campos 

Si en cada variable que creas le pones un WHERE => te dará error.

Si a la hora de crear el recordsource metes las variables dentro de las comillas => error

Las variables las has de encadenar igual que encadenas referencias a cuadros de texto.

Y por último, para que aprendas a depurar tus propias SQLs, usa Debug. Print tuSQL, donde tuSQL será la SQL que intentas escribir. (Por ejemplo, en vez de asignarla al recordsource, usa esa linea para verla). Con Ctrl+G (o por medio del menu ver) muestras la ventana de inmediato, donde verás la SQL definitiva con la que va a trabajar access y puedes comprobar si tiene o no una sintaxis correcta.

Hola Sveinbjorn

Ante todo perdona mi torpeza.He estado mirando lo que me comentas... y espero haber entendido algunas cosas, otras se me escapan, perdona...

¿las variables entonces así, en el evento al hacer click? sin el "where"

dim libros as string

dim autor as string

LIBROS = "libros LIKE '" & Me.Buscar & "' " & _
"OR libros LIKE '* " & Me.Buscar & " *' " & _
"OR libros LIKE '" & Me.Buscar & "[,.;:]' " & _
"OR libros LIKE '* " & Me.Buscar & "[,.;:]*'"

AUTOR = "autor LIKE '" & Me.Buscar & "' " & _
"OR autor LIKE '* " & Me.Buscar & " *' " & _
"OR autor LIKE '" & Me.Buscar & "[,.;:]' " & _
"OR autor LIKE '* " & Me.Buscar & "[,.;:]*'"

¿Y el recordsource así? las variables como cuadros de texto

RecordSource = "select * from TLibros where libros like '" & libros & "' " & _

OR autor like '" & autor & "'"

Espero si está mal algo que puedas indicarme el código exacto. Creo que indicándome el código al verlo entendería mejor tus explicaciones. Muchas gracias por la ayuda y tu paciencia.

Vamos a ver si consigo hacerte ver el error, en vez de darte yo la solución directamente.

Con el código que has puesto, y suponiendo que en tu campo buscar hayas escrito "juego", la SQL que creas y le asignas (con algún que otro error) al recordsource es esta:

select * from TLibros where libros like 'libros LIKE 'juego' OR libros LIKE '* juego *' OR libros LIKE ' juego[,.;:]' OR libros LIKE '* juego[,.;:]*'OR autor like 'autor LIKE 'juego' OR autor LIKE '* juego *' OR autor LIKE 'juego[,.;:]' OR autor LIKE '* juego[,.;:]*''

Lo que te marco en negrita es lo que viene de las variables LIBROS y AUTOR, y lo que te marco en cursiva, es donde tienes un error al encadenar.

Creo que en vez de...

or autor like   ...debería de ser para concantenar

and autor like

Todo lo demás estaría correcto? lo de ?

dim libros as string

dim autor as string

¿O qué otros fallos ves porque es que no funciona bien la búsqueda?

Si me he equivocado es que soy un caso perdido... je je. Bueno gracias

Creo que mejor

& autor like

pero sigue sin hacerme bien las búsquedas hay algo más en el código que esta mal... como bien dices ...

"...la SQL que creas y le asignas (con algún que otro error) al recordsource es esta: ..."

Espero puedas indicarme qué hay mal también, si es lo de dim as string u otra cosa en el recordsource a mejorar o complementar. Muchísimas gracias

Lo de usar AND u OR para encadenar la búsqueda de por libro con la de autor, tu sabrás lo que quieres hacer

¿No ves ningún otro fallo en la SQL?

¿A ti te parece que esto está bien: where libros like 'libros LIKE ...?

¿y aquí que encadenas: RecordSource = "select * from TLibros where libros like '" & libros & "' " & _ OR autor like '" & autor & "'"? (que además, ya te tiene que saltar un error al escribirlo)

Hola

Bueno, la verdad es que lo de "debug.print" me ha ayudado mucho para ver la sentencia SQL y sí he detectado fallos.

Lo primero las variables, aunque no es necesario, las voy a llamar:

A y B

dim A as string

dim B as string

A = "libros LIKE '" & Me.Buscar & "' " & _
"OR libros LIKE '* " & Me.Buscar & " *' " & _
"OR libros LIKE '" & Me.Buscar & "[,.;:]' " & _
"OR libros LIKE '* " & Me.Buscar & "[,.;:]*'"

B = "autor LIKE '" & Me.Buscar & "' " & _
"OR autor LIKE '* " & Me.Buscar & " *' " & _
"OR autor LIKE '" & Me.Buscar & "[,.;:]' " & _
"OR autor LIKE '* " & Me.Buscar & "[,.;:]*'"

Y el recordsource quedaría así:

Me.recordsource = "select * from TLibros where '" & A & "' or '" & B & "'"

Esto en la ventana inmediato, si usamos como valor "juego" se traduce por:

select * from TLibros where 'libros LIKE 'juego' OR libros LIKE '* juego *' OR libros LIKE ' juego[,.;:]' OR libros LIKE '* juego[,.;:]*'' OR  'autor LIKE 'juego' OR autor LIKE '* juego *' OR autor LIKE 'juego[,.;:]' OR autor LIKE '* juego[,.;:]*''

En principio ahora lo veo todo correcto pero debe fallar algo más porque cuando ejecuto  la macro me dice...

Se ha producido error '3075' en tiempo de ejecución:

error de sintaxis (falta operador) en la expresión de consulta...

Por mucho que lo he intentado ya no sé realmente qué falta... Si me puedes ayudar e indicármelo, te lo agradecería en verdad. Un saludo

Veo que no te acabas de aclarar con las SQL... Así tienes que poner la última línea:

Me.recordsource = "select * from TLibros where " & A & " or " & B 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas