在不使用表间参照完整性的情况下,实现楼主这个需求,须利用窗体输入数据并配合代码检测所输入的字段值是否已经存在于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我。
检索一下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