我正在构建此函数,它将返回查询是否返回ID。我是Delphi的新手,我收到了错误
可能无法初始化变量emailExistsId。
我的代码:
function emailExists (const APersonId: TStandardPK) : Boolean ;
var
Email : TPhoneEmail;
emailExistsId: TStandardPK;
begin
Email := TPhoneEmail.Create(nil);
try
emailExistsId := Email.qrySelect.FieldByName('id').AsFloat;
finally
if emailExistsId <> 0 then
Result := TRUE
else
Result :=False;
end;
end;
答案 0 :(得分:10)
提示是正确的。考虑一下代码:
try
emailExistsId := Email.qrySelect.FieldByName('id').AsFloat;
finally
if emailExistsId <> 0 then
Result := TRUE
else
Result :=False;
end;
如果评估Email.qrySelect.FieldByName('id').AsFloat
会导致异常,则emailExistsId
将不会分配值。然后,您的代码将在未初始化状态下读取emailExistsId
。因此编译器产生提示。当然,这完全没有实际意义,因为异常传播并且调用者在任何情况下都不会收到返回值。
你的代码在任何情况下都太复杂了,而且它泄漏了。它应该是:
function emailExists(const APersonId: TStandardPK): Boolean;
var
Email: TPhoneEmail;
begin
Email := TPhoneEmail.Create(nil);
try
Result := Email.qrySelect.FieldByName('id').AsFloat <> 0;
finally
Email.Free;
end;
end;