我正在创建一个具有注册页面并将数据保存到数据库的程序。我正在尝试验证用户名,以便不会有相同用户名的用户..用户名也是我数据库中的主键..当我点击提交按钮时,程序要么冻结,要么给我以下内容错误消息:“带有消息的异常类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;
答案 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;