设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1245|回复: 8
打印 上一主题 下一主题

[窗体] 组合框?代码显示用户未定义

[复制链接]
跳转到指定楼层
1#
发表于 2003-11-30 19:09:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
打开“联系人”窗体,在“单位名称”中加入新值,可是VB中显示用户类型未定义,如何解决?
                                       谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2003-12-2 06:39:00 | 只看该作者
你的裤真是错误多多。首先,用户类型未定义的原因是缺少DAO的引用,另外,很多地方变量都没有声明。除去这些错误以后,我注意到你的问题是在联系人窗体的单位下拉列表中,当输入一个新单位时,能自动添加到“单位”数据表中,并能在联系人窗体中正确显示。

应该了解,ACCESS的关于下拉列表“不在列表中”事件,可以方便地添加一个新纪录到列表的源表,但,这仅仅适用于绑定列同时也是显示列的情况。当绑定列是“单位ID”,而显示列是“单位名称”时,添加新纪录到单位表中是要动动脑筋的。这也正是问题的关键所在。

知道了问题的关键,就可以找到解决办法了。不难想到如下代码:(下一贴传上具体的裤子)

Private Sub Com单位名称_NotInList(NewData As String, Response As Integer)
On Error GoTo catch
Dim result
If MsgBox("单位不在列表中,要把这个新单位加进数据库中吗?", vbOKCancel + vbQuestion, "提示") = vbOK Then
    Response = acDataErrAdded
    DoCmd.RunSQL "INSERT INTO [单位] ([单位名称]) VALUES ('" & NewData & "')"
End If
result = DLookup("[单位ID]", "[单位]", "[单位名称]='" & NewData & "'")
If IsNull(result) Then
    Response = acDataErrContinue
    MsgBox "添加新单位没有成功,请重试。", vbCritical, "添加失败"
    [单位ID].Undo
Else
    Response = acDataErrAdded
End If
finally:
    Exit Sub
catch:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume finally
End Sub
3#
发表于 2003-12-2 06:40:00 | 只看该作者

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
4#
发表于 2003-12-2 07:00:00 | 只看该作者
啊罗:代码中还有不足的地方,就是不想增加某个单位的时候按“退出“键不能正确退出,希望加点“料“进去,呵呵。
5#
发表于 2003-12-2 07:20:00 | 只看该作者
是的,有一个错误。第二个if..then..else中[单位id].undo应该改为控件名称

Private Sub Com单位名称_NotInList(NewData As String, Response As Integer)
On Error GoTo catch
Dim result
If MsgBox("单位不在列表中,要把这个新单位加进数据库中吗?", vbOKCancel + vbQuestion, "提示") = vbOK Then
    Response = acDataErrAdded
    DoCmd.RunSQL "INSERT INTO [单位] ([单位名称]) VALUES ('" & NewData & "')"
End If
result = DLookup("[单位ID]", "[单位]", "[单位名称]='" & NewData & "'")
If IsNull(result) Then
    Response = acDataErrContinue
    MsgBox "添加新单位没有成功,请重试。", vbCritical, "添加失败"
    [Com单位名称].Undo
Else
    Response = acDataErrAdded
End If
finally:
    Exit Sub
catch:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume finally
End Sub
6#
发表于 2003-12-2 07:35:00 | 只看该作者
也可在第一个if..中添加
else  
   [Com单位名称].Undo
   exit sub
end if
反正原理如此,具体用法自行解决吧。
7#
发表于 2003-12-2 07:38:00 | 只看该作者
呵呵,你换得真快
8#
发表于 2003-12-3 07:01:00 | 只看该作者
再次修改

Private Sub Com单位名称_NotInList(NewData As String, Response As Integer)
On Error GoTo catch
If MsgBox("单位不在列表中,要把这个新单位加进数据库中吗?", vbOKCancel + vbQuestion, "提示") = vbOK Then
    DoCmd.RunSQL "INSERT INTO [单位] ([单位名称]) VALUES ('" & NewData & "')"
    If Nz(DLookup("[单位ID]", "[单位]", "[单位名称]='" & NewData & "'"), 0) Then
           Response = acDataErrAdded
    Else
           Response = acDataErrContinue
           MsgBox "添加新单位没有成功,请重试。", vbCritical, "添加失败"
           [Com单位名称].Undo
    End If
End If
finally:
    Exit Sub
catch:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume finally
End Sub
9#
 楼主| 发表于 2003-12-5 03:13:00 | 只看该作者
太感谢阿罗和LYP6160了,我先试试,还得麻烦各位呢。
                                             再次表示感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-15 12:13 , Processed in 0.105431 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表