if table1.Locate('学号',vararrayof([dbedit1.text]),[lopartialkey])then
begin
showmessage('此学生已存在!');
exit;
end;
当录入学生信息时,如果录入相同学号,则显示提示信息,却不能实现
(表里学号为主键)

解决方案 »

  1.   

    if table1.Locate('学号',dbedit1.text),[lopartialkey])then
    begin
    showmessage('此学生已存在!');
    exit;
    end;
    單字段欄位LOCATE時,好像不用vararrayof().
      

  2.   

    if table1.Locate('学号',dbedit1.text,[])then
      

  3.   

    因为locate 进行的模糊查找,你所给得值只能是一个值而不能是数组。而且他是一你输入的值为索引的
      

  4.   

    把你的这段代码放在table的beforeinsert或beforepost事件里看看.
      

  5.   

    会显示错误信息'stack overflow'
      

  6.   

    你的意思是不是说不能让用户输入相同的学号!
    我是这样做的,供你参考!
    使用一个共用的TAdoQuery 命名为:PubQty 
    在你的Table 中的BeforePost 中写入以下代码:
    if DataSet.State in [dsInsert] then //因为如果用户是修改数据则不用去判断了,只有新增数据才去判断是否有相同的学号
    begin
    //用PubQty去查询是否已存在有相同的学号
      PubQty.Close ;
      PubQty.Sql.Text := 'select 学号 from 学生表 where 学号=:mycode ' ;
      PubQty.Parameters[i].Value := Trim(Edit1.text) ;  
      PubQty.open ;
    if not PubQty.Isemtpy then 
    begin//如果找到相同的学号,则不可新增,
      showmessage('此学号已存在!请重新输入') ;
      Abort ;
      Exit ;
    end ;
    end ;
    你试一试这样可以么?
      

  7.   

    改用其它方法一试,如SetKey..FindKey
    或者用Query查找
      

  8.   

    if table1.Locate('学号',dbedit1.text,[lopartialkey])then
    begin
    showmessage('此学生已存在!');
    exit;
    end;不过dbedit可能不行 因为在你的鼠标离开dbedit后 数据就会被存入数据库中去建议最好将学号设为主键 可以不这样写 只要捕获错误即可!!
      

  9.   

    你是用的ADO +ACCESS吧?
      似乎这里的问题非常多。你的这个问题我也碰到过。
     也搞不懂是怎么解决的。
      

  10.   

    if table1.Locate('学号',dbedit1.text,[lopartialkey])then
    begin
    showmessage('此学生已存在!');
    exit;
    end
    else begin
    你的添加记录语句~~~
    end;