在access中要判断一个表中的数据在不在另一个表里,应该怎么办
我们有一个藏书表和一个借书表(所有借出的图书),想要输入一个名称或编号,然后显示出来一条记录,希望这个记录后面显示是否可借。这就需要判断这本书的编号是否在借书表的编号里,...
我们有一个藏书表和一个借书表(所有借出的图书),想要输入一个名称或编号,然后显示出来一条记录,希望这个记录后面显示是否可借。这就需要判断这本书的编号是否在借书表的编号里,如果在,就不可借,反之,则可以。请问应该怎么用什么函数和语句进行判断?
展开
展开全部
你可以这样,当用户借书时,先访问藏书表,看有没有这本书,这很简单,用一个编辑框,打入书名,或者用多个下拉列表框,图书一级分类、二级分类等,如小说、外国小说、长篇、书名,逐层选择。当选择到书名时,记下书的编号,用这个编号和书的借阅状态作为where 子句的筛选条件去借书表中查找,如果找到的记录等于0,则可借阅,反之不能借,因为书还没有还。
按照这种解决方法,你的图书必须是每本书有一个唯一的编号,因为作为一个图书馆,不可能同一本书只有一本,比如可能有四本《废都》。因此藏书表的字段应该有一级分类、二级分类、三级分类、书名、书编号、定价、作者等字段。借阅表对书信息就不要这么多了,只要一个书编号就行了,借阅人、借阅日期、还书日期、日租金,还书日期可以为空。
当借书人来借书时,先按一级分类到书编号进行逐层检索,检索到书编号时,下拉列表框中有几本书就有几个编号列表项,比如233,234,235,236等,选择一个书编号时,用一个SQL语句去借书表中检索,如select 书编号 form 借书表 where 书编号 =‘233‘ and 还书日期 is null
如果检索的记录数是1,说明这本书,上个借书人没有还来,这次不能借。再选择编号是234,同样执行这条SQL语句,如果检索到记录数是0,那就可借了,反之再选择下一个编号。。。
如果找到可借的书,就可继续输入借书人姓名(或者借书证号),借书日期、日租金,输入完毕,再用一SQL语句和ADOdataset组件,保存借书信息。还书时,通过借书证号,或者书编号,检索到要找的借书信息,把还书日期填写上,就可以了,表示这本书又可以借了。借书,还书,根本不要删除记录或复制记录到另外的表中。一个图书管理软件,一个是藏书表,另一个是借书表,再一个是会员表,租金收取表,还有一个关键字表,就行了。随便写的,不知你是否看得懂。
按照这种解决方法,你的图书必须是每本书有一个唯一的编号,因为作为一个图书馆,不可能同一本书只有一本,比如可能有四本《废都》。因此藏书表的字段应该有一级分类、二级分类、三级分类、书名、书编号、定价、作者等字段。借阅表对书信息就不要这么多了,只要一个书编号就行了,借阅人、借阅日期、还书日期、日租金,还书日期可以为空。
当借书人来借书时,先按一级分类到书编号进行逐层检索,检索到书编号时,下拉列表框中有几本书就有几个编号列表项,比如233,234,235,236等,选择一个书编号时,用一个SQL语句去借书表中检索,如select 书编号 form 借书表 where 书编号 =‘233‘ and 还书日期 is null
如果检索的记录数是1,说明这本书,上个借书人没有还来,这次不能借。再选择编号是234,同样执行这条SQL语句,如果检索到记录数是0,那就可借了,反之再选择下一个编号。。。
如果找到可借的书,就可继续输入借书人姓名(或者借书证号),借书日期、日租金,输入完毕,再用一SQL语句和ADOdataset组件,保存借书信息。还书时,通过借书证号,或者书编号,检索到要找的借书信息,把还书日期填写上,就可以了,表示这本书又可以借了。借书,还书,根本不要删除记录或复制记录到另外的表中。一个图书管理软件,一个是藏书表,另一个是借书表,再一个是会员表,租金收取表,还有一个关键字表,就行了。随便写的,不知你是否看得懂。
追问
你说的这个我不是太明白。我的意思是,我们还有一个表叫做是否可借表,里面包括所有书籍编号和是否可借两个字段,我们每借一本书,就会使关于这本书的借阅记录添加到借阅表里,然后就需要是否可借表中的是否可借字段的值发生改变,请问这个应该怎么办?
追答
建议不要“是否可借表”,只用借书表就行了。借书表的字段可以这样设置:id,书籍编号,借书证号,借书日期,协议日租金,还书日期。每次借书人借书时,就用一个SQL语句去检索借书表,如果所借书编号出现在借书表中,且还书日期为空,也就是没有还,这本书就不能借。这很简单,代码写起来也不复杂。
但是,你硬要舍方求园,你说的实际是要创建一个触发器,当在借书表登记某个书号时,就去触发某个存储过程,自动的更改可否借书表中的某个字段值,使其变为不可借状态。这个搞法,实际上是把简单的问题搞复杂。我们姑且不论ACCESS是否支持触发器(ACCESS2000肯定不支持持,其它版本我没有用),写触发器也要费心思。触发器实际上也是一个存储过程,而存储过程只是在网络上使用才有意义,因为存储过程在服务器端,而存储过程实际上也就是一个查询,对于你提出的问题来说,就是一个更新查询,而存储过程的意义是调用时,只向服务端发送一个存储过程的名称就行了,而存储过程的细节本身就在服务器端(它的细节实质上就是一条SQL语句)。如果,你的程序是单机运行版本,根本就不需要使用存储过程(没有意义),当然,如果你是为了学习,倒是有意义的。我不知道你使用ACCESS是否支持存储过程或者触发器。如果支持的话,在它的联机帮助肯定会有介绍。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询