在数据库中搜索现有记录问题

时间:2013-10-26 16:00:06

标签: database delphi validation

我正在创建一个具有注册页面并将数据保存到数据库的程序。我正在尝试验证用户名,以便不会有相同用户名的用户..用户名也是我数据库中的主键..当我点击提交按钮时,程序要么冻结,要么给我以下内容错误消息:“带有消息的异常类EOIeException”您向表请求的更改未成功,因为它们将在索引,主键或关系中创建重复值。更改包含重复数据的字段中的数据,删除索引,或重新定义索引以允许重复输入并再次尝试“

我正在使用以下代码来搜索编辑框文本是否出现在数据库中,如果这样做,它应该显示一个消息框..但它会给我如上所述的错误。

with dmPredictGame do
    while NOT tblUserInfo.EOF do
    begin
      tblUserInfo.First;
      if Uppercase(edtUsername.Text) = tblUserInfo['Username'] then
        begin
          MessageDlg('The username "' + edtUsername.Text + '" already exists!', mtError, [mbOK], 0);
          edtusername.SetFocus;
          exit;
        end
      else
        tblUserInfo.Next;
        tblUserInfo.Close
    end;

1 个答案:

答案 0 :(得分:4)

要使用您的方法进行搜索,请务必将First置于循环之外,否则您将继续重新开始,并且永远不会完成:

// Go to the beginning
tblUserInfo.First;
while NOT tblUserInfo.EOF do
begin
  // Set both to upper so they match
  // Use FieldByName (it's not an array)
  if Uppercase(edtUsername.Text) = Uppercase(tblUserInfo.FieldByName('Username').AsString) then
  begin
    MessageDlg('The username "' + edtUsername.Text + '" already exists!', mtError, [mbOK], 0);
    edtUsername.SetFocus;
    Exit;
  end;
  tblUserInfo.Next;
end;

但是,对于搜索,您应该考虑使用Locate

if tblUserInfo.Locate('UserName', edtUserName.Text, [loCaseInsensitive]) then
begin
  // Username exists
end;