怎么解决数据表之间修改的问题? (100分)

  • 主题发起人 主题发起人 yuzhizhi
  • 开始时间 开始时间
Y

yuzhizhi

Unregistered / Unconfirmed
GUEST, unregistred user!
我有三个表分别是:借阅.db 图书.db 会员.db
<<会员.db>>中有“姓名”,“会员编号”等字段
<<借阅.db>>中有“姓名”,“会员编号”,“书名”,“书编号”等字段
<<图书.db>>中有“书名”,“书编号”,“数量”等字段
( *比 如 说 我 有 下 面 记 录* )
<*会员.db*>中有 姓 名 会员编号 <*借阅.db*>中有 姓 名 会员编号 书 名 书编号 <*图书.db*>中有 书 名 书编号 数 量
1.小明 9904305 1.小明 9904305 English TV2342 1.English TV2342 3
2.小王 9904306 2.小明 9904305 Sport S2394 2.Sport S2394 2
3.小王 9904306 China C3253 3.China C3253 2
我的问题是:
在选中合适条件的(借阅.db)中,还书时把这个合适条件的(借阅.db)中“记录删除”并且对应的(图书.db)中合适记录中“数量”字段还原即(数量+1);
怎么办? (* 这 个 问 题 我 做 过 但 出 会 出 错 ! *)
谁能帮我?谁能给出一个实例全部分给出!
 
操作前先要所定数据库
 
To: iie
这我知道?我已经锁定了!
但一用到(图书.db)中Query1.Open;//就用错(Cannot modify a read_olny Dataset)
Query1.Edit;
Query1.Post;
这个问题这烦人!耽搁我很长的时间!
最好例举一个作法!分数不成问题!全部给出!
 
要不用locate试试
 
使用存储过程,并使用事务。
 
大家不要这样子吗?
说明一点好吗?
 
Create proc spTT(参数)
As
Begin
Begin Tran
你的删除代码……
if @@Error<> 0
begin
Rollback Tran
Return -1
end
你的还原数据代码……
if @@Error<> 0
begin
Rollback Tran
Return -1
end

Commit Tran
End
 
如果两个表已经做了关联,操作删除前先把关联解除
 
其实没必要每次增减图书.db的数量
可以
借时
借阅.db 加一条记录 数量 -1
还时
借阅.db 加一条记录 数量 +1
查询时
联一下不就OK了

 
我觉得你的处理借阅和还书的方法(或者说设计思路)有些问题:
1:还书不应该将借阅表中的原始借阅记录删除,删除后就无法查询借阅的历史记录;
2:图书的存数不应该是借出就修改此图书的数量-1,还书就修改此图书的数量+1,
这样处理本身就不正确,应该根据借还书记录动态生成图书的存书数量。


我认为你的表结构应修改:
<*会员.db*>中有 姓 名 会员编号 <*借阅.db*>中有 姓 名 会员编号 书 名 书编号 已还 <*图书.db*>中有 书 名 书编号 初始数量
1.小明 9904305 1.小明 9904305 English TV2342 False 1.English TV2342 3
2.小王 9904306 2.小明 9904305 Sport S2394 True 2.Sport S2394 2
3.小王 9904306 China C3253 False 3.China C3253 2
错书时新增一条借阅记录且‘已还’=False;还书时根据查询到的借阅记录,将‘已还’修改为True。
统计时根据‘借阅表’借阅未还和‘图书表’初始数量,用SQL生成统计存书数量。



 
To GZCYP:接受你的意见!
谢 谢!
但我借书时已经把"图书.db"中的数量减1!
但我还书时也应该把"图书.db"中的数量加1!但在加1时出现一个错误!
{Query1.Open;//就用错(Cannot modify a read_olny Dataset)
Query1.Edit;
Query1.Post; } 这个错误真烦人!检察很长的时间!还是没有找出来!这怎么办?
 
用table 做就一切ok了
 
Query1的结果是不能编辑的;你将结果集赋给一临时表再操作也行啊。
或者用LOCATE定位,直接修改图书DB数据集。
 
GZCYP的方法可以借鉴,注意以下几个问题:
1、可否在程序中实现,例如:还书时,查询当前的借阅记录,可以多选,采用一个按钮
执行对选中记录的还书操作,反馈还书的时间和书籍的借阅状态(例如在借/归还)
2、如果你保留借阅记录,可以使用TRIGGER来实现,在借阅状态从在借改为归还时反馈
图书量+1
3、如果你删除借阅记录,可以使用TRIGGER来实现,记录删除时反馈图书量+1

建议保存图书借阅记录,方便以后的查询,以及对图书的借阅情况进行统计分析,统计
各类图书的节约量,为下次购买图书作参考!!!
 
To :jlchong
Trigger是什么?我没有用过!请说一下好吗?
 
要修改Query的结果集是有一定的田间限制的,如只能from一个表,不能有sum,count等。
Trigger是一个触发器,但并不是每种数据库都支持,不知你用的是什么数据库。
 
TO:wgpan
Trigger是用来干什么的?
Paradox类型的数据库
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部