SQL Se关联rver外键约束及
我用C++ Builder+SQL Server编一个图书管理程序,有两个问题想请教一下:
1、我在“图书借出表”定义了一个外键:表中的“借出图书编号”值必须在“图书明细表”的“图书明细表”的“图书编号”字段中存在。代码如下:
alter table 图书借出表
add constraint fk
foreign key (借出图书编号)
references 图书明细表 (图书编号)
存成了一个.sql文件,在“查询分析器”中运行时,可以看到以下提示:
服务器: 消息 547,级别 16,状态 1,行 1
ALTER TABLE statement conflicted with COLUMN FOREIGN KEY constraint 'fk'. The conflict occurred in database '图书管理系统', table '图书明细表', column '图书编号'.
说明检查到了错误。
但我在C++ Builder中用以下代码加入记录时:
try
{
DataModule1->ADOTable2->InsertRecord(ARRAYOFCONST((Edit2->Text,Edit1->Text,"","")));
}
catch(...)
{
Application->MessageBox("图书编号不存在!","输入错误",MB_OK);
return;
}
此约束好像没有生效,“图书明细表”的“图书编号”不存在的编号也可任意加入,系统不报错。请问是何原因?如何使约束生效?
谢谢!
2、我想定义阅读权限,“读者信息”和“图书明细表”中都有“部门”字段,某个读者登录后只能查阅“图书明细表”中 “部门”值与“读者信息”表中“部门”相等的记录,请问如何实现?谢谢!
[解决办法]
你的sql语句都没执行成功,就证明外键没有正常建立,当然不能生效了。
[解决办法]
你的alter语句不成功没有建立外健约束。