Office中国论坛/Access中国论坛

标题: 组合框?代码显示用户未定义 [打印本页]

作者: 旺    时间: 2003-11-30 19:09
标题: 组合框?代码显示用户未定义
打开“联系人”窗体,在“单位名称”中加入新值,可是VB中显示用户类型未定义,如何解决?
                                       谢谢![attach]2629[/attach]
作者: 阿罗    时间: 2003-12-2 06:39
你的裤真是错误多多。首先,用户类型未定义的原因是缺少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
作者: 阿罗    时间: 2003-12-2 06:40
[attach]2652[/attach]
作者: LYP6160    时间: 2003-12-2 07:00
啊罗:代码中还有不足的地方,就是不想增加某个单位的时候按“退出“键不能正确退出,希望加点“料“进去,呵呵。
作者: 阿罗    时间: 2003-12-2 07:20
是的,有一个错误。第二个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
作者: 阿罗    时间: 2003-12-2 07:35
也可在第一个if..中添加
else  
   [Com单位名称].Undo
   exit sub
end if
反正原理如此,具体用法自行解决吧。

作者: LYP6160    时间: 2003-12-2 07:38
呵呵,你换得真快
作者: 阿罗    时间: 2003-12-3 07:01
再次修改

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

作者: 旺    时间: 2003-12-5 03:13
太感谢阿罗和LYP6160了,我先试试,还得麻烦各位呢。
                                             再次表示感谢!




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