Error sentencia sql

BUENAS. Estaría muy agradecido si pudieran resolver un problema que no doy con la solución.
En mi proyecto Access tengo 2 tablas que incorporan los siguientes datos:
tblPersonal: id, nombre, usuario, password
Datos:
1, juan perez, juan, 123abc
2, JOSE LUIS, PEPE, hola
tblPermisos: tipo_filtro, nombre_fitro, usuario1 (JUAN) , usuario2 (PEPE)
Datos:
MENU, CLIENTES, 1, 0
MENU, CAJA, 1, 1
menu, proveedores, 0,1
Lo que pretendo es que con una sentencia SQL detecte si el usuario activotiene permisos (valor=1 permiso, valor=0 no permiso) para los diferentes botones del menu. Lo he intentado de la siguiente forma, pero no lo consigo:
Private Sub Form_Open(Cancel As Integer)
Dim rst As DAO.Recordset, _
strSQL As String
strSQL = "SELECT tblPersonal.USUARIO, tblPermisos.TIPO_FITRO, tblPermisos.NOMBRE_FILTRO, tblPermisos." & lngUsuario & " "
strSQL = strSQL & "FROM tblPermisos, tblPersonal "
strSQL = strSQL & "WHERE (tblPersonal.USUARIO=" & lngUsuario & ") AND (tblPermisos.FITRO=MENU)"
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
If (rst.EOF And rst.BOF) Then
MsgBox "No hay ningún elemento", vbInformation + vbOKOnly, "ATENCION"
Else
rst.MoveFirst
Do While Not rst.EOF
If rst!NOMBRE_FILTRO = "CAJA" Then
ElseIf (rst! & lngUsuario ) <> 0 Then
Me.cmdCaja.Enabled = True
End If
If rst!NOMBRE_FILTRO = "CLIENTES" Then
ElseIf (rst! & lngUsuario ) <> 0 Then
Me.cmdClientes.Enabled = True
End If
If rst!NOMBRE_FILTRO = "PROVEEDORES" Then
ElseIf (rst! & lngUsuario ) <> 0 Then
Me.cmdProveedores.Enabled = True
End If
rst.MoveNext
Loop
End If
CierraRecordsetDAO rst
End Sub  
lngUsuario es una variable pública declarada como string inicialmente al entrar al proyecto
El error que me da con este código es el 3615.

1 Respuesta

Respuesta
1
Yo haría una sentencia como esta:
"SELECT * FROM tblpersonal
INNER JOIN tblpermisos ON tblpermisos.usuario1 = tblPersonal.id
WHERE tblpersonal.usuario= "& ingusuario & " AND tblPermiso.Filtro = 'MENU'  "
En el select coloque * pero allí colocas los campos que necesites de ambas tablas.
Estoy muy agradecido por tu rápida respuesta. Finalmente tu opción del INNER JOIN no funcionó (error: no coincide el tipo en la expresión) pero me ayudó a replantearme el modo de la sentencia y he logrado conseguirlo. Creo que el fallo eran la colocación de las " ' ".
La sentencia que apliqué fue la siguiente:
strSQL = "SELECT tblPermisos.TIPO_FITRO, tblPermisos.NOMBRE_FILTRO, tblPermisos." & lngUsuario & " As PermisoUsuario "
strSQL = strSQL & "FROM tblPermisos, tblPersonal "
strSQL = strSQL & "WHERE (((tblPermisos.FITRO) = 'MENU') And ((tblPersonal.USUARIO) = '" & lngUsuario & "'))"
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
Muchas gracias, un saludo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas