在10秒钟内有两条记录相同则DELETE第二条啊,
这个难道很复杂吗?

解决方案 »

  1.   

    先把你的唯一索引取消,然后
    数据库里用一个Trigger
    以下是SqlServer的Example
    (如果是SqlServer2000或Oracle就不必取消唯一索引,直接用Before的Trigger)Create Trigger Prevent_Multi_RegisterCard
    on TBCard
    for Insert (Instead of Insert/Sql2k) (Before Insert/Oracle)
    as
       IF (Select Count(*) From TBCard Inner Join Inserted
              on TBCard.CardID = Inserted.CardID
              and TBCard.RegisterTime = Inserted.RegisterTime) >1 
       Rollback Transaction
    go
      

  2.   

    先建一全局变量
    Var
      CanInput:boolean=True;
    在输入处
      if CanInput then
      begin
        Try
          dosomethingyourself;
        Finally
          CanInput:=False;
          Timer1.Enabled:=True;
        End;
      ...procedure TMainForm.Timer1Timer(Sender: TObject);
    begin
      CanInput:=True;
      Timer1.Enabled:=False;
    end;其中Timer1.Interval:=30000;//30秒
      

  3.   

    li_zhifu(东北人):你的代码意思是什么?
      

  4.   

    li_zhifu(东北人)代码的意思就是两条记录的时间差不能小于30秒,这种方法当然可行但并不可取,那就是30秒之内第二个人就不能刷卡。其实,你可登记最后一条刷卡记录的卡号和时间,当下一次刷卡时判断当前记录的卡号和时间是否跟最后一条记录相同若相同则放弃新增操作。
      

  5.   

    不要用dbEdit之类输入数据,那样会直接
    改变库内容,除非你在beforePost做判断
    一般你可以先用edit输入,判断后再写入库中
    这样难度不太高,容易做
      

  6.   

    先建一全局变量
    Var
      CanInput:boolean=True;
      lastinputID:YourType;//和任意一个记录中的一个唯一标识类型相同
    //在输入处
    //假设newID即为上述唯一标识的值
      if (CanInput) or (lastinputID<>newID) then
      begin
        Try
          dosomethingyourself;
        Finally
          lastinputID=newID;
          CanInput:=False;
          Timer1.Enabled:=True;
        End;
      ...procedure TMainForm.Timer1Timer(Sender: TObject);
    begin
      CanInput:=True;
      Timer1.Enabled:=False;
    end;其中Timer1.Interval:=30000;//30秒 
      

  7.   

    ...
    if (最后卡号 <>当前卡号) or (最后时间 <> 当前时间) then
    begin
        <新增记录>
        最后卡号 := 当前卡号;
        最后时间 := 当前时间 ;
    end ;
    ...