如何让delphi数据库不添加重复的记录?

下面的代码为我添加一条新记录的添加按钮,同一天的记录可以一直添加;我要让数据库里一天只存在一条记录,如果这天的记录已经存在了就不能再添加了。只能修改这条记录.要如何实现语... 下面的代码为我添加一条新记录的添加按钮, 同一天的记录可以一 直添加;
我要让数据库里一天只存在一条记录,如果这天的记录已经存在了就不能再添加了。只能修改这条记录.
要如何实现语句?下面是我 添加按钮的代码;

修改按钮代码
展开
 我来答
darlingks
推荐于2016-07-26 · TA获得超过222个赞
知道小有建树答主
回答量:638
采纳率:75%
帮助的人:175万
展开全部

要实现这个我现在想到的有2种方法:

  1. 通过delphi控制

  2. 通过sqlserver控制

下面一个一个说:

1: 在插入之前首先查询, 查询当天的记录, 如果存在则退出过程[或者询问用户是否修改]

With DataModule.Select_inf do begin
  Close;
  slq.Clrea;
  sql.add('Select * from tb1 where CONVERT(nvarchar(10), date_type_field, ');
  sql.add('120) = CONVERT(nvarchar(10), getdate(), 120)');
  //当然这里的条件按具体情况写
  open;
  If Not Isempty then begin
    Application.messagebox('存在当天记录, 是否修改?', '提示', MB_YESNO) = ID_NO then Exit;
    //这里写如果用户按了是, 那么进行修改   插入一段begin..end;
  end;
end;

2:通过数据库触发器控制

If OBJECT_ID('TR_STOP_INSERT_ON_TODAY') Is Not NULL  --触发器名称
   DROP TRIGGER TR_STOP_INSERT_ON_TODAY
   GO
   
CREATE TRIGGER TR_STOP_INSERT_ON_TODAY 
ON TB1
FOR INSERT
WITH ENCRYPTION
AS
DECLARE @i_REC int
--获取插入之后的当天记录条数 存入@i_REC int, 大于1则报错, 并阻止插入

SELECT @i_REC = COUNT(*) FROM TB1   WHERE CONVERT(nvarchar(10), date_type_field, 120) = CONVERT(nvarchar(10), GETDATE(), 120) 
GROUP BY CONVERT(nvarchar(10), date_type_field, 120)
If @i_REC > 1
begin
  raiserror('存在当天记录, 请勿插入重复记录[已阻止]', 16, 1)
  rollback tran
end

 

纯手打望采纳!

众口说车
2013-07-12 · TA获得超过2323个赞
知道大有可为答主
回答量:3503
采纳率:50%
帮助的人:1498万
展开全部
再开一个TABLE 或QUERY
把当前日期做为参数查询,如果查询结果>1就禁止增加,改为搜索定位再编辑。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式