【发布时间】:2013-10-26 16:00:06
【问题描述】:
我正在制作一个具有注册页面并将数据保存到数据库的程序。我正在尝试验证用户名,这样就不会有人使用相同的用户名。用户名也是我数据库中的主键。当我单击提交按钮时,程序要么冻结,要么给我以下信息错误消息:“带有消息的异常类 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;
【问题讨论】:
-
移动 tblUserInfo.First;在此之前,重新考虑您的策略
-
如前所述,
First语句需要在循环之前执行,否则数据集游标会在每次迭代时一直返回到第一条记录。另外,为什么不做一个简单的查询select * from users where username = [username]? -
如果我这样做,它会在 while NOT 行上给我一个错误。错误是“未声明的标识符:'tblUserInfo'”和同一行代码上的另一个错误说“'DO'预期但找到标识符“EOF””
-
"给我一个错误" 可能是因为您已将 tblUserinfo.First 移到“with dmPredictGame ...”块之外。顺便说一句,避免像瘟疫这样的“with ...”结构。
-
如果用户名是主键,为什么不尝试在事务中使用它呢?如果失败,事务将被回滚,您将知道用户名已被占用。
标签: database delphi validation