Access交流中心

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

获得焦点问题

平凡至尊  发表于:2011-10-02 17:55:32  
复制

点击下载此附件如示例所示,如果录入的“钥匙编号”已经存在将弹出警告窗口,如何在点击确认后让“钥匙编号”清空后重新获得焦点,我试了半天都不行,请高手指教。

 

Top
lyxiong 发表于:2011-10-02 20:39:08

在frm钥匙新增窗体中钥匙编号更新前事件

 

 

Private Sub 钥匙编号_BeforeUpdate(Cancel As Integer)
 Dim strbh, strbhgs As String
If (Not IsNull(DLookup("[钥匙编号]", "tbl钥匙", "[钥匙编号]='" & Me!钥匙编号 & "'"))) Then
MsgBox "你输入的钥匙编号【 " & Me.钥匙编号 & " 】已存在!请确认后在录入!!"
Cancel = True
 Me.钥匙编号.Undo
 
 strbh = CurrentProject.Connection.Execute("SELECT nz(Max(Val(Right([序号],2))),0) AS 表达式1 FROM tbl钥匙").GetString
 strbhgs = Format(Val(strbh) + 1, "00")
    Me.序号 = "YS" & strbhgs & ""

End If
End Sub



lyxiong 发表于:2011-10-02 21:21:40

frm钥匙新增窗体中的所有代码:

 

Option Compare Database


Private Sub Form_Open(Cancel As Integer)
Dim strbh, strbhgs As String
 strbh = CurrentProject.Connection.Execute("SELECT nz(Max(Val(Right([序号],2))),0) AS 表达式1 FROM tbl钥匙").GetString
 strbhgs = Format(Val(strbh) + 1, "00")
    Me.序号 = "YS" & strbhgs & ""
End Sub

Private Sub 保存_Click()
    Dim Rst As DAO.Recordset
    If IsNull(Me.钥匙编号) Then
        MsgBox "请输入钥匙编号!", vbCritical, "系统提示:"
        Me.钥匙编号.SetFocus
        Exit Sub
    End If
    If IsNull(Me.钥匙名称) Then
        MsgBox "请输入钥匙名称!", vbCritical, "系统提示:"
        Me.钥匙名称.SetFocus
        Exit Sub
    End If

    Set Rst = CurrentDb.OpenRecordset("tbl钥匙 ", dbOpenDynaset)
    Rst.AddNew
    Rst("序号") = Me.序号
    Rst("钥匙编号") = Me.钥匙编号
    Rst("钥匙名称") = Me.钥匙名称
    Rst("使用性质") = Me.使用性质
    Rst("钥匙属性") = Me.钥匙属性
    Rst("存储位置") = Me.存储位置
    Rst("保管单位") = Me.保管单位
    Rst("保管人") = Me.保管人
    Rst.Update
    Rst.Close
    Set Rst = Nothing
    '刷新数据
    Me.序号 = Null
    Me.钥匙编号 = Null
    Me.钥匙名称 = Null
    Me.使用性质 = Null
    Me.钥匙属性 = Null
    Me.存储位置 = Null
    Me.保管单位 = Null
    Me.保管人 = Null
    Me.Refresh
    Forms!frm钥匙主窗体!frm钥匙子窗体.Requery
End Sub

Private Sub 关闭_Click()
DoCmd.Close acForm, Me.name
End Sub

Private Sub 钥匙编号_BeforeUpdate(Cancel As Integer)
 
If (Not IsNull(DLookup("[钥匙编号]", "tbl钥匙", "[钥匙编号]='" & Me!钥匙编号 & "'"))) Then
MsgBox "你输入的钥匙编号【 " & Me.钥匙编号 & " 】已存在!请确认后在录入!!"
Cancel = True
 Me.钥匙编号.Undo
End If
End Sub



符鸿敏 发表于:2011-10-02 23:04:44

改钥匙编号_AfterUpdate() 为 其它文本框_GotFocus()事件

 

 

