下面的代码是为了防止输入表中一个主码的代码,可以出问题了,
procedure Tform3.Edit1Change(Sender: TObject);
beginadoquery2.Close ;
adoquery2.SQL.Clear ;
adoquery2.SQL.Add('select * from stu where s_id=:a');
adoquery2.Parameters.ParamByName('a').Value:=Trim(edit1.Text);
adoquery2.Open;
if adoquery2.RowsAffected>0 then
 begin
     ShowMessage('书籍已经存在');
     edit1.Clear ;
     edit1.SetFocus;
 end;
end;
问题是if语句好象不起作用,也不会出现‘书籍已经存在'’的对话匡,高手能不能给我看看啊,出什么问题了,是不是ado的RowsAffected这个方法不好啊

解决方案 »

  1.   

    执行更新或者保存的sql语句的时候RowsAffected才有值,获得返回的数据集的记录数用adoquery2.RecordCount
      

  2.   

    to 楼主
    象这类问题还是交给后台数据库来完成你想想,你每次Change都去查询后台数据库的话,那效率是很低的所以只需要将你的表设计好就可以了当你提交的数据违反约束时,数据库会直接返回错误信息。
      

  3.   

    procedure Tform3.Edit1Change(Sender: TObject);
    begin
    if Trim(edit1.Text)<>'' then//最好加个判断来提高效率
    bein//这样效率也不是很好,最好就用Local('s_id',Trim(edit1.Text),[]);如果为真则已经存在
      adoquery2.Close ;
      adoquery2.SQL.Clear ;
      adoquery2.SQL.Add('select count(*) as connum from stu where s_id=:a');
      adoquery2.Parameters.ParamByName('a').Value:=Trim(edit1.Text);
      adoquery2.Open;  if adoquery2.ParamByName('connum').AsInteger>0 then
      begin
        ShowMessage('书籍已经存在');
        edit1.Clear ;
        edit1.SetFocus;
      end;
    end;
    end;
      

  4.   

    表设成主键了就交给数据库来处理
    只是把增加的代码放在try里面try
      //insert 数据
    except
      //失败
    end;
      

  5.   

    procedure Tform3.FormCreate(Sender: TObject);
    begin
      adoquery2.Active := False;
      adoquery2.SQL.Clear ;
      adoquery2.SQL.Add('select * from stu');
      adoquery2.Active := True;
    end;procedure Tform3.Edit1Change(Sender: TObject);
    begin
    if Trim(edit1.Text)<>'' then
    bein
      if adoquery2.Local('s_id',Trim(edit1.Text),[]) then
      begin
        ShowMessage('书籍已经存在');
        edit1.Clear ;
        edit1.SetFocus;
      end;
    end;
    end;//这种方法只能用于当你的数据量不大的时候,
    //因为它要先查询好所有记录,再在记录里找你要的数据,这样更快一点。
    //也因为这样,你的数据发生改变,如插入、删除或修改后要重新Select * 一遍。
    //如果数据量大的话就用你那种方法更好。
      

  6.   

    smiler007(笑一笑) 的方法可行,但等返回错误会有延时,不适合你用在这个问题上。
      

  7.   

    to 楼主
    象这类问题还是交给后台数据库来完成
    你想想,你每次Change都去查询后台数据库的话,那效率是很低的
    所以只需要将你的表设计好就可以了
    当你提交的数据违反约束时,数据库会直接返回错误信息。在数据集的OnPostError根据错误信息来判断.