Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

[5分]如何只显示登录用户的记录

风水师  发表于:2010-02-02 19:57:54  
复制

物料进仓的数据源如下:

SELECT tblwljc.wljcid AS 物料进仓编号, tblwljc.rklb AS 入库类别, tblwljc.dd AS 订单, tblwljc.jsr AS 经手人, tblwljc.cg AS 仓管, tblwljc.drdw AS 调入单位, tblwljc.dcdw AS 调出单位, tblwljc.jcrq AS 进仓日期, sys_tblUser.userName AS 录单人, tblwljc.czsj AS 操作时间
FROM tblwljc INNER JOIN sys_tblUser ON tblwljc.czyid=sys_tblUser.userNumber;

frmwljc_child中窗体的加载事件如下:

Private Sub Form_Load()
   Dim strUserID As String

    '获得当前登录的操作员
    strUserID = Forms!usysfrmLogin!txtUserName
    If strUserID = "000001" Then    '如果是管理员,就显示全部
       Me.RecordSource = "SELECT qry_wljc.* FROM qry_wljc"
    Else    '如果不是管理员,就只显示操作员自已录入的
        Me.RecordSource = "SELECT qry_wljc.* FROM qry_wljc WHERE qry_wljc.userName='" & strUserID & "'"
    End If
End Sub

如果用000001登陆的话,就可以显示所有的记录,但是如果不是的话,就有问题。

如果非000001登陆的话,把qry_wljc查询换成tblwljc表的话,登陆之后,就会显示名称?之类的东东。

 

 

Top
竹笛 发表于:2010-02-02 20:39:16

从你写的下面的代码来看,只与qry_wljc有关,所以不要说换成表,因为与tblwljc表没有任何关系:

If strUserID = "000001" Then    '如果是管理员,就显示全部
       Me.RecordSource = "SELECT qry_wljc.* FROM qry_wljc"
    Else    '如果不是管理员,就只显示操作员自已录入的
        Me.RecordSource = "SELECT qry_wljc.* FROM qry_wljc WHERE qry_wljc.userName='" & strUserID & "'"
    End If



andymark 发表于:2010-02-02 20:40:01

类型不对吧 userName 应该是用户名称 , strUserID 是ID 

 

 

 

 



竹笛 发表于:2010-02-02 20:40:29

另外,你的qry_wljc查询中必须要有userName列。



风水师 发表于:2010-02-02 21:14:55


Private Sub Form_Load()
   Dim strUserID As String

    '获得当前登录的操作员
    strUserID = Forms!usysfrmlogin!txtUserName
    If strUserID = "000001" Then    '如果是管理员,就显示全部
       Me.RecordSource = "SELECT qry_wljc.* FROM qry_wljc"
    Else    '如果不是管理员,就只显示操作员自已录入的
        Me.RecordSource = "SELECT tblwljc.wljcid AS 物料进仓编号, tblwljc.rklb AS 入库类别, tblwljc.dd AS 订单, tblwljc.jsr AS 经手人, tblwljc.cg AS 仓管, tblwljc.drdw AS 调入单位, tblwljc.dcdw AS 调出单位, tblwljc.jcrq AS 进仓日期, sys_tblUser.userName AS 录单人, tblwljc.czsj AS 操作时间 FROM tblwljc INNER JOIN sys_tblUser ON tblwljc.czyid=sys_tblUser.userNumber WHERE sys_tblUser.userName='" & strUserID & "'"
    End If
   
End Sub

后来我改进了一下,可以成功录入单据,但是录入之后呢,不能看到自己录入的单据.用000001进入的话,就又可以看得到.



竹笛 发表于:2010-02-02 22:15:07

你上面的代码就算正确也留下了一个漏洞,就是操作员可以通过查询查出全部的数据!

 

最佳的方法是用两个查询。一个是查询 qry_wljc(里面放上登录用户的条件),另一个查询是 ary_wljc_all(无条件,显示全部数据),然后代码为:

Private Sub Form_Load()
    If strUserID = "000001" Then    '如果是管理员,就显示全部
       Me.RecordSource = "SELECT ary_wljc_all.* FROM ary_wljc_all"
    Else    '如果不是管理员,就只显示操作员自已录入的
        Me.RecordSource = "SELECT qry_wljc.* FROM qry_wljc"
    End If
End Sub

 



竹笛 发表于:2010-02-02 22:16:40
ary_wljc_all改成 qry_wljc_all,上面打错了一个字母。

andymark 发表于:2010-02-03 12:23:40

你的字段使用了查阅向导吧,ID 对应的是userNumber

 

WHERE sys_tblUser.userNumber='" & strUserID & "'"



风水师 发表于:2010-02-03 13:24:10

andymark:

的确如此, 类型不对吧 userName 应该是用户名称 , strUserID 是ID 

 

高人指点之后,如下办法解决:

在qry_wljc中仅仅添加czyid一列,,然后在代码中作如下修改即可. 

Private Sub Form_Load()
   Dim strUserID As String

    '获得当前登录的操作员
    strUserID = Forms!usysfrmLogin!txtUserName
    If strUserID = "000001" Then    '如果是管理员,就显示全部
       Me.RecordSource = "SELECT qry_wljc.* FROM qry_wljc"
    Else    '如果不是管理员,就只显示操作员自已录入的
        Me.RecordSource = "SELECT qry_wljc.* FROM qry_wljc WHERE czyid='" & strUserID & "'"
    End If
End Sub

 



竹笛 发表于:2010-02-03 14:27:15
你上面的代码就算正确也留下了一个漏洞,就是操作员可以通过查询查出全部的数据!

总记录:9篇  页次:1/1 9 1 :