Crear una Consulta en access vba

Estoy tratando de crear una consulta pero siempre me sale el error 13. ¿Me podrían dar una Ayuda?

Private Sub CbxFirm3_Click()
Dim st As String
Dim dba As DAO.Database
Dim qda As DAO.QueryDef

st = "SELECT ImportfromExcel.* FROM ImportfromExcel WHERE (((ImportfromExcel.Country) Like " * " & [Forms]![import]![CbxCountry] & " * ") And ((ImportfromExcel.[Firm ]) Like " * " & [Forms]![import]![CbxFirm3] & " * ") And ((ImportfromExcel.Jahr) Like " * " & [Forms]![import]![Year] & " * ") And ((ImportfromExcel.Zustand) Like " * " & [Forms]![import]![Zustand] & " * ") And ((ImportfromExcel.City) Like " * " & [Forms]![import]![CbxCity] & " * "))ORDER BY ImportfromExcel.Country, ImportfromExcel.[Firm ], ImportfromExcel.Jahr, ImportfromExcel.City"

Set dba = CurrentDb
Set qda = dba.CreateQueryDef("Abfrage5", st)
End Sub

1 respuesta

Respuesta
1

Tu problema creo que viene por los delimitadores de los datos de filtro.

Si el valor es numérico la asignación es directa, es decir:

WHERE miNum=" & elNum

Si el valor es texto (string) debes situar el valor de filtro entre comillas simples, es decir

WHERE miValor=' & elValor & "'"

Por otra parte los operadores lógicos, como tu AND, deben ir dentro del texto de la SQL, y tú los estás dejando fuera, lo mismo que los paréntesis. Es decir:

WHERE miValor1 LIKE '*" & elValor1 & "*' AND miValor2 LIKE '*" & elValor2 & "*'"

Aplicando lo anterior a las primera líneas del WHERE de tu consulta obtendríamos:

(((ImportfromExcel.Country) Like '* " & [Forms]![import]![CbxCountry] & "*' ) And ((ImportfromExcel.[Firm ]) Like '* " & [Forms]![import]![CbxFirm3] & " *')"

Si te sirve de guía, todo debe quedar entrecomillas dobles exceptuando los valores de filtro, que deben ir concatenados con el ampersand. Para que me entiendas, y en abstracto:

"WHERE blabla" & Forms!NomForm.Control & "blablaba" & Forms!NomForm.Control & "blabla"

A ver si con esto lo puedes arreglar.

http://neckkito.siliconproject.com.ar/

Muchas Gracias por la rápida respuesta, He puesto todo por ejemplo con las comillas

WHERE (((ImportfromExcel.Country) Like ' * " & [Forms]![import]![CbxCountry] & " * ') And ((ImportfromExcel.[Firm ]) Like ' * " & [Forms]![import]![CbxFirm3] & " * ') And ((ImportfromExcel.Jahr) Like ' * " & [Forms]![import]![Year] & " * ') And ((ImportfromExcel.Zustand) Like ' * " & [Forms]![import]![Zustand] & " * ') And ((ImportfromExcel.City) Like ' * " & [Forms]![import]![CbxCity] & " * '))

Ahora no da ningún error, crea la consulta pero vacía.

Lo primero que veo es que a tu consulta le faltan unas comillas de cierre.

Sin ver tu BD y los datos que estás manejando no sé por qué no te devuelve registros. Lo que se me ocurre es que estás utilizando el operador AND y eso significa que si hay sólo uno (basta uno) de los campos en los que no hay coincidencia la consulta opera bien y no te devuelve registros.

Si tú tienes como valor de un campo1 "Amarillo" y como valor de otro campo2 "Verde" y tu consulta es

WHERE campo1 LIKE '*Amar*' AND campo2 LIKE '*Roj*'

Esa consulta no te devuelve registros porque para el campo2 no hay ninguna coincidencia, aunque sí la haya para el campo1

Si quieres que te devuelva registros cuando se den algunas coincidencias (y otras no) tienes que cambiar el AND por el operador OR.

A ver si este es tu problema.

Gracias Nekkito, Lo que tengo es una cascada de ComboBox y en el ultimo Combobox trate de hacer una selección múltiple y filtro, lo cual no me funciono. Así que Trato de crear para cada una de las opciones que tengo un combobox el cual cree una consulta y después unirlas en una sola consulta.

El primer Combobox funciono, crea y filtra la consulta, pero el segundo ( el que te mostré no funciona por algún motivo) a pesar que es casi lo mismo.

Ya intente tus consejos pero lastimosamente no me funcionó.

Lo cierto es que no acabo de entender la sistemática que estás aplicando y además sin verlo es difícil "acertar" con una solución. Así que, bote pronto, lo único que puedo decirte es que hagas un trabajo de depuración. Es decir, en el código, marca toda la SQL como comentario y la creas de nuevo paso a paso, probándola cada vez.

Es decir, algo así como (cuidado con el espacio antes del WHERE)

st = "SELECT ImportfromExcel.* FROM ImportfromExcel"

st= st & " WHERE (((ImportfromExcel.Country) Like ' * " & [Forms]![import]![CbxCountry] & " * ')"

Y la pruebas con un valor que sepas que debe devolver registros.

Si te funciona añades una línea más de código así (cuidado con el espacio antes del OR):

st = st & " OR ((ImportfromExcel.[Firm ]) Like ' * " & [Forms]![import]![CbxFirm3] & " * ')"

Y así sucesivamente hasta ver donde no te devuelve registros.

---

Ten en cuenta que si tienes el resto de consultas creadas (y todas tienen la misma estructura) lo que puedes hacer es una consulta de unión. Creas una consulta en blanco, la sitúas en vista SQL y escribes:

SELECT * FROM Consulta1
UNION
SELECT * FROM Consulta2
UNION
SELECT * FROM Consulta3

Etc.

No sé si alguna de las anteriores soluciones te servirá. Si no ya no se me ocurre mucha cosa más, más que ver tu BD e intentar encontrar por qué no te funciona.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas