2

我正在制作一个具有注册页面并将数据保存到数据库的程序。我正在尝试验证用户名,这样就不会有人使用相同的用户名。用户名也是我数据库中的主键。当我单击提交按钮时,程序要么冻结,要么给我以下信息错误消息:“带有消息的异常类 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;
4

1 回答 1

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;
于 2013-10-26T17:09:28.287 回答