Como habilito y deshabilito los menus en un MDIForm?

Enner
22 de Junio del 2004
Tengo una tabla en sql Server que guarda los nombres de los menus de una aplicacion en Visual Basic, esto porque estoy manejando el control de los usuarios y tengo una relacion entre los formularios y los usuarios en el que indico que formularios le corresponden a un determinado usuario, ahora quiero, desde visual, ihnabilitar los menues que no tenga acceso el usuario. he hecho de todo pero siempre me da error de que no coinciden los tipos, esto porque hago una consulta para ir viendo paso a paso, dependiendo del usuario, los formularios que estan en la tabla permitidos para el, y si coinciden entonces le hago una funcion en la que le paso por parametros el nombre del formulario MDI, el nombre del menu y el valor de que si es falso o verdadero, esto para inhabilitar o habilitar el menu.

Por favor me podrian ayudar a ver de que forma puedo habilitar o deshabilitar los menus del MDI.
Yo se que si pongo, por ejemplo: frmMDIPrincipal.mnuCMMedidores.enabled=False funciona, pero el problema esta es que estoy usando un for para recorrer todos los menus y asi cuando coinciden con el que etsa en la tabla lo habilito y si no lo deshabilito.

Les agradeceria de antemano su ayuda..

Saludos,
Enner

Meifer
22 de Junio del 2004
Hola, mira yo tengo una base de datos dond guardo lo siguente
cedula
cod_usuario
nombre
aicomp===> este es el nombre relacionado q le doy a cada uno de los menu q tengo en el formulario. el de tipo si/no. dond si es "SI" esta tildado y es verdadero . ahora este el codigo

SQL = "Select * from usuario where CEDULA=" & CLng(cedula)
rsch.Open SQL, dbch, adOpenStatic
If rsch.EOF = False Then
If rsch!AICOMP = False Then mnuCompañía.Enabled = False
If rsch!mttorepos = False Then mnuReposiciones.Enabled = False
If rsch!repnta = False Then mnuNtaDebito.Enabled = False
If rsch!reprepos = False Then mnuReposic.Enabled = False
If rsch!repmaest = False Then mnuMaestro.Enabled = False
If rsch!procactual = False Then mnuactualizar.Enabled = False

End If
rsch.Close

Meifer
22 de Junio del 2004
Ah esto lo coloco en el Private Sub MDIForm_Load()... end sub.

pero antes del menu debe haber una pantalla de login, dond me permita guardar el valor del campo clave. q me identifique el usuario.

Enner
22 de Junio del 2004
Gracias. Todo lo que me dices ya lo tengo lo que pasa es que lo que quiero es hacer un for, pues mi aplicación ya va por los 78 formularios y te imaginaras que no puedo poner la definición para cada uno.
Te envío el codigo de la funcion que he mencionado para que veas mas o menos lo que quiero hacer:

'Para Obtener los registros de los menus que tiene asignado cada usuario
Set rs2 = New ADODB.Recordset
strSQL2 = "Select * from tblSeguridadDet where intcodseguridad=" & rs!intcodUsuario & ""
rs2.Open strSQL2, Initcon, adOpenStatic, adLockReadOnly

'Para obtener los registros del catalogo de menús
Set rs3 = New ADODB.Recordset
strSQL3 = "Select * from tblCatMenu"
rs3.Open strSQL3, Initcon, adOpenStatic, adLockReadOnly

y luego uso esta funcion, pero despues me da error...

Public Sub HabiDeshabiMenu(frm As MDIForm, valor As Boolean)
Dim Ctrl As Control
Dim i As Integer

For i = 0 To rs2.RecordCount
For Each Ctrl In frm.Controls
If TypeOf Ctrl Is Menu Then
If rs3("intCodMenu") = rs2("intCodMenu") And Ctrl.Name = rs3("strMenuVB") Then
Ctrl.Enabled = True
ElseIf Ctrl.Caption <> "-" Then
Ctrl.Enabled = False
End If
End If

Next
rs3.MoveNext
rs2.MoveNext
Next i
End Sub