Office中国论坛/Access中国论坛

标题: 失去焦点 [打印本页]

作者: majie0218    时间: 2008-9-29 10:49
标题: 失去焦点
失去焦点在窗体中的职工ID文本框的失去焦点事件中添加如下代码
Private Sub 职工ID_LostFocus()
On Error GoTo Err_职工ID_LostFocus
'定义字符型变量
Dim STemp As String
'定义用于循环的整型变量
Dim i As Integer
'定义数据集变量
Dim Rs As ADODB.Recordset
'为定义的数据集变量分配空间
Set Rs = New ADODB.Recordset
'为打开数据表"查询语句"字符型变量赋值
STemp = "Select * From 职工基本资料"
'打开"职工基本资料"数据表
Rs.Open STemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  '把记录集指针指向第一条记录
  Rs.MoveFirst
   '使用FOR...NEXT循环语句在Rs数据集中循环判断
   For i = 1 To Rs.RecordCount
    '判断记录集中的"职工ID"字段值与窗体中的"职工ID"文本框的值的关系
    If Rs("职工ID") = Me![职工ID] Then
      '如果相同,则把该记录字段的值赋予窗体对应文本框内
      Me![ 所在院系] = Rs("所在院系 ")
      Me![ 姓名] = Rs("姓名")
      Me![ 基本工资] = Rs("工资")
    Else
      '如果不相同,则移动到下一条记录
      Rs.MoveNext
    End If
  Next i
    '释放系统为Rs数据集分配的空间
    Set Rs = Nothing
Exit_职工ID_LostFocus:
   Exit Sub
Err_职工ID_LostFocus:
   MsgBox Err.Description
   Resume Exit_职工ID_LostFocus
End Sub

其中“所在院系”“姓名”“基本工资”文本框均以锁定,职工基本资料数据表中也有数据
但是在职工ID文本框中输入数据表中存在的职工ID号以后,当鼠标光标离开“职工ID”文本框是系统提示“在对应所需名称或序数的集合中,未找到项目”
这是怎么回事呀?


帮帮忙吧
作者: zyp    时间: 2008-9-29 11:30
问题应该出在下面这行上:
Me![ 所在院系] = Rs("所在院系 ")
所在院系后面多了一个空格,这个是允许的。

另外,你的程序写得太复杂了,还用了循环,这样会导致程序执行变慢,我将你程序修改一下,希望你能触类旁通

Private Sub 职工ID_LostFocus()
Dim STemp As String
Dim i As Integer
Dim Rs As New ADODB.Recordset
STemp = " Select * From 职工基本资料 WHERE 职工ID='" & Me.职工ID & "'"
Rs.Open STemp, CurrentProject.Connection
If Rs.RecordCount <> 0 Then
    Me.所在院系 = Rs("所在院系 ")
    Me.姓名 = Rs("姓名")
    Me.基本工资 = Rs("工资")
Else
    MsgBox "对不起,没有相应的记录", vbCritical
End If
Rs.Close
Set Rs = Nothing
End Sub
作者: zyp    时间: 2008-9-29 11:37
或者来个更简单的

Private Sub 职工ID_LostFocus()
    Dim IDstr As String
    IDstr = Me.职工ID
    If DCount("*", "职工基本资料", "[职工ID]='" & IDstr & "'") = 0 Then
            MsgBox "对不起,没有相应的记录", vbCritical
    Else
            Me.所在院系 = DLookup("[所在院系]", "职工基本资料", "[职工ID]='" & IDstr & "'")
            Me.姓名 = DLookup("[姓名]", "职工基本资料", "[职工ID]='" & IDstr & "'")
            Me.基本工资 = DLookup("[基本工资]", "职工基本资料", "[职工ID]='" & IDstr & "'")
    End If
End Sub
作者: majie0218    时间: 2008-9-29 11:39
[:50] 谢谢了
作者: tz-chf    时间: 2008-9-29 11:58
或者干脆不管它能不能找到,就dlookup....

写在lostfocus里不好,应该写在afterupdate
作者: ycxchen    时间: 2008-9-29 15:09
1楼的代码复杂了点,但对于初学者理解VBA语句也有一定的好处
作者: ycxchen    时间: 2008-9-29 15:16
其实, DCount与 DLookup用法有何区别?
作者: tanhong    时间: 2008-9-29 16:28
单就你的程序来说:除zyp前面所说的问题,还有一处问题Me![ 所在院系] = Rs("所在院系") 中,Me![ 所在院系]注意不能有空格.
作者: changweiren    时间: 2008-10-1 00:30
得益于回帖
作者: wuwu200222    时间: 2023-10-12 11:03
学习




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3