Database 登录显示错误消息
我需要我的程序让用户从数据库登录。这需要一个潜水员号码(比如用户名)和一个已经存在于数据库中的密码。不幸的是,我现在不懂SQL,宁愿使用与我在这里所做的类似的技术。我在运行时收到一条错误消息,上面说:adotblDiversInfo:无法在关闭的数据集上执行此操作。非常感谢您事先的帮助(: 这是我的代码:Database 登录显示错误消息,database,delphi,login,filter,Database,Delphi,Login,Filter,我需要我的程序让用户从数据库登录。这需要一个潜水员号码(比如用户名)和一个已经存在于数据库中的密码。不幸的是,我现在不懂SQL,宁愿使用与我在这里所做的类似的技术。我在运行时收到一条错误消息,上面说:adotblDiversInfo:无法在关闭的数据集上执行此操作。非常感谢您事先的帮助(: 这是我的代码: procedure TfrmHomeScreen.btnLogInClick(Sender: TObject); var iDiverNumber : Integer; sPasswo
procedure TfrmHomeScreen.btnLogInClick(Sender: TObject);
var
iDiverNumber : Integer;
sPassword, sKnownPassword : String;
bFlagDiverNumber, bFlagPassword, Result : Boolean;
begin
iDiverNumber := StrToInt(ledDiverNumber.Text);
sPassword := ledPassword.Text;
with frmDM do
adotblDiversInfo.Filtered := False;
frmDM.adotblDiversInfo.Filter := 'Diver Number' + IntToStr(iDiverNumber);
frmDM.adotblDiversInfo.Filtered := True;
if frmDM.adotblDiversInfo.RecordCount = 0 then
ShowMessage(IntToStr(iDiverNumber) + ' cannot be found')
else
begin
sKnownPassword := frmDM.adotblDiversInfo['Password'];
if sKnownPassword = sPassword then
ShowMessage('Login successful')
else
ShowMessage('Incorrect password. Please try again');
end;
end;
您遇到的错误是因为您在尝试访问数据集之前忘记打开该数据集。请在尝试使用该表之前使用
frmDM.adotbdiversinfo.open;
或frmDM.adotbdiversinfo.Active:=True;
执行此操作
如果稍加修改,您的代码可能会更简单(更快)。与其过滤整个数据集,只需查看您是否可以找到相应的记录
procedure TfrmHomeScreen.btnLogInClick(Sender: TObject);
var
iDiverNumber : Integer;
begin
if not frmDM.adoTblDiversInfo.Active then
frmDM.adoTblDiversInfo.Open;
iDiverNumber := StrToInt(ledDiverNumber.Text);
sPassword := ledPassword.Text;
if frmDM.adoTblDiversInfo.Locate('Diver Number', iDiverNumber, []) the
begin
if frmDM.adoTblDiversInfo['Password'] = ledPassword.Text then
ShowMessage('Login successful')
else
ShowMessage('Invalid password. Please try again.');
end
else
ShowMessage(ledDiverNumber.Text);
end;
您的问题与SQL无关。错误消息的意思是,您试图对一个数据集执行的操作在您打开该数据集(数据集)之前是无效的。您应该在q中提到错误发生在哪一行,这样读者就不必猜测了。顺便说一句,避免使用“with”就像瘟疫一样。另外,您不应该声明名为Result
的变量。即使它不是关键字,但它对函数有特殊用途。在过程中声明自己的变量可能会造成混乱。另外:您使用的是纯文本密码吗?!谢谢大家的回复(:Craig,我甚至不知道为什么会有结果。错误发生在运行时而不是设计时,因此我不完全确定如何提及哪一行,MartynA。是的,我使用的是纯文本密码,birger。啊,好的,听起来你的项目好像没有打开调试信息编译器选项,否则当出现异常时s、 IDE会把你带到你的项目中的确切行,在那里是有。如何打开它们与Delphi版本有点不同,所以最好在OLH中查找。一旦你有了,在点击处理程序的第一行上放置一个断点,然后在bp跳闸时使用F8单步执行。非常感谢你!这非常有用helpful@kelly字体我意识到他的答案是你的第一个答案,但这是一个好主意,通过点击勾号图标,养成像Ken的答案一样接受有用答案的习惯。接受答案会增加你自己的代表性以及答案的代表性,从而帮助你清除一些限制,从而强制新用户可以做什么。