各位大哥
我用ado+access2000
在一个demo的access2000数据库中有一张表:country
有四个字段:name,capital,contient,area
我在form1上放了四个edit,用于录入新的数据,代码如下:procedure TForm1.Button1Click(Sender:TObject);
begin
with adoTable1 do
begin
Insert;
 FieldByName('Name').AsString:=Edit1.Text;            //国家名称
 FieldByName('Capital').AsString:=Edit2.Text;         //首都
 FieldByName('Continent').AsString:=Edit3.Text;       //所在洲
 FieldByName('Area').AsInteger:=StrToInt(Edit4.Text); //面积
Post;
Refresh;
end;
end;但是由于name是关键字,我在录入的时侯,怎么确保name字段不重复?要对edit1.text进行怎样的操作?
谢谢

解决方案 »

  1.   

    设置关键字就不能重复了,如果新记录重复,在提交之前就会出错。你只要捕获这个异常就可以了。with adoTable1 do
    begin
    Insert;
     FieldByName('Name').AsString:=Edit1.Text;            //国家名称
     FieldByName('Capital').AsString:=Edit2.Text;         //首都
     FieldByName('Continent').AsString:=Edit3.Text;       //所在洲
     FieldByName('Area').AsInteger:=StrToInt(Edit4.Text); //面积
    try
      Post;
    except
      ShowMessage("重复");
    end;
    Refresh;
    end;
      

  2.   

    nod楼上
    或者
    with adoTable1 do
    begin
    First;
    while not EOF do
    if FieldByName('Name').AsString=Edit1.Text then showmessage('有了');
      else Next;
    end;
      

  3.   

    hch_45:我按照你的程序写,但是输相同的name时还是出错。 firetoucher(风焱):你的程序执行起来死循环。
      

  4.   

    if FieldByName('Name').AsString=Edit1.Text then 
    begin
      showmessage('有了');
      exit;//加这个或者break跳出循环,我只是一个例子,你应该在这里自己写你想要的效果和处理
    end
      else Next;
    end;
      

  5.   

    你最好放在edit1的exit事件里来查询name是否重复,如重复Edit1.text:='';edit1.setfocus;
      

  6.   

    with adoTable1 do
    begin
    First;
    while not EOF do
    begin
    if FieldByName('Name').AsString=Edit1.Text then
    begin 
      showmessage('有了');
    end;
      Next;
    end;
    end
      

  7.   

    在adodataset的onbeforpost事件中判断是否已经有该名字,如有放弃保存
      

  8.   

    这个name我在表中已设为关键字,输相同的名字会出错。但我按照大家的意思加了:
    try
    post
    except
    showmessage('error').
    end
    结果提示error后又发生相同的出错。
    怎么办?救救我!究竟用那种方法好?
      

  9.   

    那是因为你只看在编辑环境的ERROR了,运行一下可执行文件吧。
      

  10.   

    我遇到了你一样的问题:我查过所有的贴子,找到了解决的办法:
    1。在Tools->Debugger Options菜单下,选择Language Exceptions页面,将Stop on Delphi
    Exceptions选项去掉就行了 
    2。不要在DELPHI环境下运行,也就是直接执行可执行文件,那样就会提示你的异常信息
      

  11.   

    很简单  先用SQL过滤 
    提交前:
    adoTable2.close;
    adoTable2.sql.clear;
    adoTable2.add('select * from table where name='''+edit1.text+'''');
    adoTable2.open;
    if (adoTable2.recordcount<>0) then
    showmessage('已经有这个名字了!')
    else
    adoquery1.insert;
    ............
    就是用另外一个数据集来检测即将提交的记录是否存在
      

  12.   

    with ADOQuery1 do
        begin
         close;
         sql.clear;
         sql.add('select * from country ');
         open;
         if  FieldByName('name').value:=trim(edit1.text) then
         begin
          ShowMessage('数据库中已存在');
         end;    end;
      

  13.   

    如果在DELPHI环境下,出现异常,按F9,继续运行程序,就会运行到你程序内的异常捕获了。
      

  14.   

    不对吧,用locat,检查返回true表示已经存在,false就是没有,不是很省吗?
      

  15.   

    其它的方法也可以,同意用异常处理
    with adoTable1 do
    begin
    Insert;
     FieldByName('Name').AsString:=Edit1.Text;            //国家名称
     FieldByName('Capital').AsString:=Edit2.Text;         //首都
     FieldByName('Continent').AsString:=Edit3.Text;       //所在洲
     FieldByName('Area').AsInteger:=StrToInt(Edit4.Text); //面积
    try
      Post;
    except
      ShowMessage("名称重复,请重新输入!");
      Edit1.clear;
      edit1.SetFocus;
      exit;
    end;
    Refresh;
    end;
      

  16.   

    jpyc(九品御厨) 是比遍历要好多了,不过还是异常最好啦,楼主,你需要在脱离DELPHI运行环境下运行你的可执行文件,那样才会出现你的异常信息
      

  17.   

    用异常的话有时不能指明错误的原因,因为数据不合法也不能保存.jpyc(九品御厨)的方法较好我也是这样处理的.
      

  18.   

    你可以在EDIT控件的ONEXIT事件中添加查询代码,查找看是否有重复记录!
      

  19.   

    用SELECT COUNT(*) AS THESAMENAME FROM TABLE1 WHERE NAME=:MYNAME
    如果有相同的THESAMENAME会大于0,若没有则可以插入了
      

  20.   

    我用suuare(督察的方法:
    adoTable2.close;
    adoTable2.sql.clear;
    adoTable2.add('select * from table where name='''+edit1.text+'''');
    adoTable2.open;
    if (adoTable2.recordcount<>0) then
    showmessage('已经有这个名字了!')
    else
    adoquery1.insert;
    ............
    就是用另外一个数据集来检测即将提交的记录是否存在但是用adotbale2.recordcount<>0检测好呢?
    还是用:
    first
    if not eof() then 来检测好?