|
![]() | 作者: f [yifanernei]
![]() |
登录 |
我有两张表,一张表记录状态的信息,状态号为主键 另一张表记录状态转换的信息,现在我要删除一个状态,有什么好办法呢? 我的做法是,在状态转换的表中找出需要删除的(因为它们有联系,是上下层的),把状态号 放在一个数组里,可是删状态信息表里的状态时有点问题,我有什么办法能一次读出数组里 的状态记录吗?总不能一个循环里一个一个的读,一个一个的删吧。 ![]() |
地主 发表时间: 04-12-25 17:53 |
![]() | 回复: kert_t8 [kert_t8] ![]() |
登录 |
ON DELETE CASCADE 建表的时候,使用create语句对吧,在foreign key 状态 references 状态号 on delete cascade 作用是状态号删掉以后,状态转换表当中出现过这个状态号的信息全部被删除 还有一个办法是状态号如果出现在状态转换表中就不允许被删除, on delete 后面是什么东西忘了,自己查一下吧 以上办法Oracle适用,别的不知道 |
B1层 发表时间: 04-12-25 21:31 |
![]() | 回复: kert_t8 [kert_t8] ![]() |
登录 |
上面的话怎么说得不清不楚地,我喝酒了吗? 这个问题不应该使用Host Language来解决,而应该使用所连接的数据库解决。在这里,我假设你的状态变换表(第二张表)里面的状态号是使用状态信息表(第一张表)里的状态号作为外键的,如果没有,把它加上,因为这样才是一个好的设计,而面对一个不好的设计,编程时候你就是感觉很无奈 要申明这个外键应该在建表时使用 foreign key <状态> reference <状态号>。那么,如果需要实现上面的功能,就在这一句后面加上 on delete cascade,这样,一旦第一张表中的状态号被删除,第二张表里面凡是含有这个状态号的所有信息都将被自动删除 //应该是第二张表里面凡是在<状态>这个字段中含有这个状态号的信息将被自动删除 ........ [此贴被 月之御者(kert_t8) 在 12月25日21时51分 编辑过] |
B2层 发表时间: 04-12-25 21:47 |
![]() | 回复: f [yifanernei] ![]() |
登录 |
听你这么一说好象问题都挺好解决了 ![]() 可惜啊,为什么我不早点看看这方面的东西呢? 其实做这个东西的过程我也在学习,数据库的方面也什么都不懂呢,我到是想到外键的问题了 可是我用的Access,我找不到在什么地方加外键 ![]() ![]() ![]() 不管了,反正已经这样了,我最后是这样做的 m_strFilter.Format("state = %d ", DelState[0]); CString filter; for (int n=1; n<j; n++) { filter.Format("or state = %d", DelState[n]); m_strFilter += filter; } 最后再Requery()也不知道到底效率怎么样。 ![]() ![]() ![]() 谢谢阿月!!! ![]() ![]() ![]() ![]() ![]() ![]() 这么做有什么不好,还请大家提出来啊! |
B3层 发表时间: 04-12-26 00:15 |
![]() | 回复: kert_t8 [kert_t8] ![]() |
登录 |
对Access认识不深,不过想来堂堂微软,不会开发出一个数据库软件,连外键都没法用吧?自己好好看看,我以前也用过一段时间,记得好像有 还有,没用过C++做数据库连接,你那个方法我也搞不懂,顶起来找个NB的人帮你看看吧 |
B4层 发表时间: 04-12-27 14:41 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号