如何让数据库无法输入重复的纪录(100分)

  • 主题发起人 主题发起人 jihlz
  • 开始时间 开始时间
J

jihlz

Unregistered / Unconfirmed
GUEST, unregistred user!
如何让数据库无法输入重复的纪录,比如学生名可以重复,但学号不能重复(表中已经设置了关键字,用前台程序实现)。
 
笨办法:输入前先找一遍有无重复的。用SQL语句。
 
先把學生表中的信息查詢出來放在一個數據集中,在輸入學生姓名的時候,進行核對,如果重復則顯示提示信息.
 
1:可以设置主键,这个你应该会吧primary
2:可使用Sql语句,在录入时先进行查找。
 
建立一个触发器,每次向表格插入数据时就触发来检验是否已有该纪录,我想这样可能会好一些吧。
 
按学号排序,之后循环 n-1 次,
取学号,如果重复就删除。
 
最好设置成主健
 
把学好设为主键,插入数据如果重复则会报错,这好办,用
try
//插入,并且已经检测保证了插入时没有别的错误
except
showmessage('学号重复');
end;
 
在前台,可以这样
根据学号locate一下,看看当前纪录的学号是否等于要插入的学号
 
我都是先查一遍
不知有没有更好的办法
 
如果数据量大,每次都要先检查一遍,必然影响速度,有没有更好的方法?
 
为了不影响速度,可以考虑采用触发器来解决呀。
我测试了一下,象一个含有10000条记录的数据库几乎象没有执行一样呀,
强力推荐!!
 
你用的是什么数据库?
 
你可以利用table的PostError属性
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

const
eKeyViol = 9729;
implementation

{$R *.DFM}

procedure TForm1.Query1PostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
if (E is EDBEngineError) then
if (E as EDBEngineError).Errors
[0].Errorcode = eKeyViol then
begin
MessageDlg('出现重复记录!',
mtWarning, [mbOK], 0);
query1.Cancel;
Abort;
end;
end;
 
1、设置主健
2、查询有无重复
select * from table1 where name='张三' and num='0001'
if not rs.eof
.....
 
我认为 try 插入 except end ,捕捉错误是 最好最方便的方法。
 
query1.sql.Clear;
query1.Sql.Add(select * from table1 where name='姓名' and num='学号');
query1.open;
if not query1.IsEmpty then
 
在PostError事件中捕获一下不就可以了
 
将cds的数据赋给一个临时的cds(将其data赋值即可),然后在临时的cds中查找
分两种情况,一种是插入一种是编辑状态。
 
再狮子王的回答前加入 事务处理
 

Similar threads

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