点击下载此附件  供参考

平凡至尊 发表于:2011-10-03 02:15:35

感谢lyxiong符鸿敏的热心回答,但是lyxiong老师您只满足了我一个要求,就是让“钥匙编号”得到焦点,而第二个要求“钥匙编号”清空的要求没达到请费心想想办法

符鸿敏老师,无意中您又教了我一招,就是 CAll ,您的实例确实能达到我的两个要求,但是想问下有没有相对简单点,不要那么多语句就能达到要求的,语句越多看着越麻烦。

而且存在如下问题:

如果我仅仅输入一个存在的编号,别的不输入直接点击保存会出现 图所示的对话框,继续点击对话框的确认,会出现 图 所示的重复验证,继续点确认,又会出现 图所示的错误提示。一系列问题如何解决,谢谢。

   



平凡至尊 发表于:2011-10-03 02:20:15

接楼上,即便是错误操作,系统也应该是先验证是否重号,重号了,就回到“钥匙编号”重新录入编号,如果还是不录入钥匙名称继续点保存,才是提醒“钥匙名称”为空。

各位老师多费心指导下,谢谢



平凡至尊 发表于:2011-10-03 03:28:43
这是怎么了,老问题没解决,新问题又出了,修改窗体,为什么不可用,请老师顺便帮助下,核对了2个多小时,应该没有问题啊。点击下载此附件

dbaseIIIer 发表于:2011-10-03 06:02:40

我没看过你之前版本为什么可以,

我只能告诉你现在这版本打开 修改窗体没符合筛选的记录的原因是

你的 public 变量还没有设置!

 

我建议你

 

1. 把修改窗体中 Form_Load 代码删掉,

 

取而代之则是在 主窗体中的 "修改钥匙_Click" 代码内改为

 

Private Sub 修改钥匙_Click()
    DoCmd.OpenForm "frm钥匙修改", , , "[钥匙编号]='" & Form_frm钥匙子窗体.钥匙编号 & "'"
End Sub

 

2. 你上面的问题, 新增时, 我觉得在  钥匙名称_BeforeUpdate 或 钥匙名称_Exit 内做验证的!

 

还有不要用DCount , 用DLookup 是运作上比 DCount 快,及耗内存更少的.

所以

Private Sub 钥匙编号_BeforeUpdate(Cancel As Integer)
    If Not IsNull(DLookup("[钥匙编号]", "tbl钥匙", "[钥匙编号] ='" & Me.[钥匙编号] & "'")) Then
        MsgBox "你输入的钥匙编号【 " & Me.钥匙编号 & " 】已存在!请确认后再录入!!", vbExclamation, "警告"
        Cancel = True
    End If
End Sub

这样, 验证失败就不能离开控件, 除非按 ESC 取消更新, 还原原值.

 

或者你还可以加上其他验证 如

    If IsNull( me!钥匙编号) Then

        Msgbox "不能为空!", vbExclamation

        Cancel = True

    End If

 

为什么你一定要清空? 进行全选不好吗?

If Cancel Then

    '把输入的数据全选了, 用户又看到输错什么, 又一输入就取代错误值了.

    Me!钥匙编号.SelStart = 0

    Me!钥匙编号.SelLength = 1000

End if

 



网行者 发表于:2011-10-03 06:14:13
修改了"frm钥匙子窗体"的Form_Current事件:点击下载此附件

符鸿敏 发表于:2011-10-03 08:43:08

点击下载此附件

 

楼主提出的后续问题,其实本人就有一定的预料,但考虑你应该可以发现并有能力解决之,所以就只针对你的提问做了些改动。现在就你又提出新的问题再次完善了。



平凡至尊 发表于:2011-10-04 18:55:05
感谢lyxiong老师、符鸿敏老师、网行者老师、dbaseIIIer老师的热心帮助,但是我只能给一个最佳答案,在此我就给符鸿敏老师了,因为不光解决了我的问题,还让我学会了call的用法,谢谢大家。

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