怎样避免用户录入完全重复的记录?(300分)

  • 主题发起人 主题发起人 wjs
  • 开始时间 开始时间
W

wjs

Unregistered / Unconfirmed
GUEST, unregistred user!
1 用 query + updatesql + dbgrid 的情况
2 用 query + requestlive=true + dbgrid 的情况
3 不用bde默认的信息,换成自己的提示信息
 
小生认为,
>>避免用户录入完全重复的记录
应该靠数据库本身来完成,如 在数据库里定义主键
当用户录入完全重复的记录时触发异常
然后try ,再把异常的提示(E.Message)转化为中文
 
详细一点
 
我也认为这些功能应该有数据库来完成,否则,用手工代码那就效率太低。
 
我的做法是先判断数据是否输入合法,如果合法再用一个try...except
语句,如果出错就可以断定主键冲突,这样做程序写起来简单.
不过也可以先查询有没有一样的记录再post
 
各位,能按我上面的要求发给我一个例子吗? 这可是300$呀!
 
要能按我上面的要求发给我一个例子
如果嫌少还可再加!
 
我看还是提交之前先到数据库中查一下, 看是否存在,如存在就定位在此记录上。
。。。
 
为你的表定义主键。
现在的数据库系统一般都支持 ID 型字段,具有自动增量的特征,把这个字段
定义为 Primary Key 就可以了。
如果自己有一个主键,比如学生表可以用学号做主键。
在程序里面:
try
Query1.ApplyUpdates;
except
ShowMessage('...');
end;

From: BaKuBaKu
 
Email :wangjingshan@wx88.net
 
上面的对吗?已发给你了。
 
同意::lha
 
首先应定义一个主键,然后在table的onPostError事件中进行控制
const
{Declare constants we're interested in}
//违反主键
eKeyViol = 9729;
//某字段需要有值
eRequiredFieldMissing = 9732;
//主记录丢失
eForeignKey = 9733;
//由于有明细记录,无法删除或修改主记录
eDetailsExist = 9734;
procedure TData.tablePostError(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);
abort
end;
end;
 
看一下Delphi自带的Demo
 
form1.table1.indexfieldnames:='姓名';
form1.table1.setkey;
{设置数据库为搜索状态}
form1.table1.fieldbyname('姓名').asstring:=edit1.text;
{设置输入的编号 字段内容为搜索的标准}
form1.table1.gotokey;
{移动到搜寻的记录上,完成搜索}
if form1.table1.gotokey then
{如果找到搜索的记录,则gotokey返回true}
begin
showmessage('这个姓名已经有了,'+#13+'请改名!');
abort;
{终止该操作}
end;
如果还不清楚请来电:ljbxs@21cn.com
 

Similar threads

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