给100分算了,只要能解决问题!!!!!!!!!!
我在面板上放置了Edit1.Text,Edit2.Text.用来输入数据到数据库中.
其中Edit1.Text用来输入产品编号.Edit2.Text用来输入产品信息.要如何防止Edit1.Text输入同样的编号到数据库中?
例如:Edit1.Text输入的数据在添加到数据库中是,系统提示有重复编号.否则成功将Edit1.Text和Edit2.Text的内容输入到数据库中.谢谢大家提供方法!!!!
大家可以看看我另一张关于这个问题的帖子http://community.csdn.net/Expert/topic/5243/5243825.xml?temp=.5258905

解决方案 »

  1.   

    1.从数据库角度来说,你把EDIT1.TEXT 对应的字段设置为UNIQUE 就应该可以防止重复数据了2.从程序控制角度来说:新增时你可以先到数据库搜索有没有EDTI1.TEXT相同的数据,如果没有再插入数据
      

  2.   

    1.初始化数据,将ID取到TStringList中.
    2.提交前判断,TStingList.IndoxOf(Edit1.Text)<=0 时提交数据,否则提示重复记录.
    3.当提交成功后,TStringList.Add(Edit1.Text),这样就不需要再初始化记录了
      

  3.   

    这种东西最适合写存储过程了 在里边判断select count(*) from t where t.id=@id  , 看看count(*)的结果是什么,如果0就插入 ,〉0就是已经存在
      

  4.   

    declare
      @fcount int,
      @Rst1 int
    begin
      select @fcount=count(*) from t where id='2';
      if @fcount>0 
      begin
        set @Rst1 = 2;
        print @Rst1;
        return;   
      end
      else
      begin
        insert into t values ('2','1');
        set @Rst1 = 1;
        print @Rst1;
        return;
      end;
    end;
    返回2就是已存在 返回1就是成功
      

  5.   

    with Cds1 do
      begin
        Close;
        CommandText:='select * from TableName where 编号='+Trim(Edit1.Text);
        Open;
        if RecordCount > 0 then exit;
        Append;
        FieldByName('列名1').AsString  := Trim(Edit1.Text);
        FieldByName('列名2').AsString := Trim(Edit2.Text);
        ApplyUpdates(-1);
      end;大约应该是这样子
      

  6.   

    with Cds1 do
      begin
        Close;
        CommandText:='select * from TableName where 编号='+Trim(Edit1.Text);
        Open;
        if RecordCount > 0 then exit;
        Append;
        FieldByName('列名1').AsString  := Trim(Edit1.Text);
        FieldByName('列名2').AsString := Trim(Edit2.Text);
        ApplyUpdates(-1);
      end;谢谢大家的提意.我想应该是上面这种形式,如 Edit1.Text用来输入产品编号已经在数据库中,则提示"此编号已有,请重新选择" 否则将数据添加到数据库.
      

  7.   

    with adoquery do
    begin
    close;
    sql.clear;
    sql.add('select * from 表 where 编号='''+Edit1.Text+''');
    open;
    if not eof then
    showmessage('编号已存在')
    else上面这样写的吗?下面怎么写"?
      

  8.   

    with adoquery do
    begin
    close;
    sql.clear;
    sql.add('select * from 表 where 编号='''+Edit1.Text+''');
    open;
    if not eof then
    showmessage('编号已存在')
    else
    begin
    close;
    sql.clear;
    sql.add('insert 表(編號,信息) values('''+Edit1.Text+''','''+Edit2.Text+''')+'''';
    ExecSQL;這樣可以啦
      

  9.   

    sorry,确切說:
    with adoquery do
    begin
    close;
    sql.clear;
    sql.add('select * from 表 where 编号='''+Edit1.Text+''');
    open;
    if not eof then
    showmessage('编号已存在')
    else
    begin
    close;
    sql.clear;
    sql.add('insert into 表(編號,信息) values('''+Edit1.Text+''','''+Edit2.Text+''')'''';
    ExecSQL;
      

  10.   

    楼上的我都没有看,我的作法是,所有唯一的数据,且做为表关键字,且有规律性的编号,单号等我都是采用事务封装完成,有事务里面完成编号工作,这个编号工作可以由sql存储过程完成,我的软件运行了5年了,这部分的业务逻辑都是这样做的,稳定快速
      

  11.   

    或者编号在最后再查询出来,也就是把记录内容都填好了,在post进库时,查询出来再处理,不要一打开编辑界面就显示
      

  12.   

    这种东西最适合写存储过程了   在里边判断select   count(*)   from   t   where   t.id=@id     ,   看看count(*)的结果是什么,如果0就插入   ,〉0就是已经存在
      

  13.   

    寫一個自定義函數,插入數據時調用function Insdata(con:TADOConnection;StrWo,StrLot,StrSn:string;ChBox:Tcheckbox):Boolean;//插入數據
    begin
    if not ChBox.checked then
    begin
      try
        con.BeginTrans;
        con.Execute('insert into Insdata(Sn,Wo,Lot)values('+''''+StrSn+''''+','+''''+StrWo+''''+','+''''+StrLot+''''+')');
        con.CommitTrans;
        Result:=True;
        except
          con.RollbackTrans;
          ShowMessage('數據記錄重復!請確認!!!');//判斷記錄是否重復
          Result:=False;
          end;
          end
          else
          result:=true;
      end;
      

  14.   

    你的问题要分别解答,不同时的数据库,不同的方法。
    对于SQL数据库,只要把字段设为“不重复”即可,对于其它类型的数据库,要分别对待。 
      

  15.   

    create Proc AddGoods(@goodsid nvarchar(50),@goodsinfo nvarchar(50))
    as
    begin
    BEGIN TRAN Add_Goods
    if not exists(select * from t_goods where goodsid=@goodsid)
    begin
    insert into t_goods(goodsid,goodsinfo) values( @goodsid, @goodsinfo)
    select MSB='添加成功'  
    end ELSE
    BEGIN
    select MSB='物品编号已经存在!'
    END
    COMMIT TRAN Add_Goods
    endwith adoqurry1 do
    begin
    close;
    sql.text:=format('exec AddGoods %s,%s',[QuoterStr(edit1.text),QuoterStr(edit2.text)]);
    open;
    showmessage(fieldbyname('MSB').asstring);
    end;
      

  16.   

    这个问题我会呀,不给我分,下次不帮你了编号以“标准名称”+日期,如下
    edit1.text:='CPBH'+FormatDateTime('YYYYMMDDHHMMSS',now);
      

  17.   

    我晕 我跨越了
    ALTER TABLE TUSER ADD UNIQUE (username)SQLSERVER数据库 在通过UI建表是看不到UNIQUE约束的可以创建表后 增加唯一约束来