Office中国论坛/Access中国论坛
标题: [求助]提示:参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。 [打印本页]
作者: sunwrsun 时间: 2017-2-3 13:44
标题: [求助]提示:参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。
[求助]前台A床cess,后台SQL。登录提示:参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。
'创建系统菜单栏
Public Sub CreateMenuBar()
On Error GoToErr_CreateMenuBar
Const strMenubarName As String ="CustomSystemMenu" '自定义系统菜单栏名称
Dim rst As New ADODB.Recordset
Dim bar As Object
Dim bar2 As Object
Dim ctl As Object
Dim rst2 As New ADODB.Recordset
Dim strSql As String
Dim strSQL2 As String
Dim blnHide As Boolean
'循环所有菜单栏,如果定义名称的菜单栏存在,则将其删除
For Each bar In Application.CommandBars
If bar.Name = strMenubarName ThenCommandBars(strMenubarName).Delete
Next
'重新创建菜单栏
Set bar = CommandBars.Add(strMenubarName,1, True, True) 'msoBarTop=1
bar.Protection = 4 'msoBarNoMove 禁止移动菜单栏
'读取设置决定是否显示无权访问的菜单及菜单项
blnHide =GetDbSetting("HideMenuForNoRight", False)
strSql = " SELECTFUserId,USysMenuItems.FItemId, FItemText, FShortcutKey,FParent,FOpenRun,FAdd,FEdit,FDelete,FPrint,FOutput" & _
" FROM USysUserRights RIGHTJOIN USysMenuItems ON USysUserRights.FItemId = USysMenuItems.FItemId"& _
" WHERE FParent=0 AndFUserId=" & Forms!frmLogon!txtUserId
If blnHide Then strSql = strSql &" AND FOpenRun=True"
strSql = strSql & " ORDER BYFOrder"
' Debug.Print strSQL2
strSQL2 = " SELECTT.FOrder,T.FItemId,T.FItemText,T.FCommand,T.FArgument,T.FShortcutKey,T.FParent,"& _
"R.FOpenRun,R.FAdd,R.FEdit,R.FDelete,R.FPrint,R.FOutput" &_
" FROM (USysUserRightsAS R RIGHT JOIN USysMenuItems AST ON R.FItemId = T.FItemId)" & _
" WHERE R.FUserId="& Forms!frmLogon!txtUserId
If blnHide Then strSQL2 = strSQL2 &" AND R.FOpenRun=True"
strSQL2 = strSQL2 & " ORDER BYT.FOrder"
' Debug.Print strSQL2
rst.Open strSql, CurrentProject.Connection,adOpenKeyset, adLockReadOnly
rst2.Open strSQL2,CurrentProject.Connection, adOpenKeyset, adLockReadOnly
Do Until rst.EOF
Set bar =CommandBars(strMenubarName).Controls.Add(10) 'msoControlPopup=10
bar.Caption = rst!FItemText &rst!FShortcutKey
If Not blnHide Then bar.Enabled =rst!FOpenRun
rst2.Filter = "FParent="& rst!FItemId
Do Until rst2.EOF
Set ctl =bar.CommandBar.Controls.Add(1) 'msoControlButton
ctl.Caption = Nz(rst2!FItemText) &Nz(rst2!FShortcutKey)
If Not blnHide Then ctl.Enabled =rst!FOpenRun And rst2!FOpenRun
If ctl.Enabled Then ctl.OnAction ="=RunMenuCommand('" & Nz(rst2!FCommand) & "','"& Nz(rst2!FArgument) & "'," & _
(rst!FOpenRun And rst2!FOpenRun) & "," & (rst!FAdd Andrst2!FAdd) & "," & _
(rst!FEdit And rst2!FEdit) & "," & (rst!FDelete Andrst2!FDelete) & "," & _
(rst!FPrintAnd rst2!FPrint) & "," & (rst!FOutput And rst2!FOutput) &")"
rst2.MoveNext
Loop
rst.MoveNext
Loop
rst.Close
rst2.Close
CommandBars(strMenubarName).Visible = True
Exit_CreateMenuBar:
Exit Sub
Err_CreateMenuBar:
Msgbox "ModRight Sub_CreateMenuBar" & vbCr &Err.Description, vbCritical
Resume Exit_CreateMenuBar
End Sub
作者: roych 时间: 2017-2-3 14:35
别的没留意到,然而部分语句似乎少了空格:
If bar.Name = strMenubarName ThenCommandBars(strMenubarName).Delete
应为:
If bar.Name = strMenubarName Then CommandBars(strMenubarName).Delete
SQL语句错得太多,懒得说了。select、where 、and、order by……自己检查吧。
作者: sunwrsun 时间: 2017-2-3 21:33
十分感谢roych帮助,我试试看。
作者: sunwrsun 时间: 2017-2-3 21:46
我检查了一下如roych所说源代码的部分语句似本来是有空格的,我是先复制到Word后再复制到论坛上,就出现了部分语句少了空格。所以未在意。我现在直接复制上来,麻烦roych再看看,谢谢。
'创建系统菜单栏
Public Sub CreateMenuBar()
On Error GoTo Err_CreateMenuBar
Const strMenubarName As String = "CustomSystemMenu" '自定义系统菜单栏名称
Dim rst As New ADODB.Recordset
Dim bar As Object
Dim bar2 As Object
Dim ctl As Object
Dim rst2 As New ADODB.Recordset
Dim strSql As String
Dim strSQL2 As String
Dim blnHide As Boolean
'循环所有菜单栏,如果定义名称的菜单栏存在,则将其删除
For Each bar In Application.CommandBars
If bar.Name = strMenubarName Then CommandBars(strMenubarName).Delete
Next
'重新创建菜单栏
Set bar = CommandBars.Add(strMenubarName, 1, True, True) 'msoBarTop=1
bar.Protection = 4 'msoBarNoMove 禁止移动菜单栏
'读取设置决定是否显示无权访问的菜单及菜单项
blnHide = GetDbSetting("HideMenuForNoRight", False)
strSql = " SELECT FUserId,USysMenuItems.FItemId, FItemText, FShortcutKey, FParent,FOpenRun,FAdd,FEdit,FDelete,FPrint,FOutput" & _
" FROM USysUserRights RIGHT JOIN USysMenuItems ON USysUserRights.FItemId = USysMenuItems.FItemId" & _
" WHERE FParent=0 And FUserId=" & Forms!frmLogon!txtUserId
If blnHide Then strSql = strSql & " AND FOpenRun=True"
strSql = strSql & " ORDER BY FOrder"
' Debug.Print strSQL2
strSQL2 = " SELECT T.FOrder,T.FItemId,T.FItemText,T.FCommand,T.FArgument,T.FShortcutKey,T.FParent," & _
"R.FOpenRun,R.FAdd,R.FEdit,R.FDelete,R.FPrint,R.FOutput" & _
" FROM (USysUserRights AS R RIGHT JOIN USysMenuItems AS T ON R.FItemId = T.FItemId)" & _
" WHERE R.FUserId=" & Forms!frmLogon!txtUserId
If blnHide Then strSQL2 = strSQL2 & " AND R.FOpenRun=True"
strSQL2 = strSQL2 & " ORDER BY T.FOrder"
' Debug.Print strSQL2
rst.Open strSql, CurrentProject.Connection, adOpenKeyset, adLockReadOnly
rst2.Open strSQL2, CurrentProject.Connection, adOpenKeyset, adLockReadOnly
Do Until rst.EOF
Set bar = CommandBars(strMenubarName).Controls.Add(10) 'msoControlPopup=10
bar.Caption = rst!FItemText & rst!FShortcutKey
If Not blnHide Then bar.Enabled = rst!FOpenRun
rst2.Filter = "FParent=" & rst!FItemId
Do Until rst2.EOF
Set ctl = bar.CommandBar.Controls.Add(1) 'msoControlButton
ctl.Caption = Nz(rst2!FItemText) & Nz(rst2!FShortcutKey)
If Not blnHide Then ctl.Enabled = rst!FOpenRun And rst2!FOpenRun
If ctl.Enabled Then ctl.OnAction = "=RunMenuCommand('" & Nz(rst2!FCommand) & "','" & Nz(rst2!FArgument) & "'," & _
(rst!FOpenRun And rst2!FOpenRun) & "," & (rst!FAdd And rst2!FAdd) & "," & _
(rst!FEdit And rst2!FEdit) & "," & (rst!FDelete And rst2!FDelete) & "," & _
(rst!FPrint And rst2!FPrint) & "," & (rst!FOutput And rst2!FOutput) & ")"
rst2.MoveNext
Loop
rst.MoveNext
Loop
rst.Close
rst2.Close
CommandBars(strMenubarName).Visible = True
Exit_CreateMenuBar:
Exit Sub
Err_CreateMenuBar:
Msgbox "ModRight Sub_CreateMenuBar" & vbCr & Err.Description, vbCritical
Resume Exit_CreateMenuBar
End Sub
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) |
Powered by Discuz! X3.3 |