procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn); begin if button=nbInsert then //“+” begin // 查找表,判断重复 end; end;
偶建议还是在数据集的beforpost事件中写,这样做规范!在按钮里写代码比较乱
adoQuery.open('select id from 表 where 字段1=''值1'' and 字段2 = ''值2'''); if adoquery.eof //不重复 else //重复
这个是当前输入的值吗:比如 值1:=dbgrid1.Fields[0].AsString?
我在ADOQuery1BeforePost事件中 判断到重复值,可是当我取消后。值已经写入数据库,是怎么回事?怎么解决呀?程序大致如下: adoquery2.sql.clear; adoquery2.Sql.add('select * from 表1 where name='+QuotedStr(dbgrid1.Fields[0].AsString)); adoquery2.open; if adpquery2.RecordCount>0 then //找到重复值 begin ADOQuery1.Edit; ADOQuery1.Cancel; //取消post到数据库 showmessage('记录已存在!'); end;
在beforepost事件中重新检索一次数据库,从而进行判断
if adpquery2.RecordCount>0 then //找到重复值 begin showmessage('记录已存在!'); Abort; end;
if button=nbpost then //“+” begin // 查找表,判断重复 ADOQuery1.Cancel; //取消post到数据库 end;
begin
if button=nbInsert then //“+”
begin
// 查找表,判断重复
end;
end;
if adoquery.eof
//不重复
else
//重复
值1:=dbgrid1.Fields[0].AsString?
adoquery2.sql.clear;
adoquery2.Sql.add('select * from 表1 where name='+QuotedStr(dbgrid1.Fields[0].AsString));
adoquery2.open;
if adpquery2.RecordCount>0 then //找到重复值
begin
ADOQuery1.Edit;
ADOQuery1.Cancel; //取消post到数据库
showmessage('记录已存在!');
end;
begin
showmessage('记录已存在!');
Abort;
end;
begin
// 查找表,判断重复
ADOQuery1.Cancel; //取消post到数据库
end;