在Access一个表中某个字段输入一个值,这个值在另一个表中的某个字段没有,即弹出一个提示,

现在我有两个Access表,在A表中某个字段输入一个值,这个值在B表中的这个字段没有,即弹出一个提示,需要在另B表中添加这个记录后才不会有提示,我不知道是否可以实现?请帮... 现在我有两个Access表,在A表中某个字段输入一个值,这个值在B表中的这个字段没有,即弹出一个提示,需要在另B表中添加这个记录后才不会有提示,我不知道是否可以实现?请帮忙看看,谢谢。补充一下,这个只是弹出提示,不能用主键来绑定,也就是说,如果B表中没有这个值,A表也能做记录,如果做成主键,那A表就记录不了。如图,请帮忙做成Access文件发到我的邮箱136759778@qq.com,谢谢! 展开
 我来答
tjrmgs
推荐于2017-09-15 · TA获得超过5765个赞
知道大有可为答主
回答量:2161
采纳率:94%
帮助的人:1042万
展开全部
在不使用表间参照完整性的情况下,实现楼主这个需求,须利用窗体输入数据并配合代码检测所输入的字段值是否已经存在于B表中才能实现。直接在数据表中录入数据因无法引入检测代码无法产生提示效果。

检测数据表中是否存在某个值,可以使用DLookup函数,非常方便。

使用窗体录入A表数据并提示B表的相应字段不存在输入的值,具体有一下几种方案:

1)非绑定文本框方案
注意此方法比较灵活,但是对数据库和应用程序初学者来说,其实挺复杂的,稍有不慎就会出错,而且形成原因往往多种多样较难查找。有兴趣了解的话,可以参阅本人以往的相关百度知道回答http://zhidao.baidu.com/question/350779600.html?oldq=1
简化的编程方案如下
假设A表结构为:A(ID 自增ID,Model 文本 必填字段=是)
为窗体(窗体1)添加一个非绑定文本框(Text1),一个命令按钮(Command1)
为命令按钮添加下列单击事件过程
Private Sub Command1_Click()
Dim strSql as String
If IsNull(Me.Text1) then
MsgBox "你Text1未输入数据"
Me.Text1.SetFocus
Exit Sub
End If
'检测文本框(Text1)中的值是否已经存在于B表的“Model”字段里
If IsNull(DLookup("[Model]", "B", "[Model]=Forms!窗体1!Text1")) Then
'B表“Model”字段不存在该值时弹出提示框
MsgBox "B表“Model”字段没有你新输入的值"
End If
'设置追加查询SQL语句,将非绑定文本框(Text1)中的值写入查询语句里
strSql="insert into A(Model) values('" & Forms!窗体1!Text1 & "')"
DoCmd.RunSql strSql '运行SQL查询,将非绑定文本框(Text1)中的值插入A表之中
End Sub

2) 窗体绑定数据表方案
此方案比较适合初学者,编程时需要考虑的问题相对少得多,但是程序比较死板。
编程方案如下(新增记录后跳到其它记录时,代码会检测刚才新增的那个值是否存在于B表,如果没有予以提示)
将窗体(窗体2)的数据源设置为A表(假设表结构与第一个方案相同)文本框(ID)与字段ID绑定,文本框(Model)与字段Model绑定。
为窗体添加下列插入后事件过程即可
Private Sub Form_AfterInsert()
If IsNull(DLookup("[Model]", "B", "[Model]=Forms!窗体2!Model")) Then
'B表“Model”字段不存在该值时弹出提示框
MsgBox "B表“Model”字段没有你新输入的值"
End If
End Sub
我身边没有ACCESS 2007环境, 就不发成品到你邮箱了。你只要按照我的回答去做就好了,并不是太复杂。

你也可已在文本框控件的更新后事件过程里进行检测,这种方法每次输入或修改文本框(Model)时都会进行检测,比较耗费系统资源
Private Sub Model_AfterUpdate()
'检测文本框(Model)中的值是否已经存在于B表的“Model”字段里
If IsNull(DLookup("[Model]", "B1", "[Model]=Forms!窗体1!Model")) Then
'B表“Model”字段不存在该值时弹出提示框
MsgBox "B表“Model”字段没有你新输入的值"
End If
End Sub

如果有不明白的地方可以追问或HI我。
更多追问追答
追问

我试了你后面的两个方案,点窗体属性,然后写插入后事件,点Model框属性,然后写更新后事件,但是我写了之后在Model框输入值时,没有出现提示,请帮忙看看,如下图:

追答
表面上没有发现你的代码处理有错误。

这个代码要在文本框里(Model)输入新数据或修改原有数据后,将焦点离开这个文本框才会起作用。另外你输入的数据要在“泄露电流测试记录表”的“Model”字段里没有与文本框里(Model)中的相同记录才有提示。

请检查表名、字段名、窗体名、控件名是否完全与代码吻合

要不加方括号试一试
Private Sub Model_AfterUpdate()
If IsNull(DLookup("[Model]", "泄露电流测试记录表", "[Model]=Forms![OORA记录界面]![Model]")) Then
MsgBox "此机型未测漏电。请确认"
End If
End Sub
或者换用DCount函数进行测试,我怀疑ACCESS 2007 DLookup函数在找不到记录时,其返回的值可能是零长度字符串而不是2003的空值。
Private Sub Model_AfterUpdate()
If Not DCount("[Model]", "泄露电流测试记录表", "[Model]=Forms![OORA记录界面]![Model]")>0 Then
MsgBox "此机型未测漏电。请确认"
End If
End Sub

如果还不行,将你的程序发到我邮箱里,我实际检查一下。邮箱地址到时用百度HI告诉你
创作者zUzVB1Sl31
2013-01-05 · 编程类资料、英语学习资料
创作者zUzVB1Sl31
采纳数:1331 获赞数:5975

向TA提问 私信TA
展开全部
检索一下B表不就好了,假如你上面那个按钮作为录入数据的按钮啊:
private sub 保存并新建_Click()
me.Recordsource="Select * from B表 where Model='"+Model.Text+"'"
me.refresh
If me.recordset.EOF then
MsgBox "插入数据B表中没有记录!",vbOkOnly,"输入异常"
else
me.Recordsource="insert into 表A(model) values('"+Model.Text+"')"
'插入记录
me.refresh '重新激活
me.recordset.update '更新记录集
me.recordset.movenext '记录移动到新行
Model.Text="" '初始化内容
Model.SetFucos '初始化焦点
end if
End Sub
追问
我需要在输入Model然后输入下一个字段前就弹出提示,当然,如果做在按钮上面也可以,但是我还不太会编程,所以,你看能不能把这个表做出来,或者把这个按钮做出来发给我136759778@qq.com,,谢谢了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式