怎么实现编辑框输入的值与表里的值不重复,要是重复就跳出提示信息!~~~ ( 积分: 100 )

  • 主题发起人 主题发起人 只你
  • 开始时间 开始时间

只你

Unregistered / Unconfirmed
GUEST, unregistred user!
就是增加一条记录,但是在赋予某个字段值的时候不能跟表里的相对应的字段里的值相同,相同就跳出提示信息框!
 
恩,可以在输入的时候每次去表里查,不过影响效率,所以最好是第一次查出来放入一个比如TSTRINGLIST里,然后通过它的INDEXOF,每合法输入再ADD到里面,
 
那里在保存之前首先去查一下有没有该值,如果有则跳出提示信息框
 
if DataModule1.XLJH_scjh.Locate('cInvCode;Dep_id;yuefen',VarArrayOf([trim(CB_invCode),trim(str_depid),trim(ComboBox2.Text)]),[loCaseInsensitive]) then
showmessage('数据重复!');
希望对你有帮助。
 
在编辑框的OnExit事件中添加查询语句进行判断,若存在重复值则提示并将焦点置回该编辑框中,如:
procedure TForm1.EditExit(Sender: TObject);
begin
if (Sender as TEdit).Text = '' then Exit;
ADOQuery.Close;
ADOQuery.SQL.Text := 'Select * From table Where aa = ' + QuotedStr(Sender as TEdit).Text);
ADOQuery.Open;
if ADOQuery.IsEmpty then Exit;
ShowMessage('存在重复值');
(Sender as TEdit).SetFocus;
end;
 
to lizhenhe
如果编辑框用DBEdit要怎么实现!
 
DBEdit也有一OnExit事件,也可以使用上述的思路控制,在代码中只需将TEdit改成TDBEdit就行了。其实,如果是DB控件的话,还可以使用数据集的OnBeforePost事件进行判断的。
一、在OnExit事件
procedure TForm1.DBEditExit(Sender: TObject);
begin
if (Sender as TDBEdit).Text = '' then Exit;
ADOQuery.Close;
ADOQuery.SQL.Text := 'Select * From table Where aa = ' + QuotedStr((Sender as TDBEdit).Text);
ADOQuery.Open;
if ADOQuery.IsEmpty then Exit;
ShowMessage('存在重复值');
(Sender as TDBEdit).SetFocus;
end;

二、在数据集的OnBeforePost事件
该事件是在保存数据前调用的,若发现已存在重复值,就可终止操作
procedure TForm1.QueryBeforePost(DataSet: TDataSet);
begin
ADOQuery.Close;
ADOQuery.SQL.Text := 'Select * From table Where aa = ' + QuotedStr((Sender as TDBEdit).Text);
ADOQuery.Open;
if not ADOQuery.IsEmpty then
begin
ShowMessage('存在重复值');
(Sender as TDBEdit).SetFocus;
Abort; // 终止操作
end;
end;
 
直接建索引,不让其重复.再建一触发器.
 
to lizhenhe
Abort 这个函数要怎么定义啊,我是用access库的。
 
Abort是不用定义的。。直截可以用!如果是SQL数据库,你也可以在表上写一个约束。不允许出现重复值
 
谢谢各位!我发分了!
 
多人接受答案了。
 

Similar threads

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