Error de sintaxis en consulta

Tengo un formulario con dos combobox los cuales recogen uno o dos valores (es decir, uno de los combos se puede quedar vacío) para ejecutar una consulta sobre la tabla EXPEDIENTES al pulsar un botón (Comando0). El código que uso es el siguiente:

Private Sub Comando0_Click()
Dim sFiltro As String
Dim ctrl As Control
Dim strSQL As String
Dim db As DAO.Database
Dim qdf As DAO.QueryDef

On Error Resume Next

For Each ctrl In Me.Controls

If ctrl.ControlType = acComboBox Then
If ctrl.Value <> "" Then
sFiltro = sFiltro & ctrl.Tag & " = '" & ctrl & "'" & " AND "
End If
End If
Next

If sFiltro <> "" Then
sFiltro = Left(sFiltro, Len(sFiltro) - 4)
End If
strSQL = "SELECT * FROM EXPEDIENTES WHERE " & sFiltro
DoCmd.DeleteObject acQuery, "tempQry"

Set db = CurrentDb

Set qdf = db.CreateQueryDef("tempQry", strSQL)
DoCmd.OpenQuery ("tempQry")

End Sub

Y Access me indica que algún parámetro es erróneo pero no encuentro cual.

1 Respuesta

Respuesta
1

Le recomiendo validar el contenido de la información adicional del control (TAG) y depurar el código con Debug. Print, esto le ayuda a detectar el error.

Algo como:

Private Sub Comando0_Click()
Dim sFiltro As String
Dim ctrl As Control
Dim strSQL As String
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
On Error Resume Next
For Each ctrl In Me.Controls
If ctrl.ControlType = acComboBox Then
If ctrl.Value <> "" AND ctrl.Tag<>"" Then
sFiltro = sFiltro & ctrl.Tag & " = '" & ctrl & "'" & " AND "
End If
End If
Next
If sFiltro <> "" Then
sFiltro = Left(sFiltro, Len(sFiltro) - 4)
End If
strSQL = "SELECT * FROM EXPEDIENTES WHERE " & sFiltro
Debug.Print sFiltro
Debug.Print strSQL
DoCmd.DeleteObject acQuery, "tempQry"
Set db = CurrentDb
Set qdf = db.CreateQueryDef("tempQry", strSQL)
DoCmd.OpenQuery ("tempQry")
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas