变量可能未在Delphi函数中初始化
我正在构建这个函数,它将返回查询是否返回ID。我是德尔福的新手,我发现了这个错误 变量emailExistsId可能未初始化 我的代码:变量可能未在Delphi函数中初始化,delphi,Delphi,我正在构建这个函数,它将返回查询是否返回ID。我是德尔福的新手,我发现了这个错误 变量emailExistsId可能未初始化 我的代码: function emailExists (const APersonId: TStandardPK) : Boolean ; var Email : TPhoneEmail; emailExistsId: TStandardPK; begin Email := TPhoneEmail.Create(nil); try emailEx
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;
函数emailExists(const APersonId:TStandardPK):布尔;
变量
电邮:TPhoneEmail ;;
emailExistsId:TStandardPK;
开始
Email:=TPhoneEmail.Create(无);
尝试
emailExistsId:=Email.qrySelect.FieldByName('id').AsFloat;
最后
如果emailExistsId为0,则
结果:=真
其他的
结果:=假;
结束;
结束;
提示是正确的。考虑代码:
try
emailExistsId := Email.qrySelect.FieldByName('id').AsFloat;
finally
if emailExistsId <> 0 then
Result := TRUE
else
Result :=False;
end;
谢谢,我很喜欢这个代码:)我会在几分钟内接受它。顺便说一句,我想知道你为什么使用
AsFloat
。在我看来,一个名为id
的东西将是一个浮点值,这似乎很奇怪,因为id是一个浮点值。有一个问题,qryselect中有一个参数,我如何调用同时传递值的查询?好的,很公平!至于与参数有关的问题,这是一个完全不同的问题。我们没有足够的细节来回答这个问题,但在任何情况下,你都不应该在评论中提出新的问题。你写道:“这是因为ID是一个浮点数。”。那可能是个错误的设计。数字ID应该是序号类型,例如整数。@DalijaPrasnikar如果没有分配电子邮件,为什么会出现异常?我的理解是,如果没有分配电子邮件,id
值将为零。虽然有点奇怪,id
被认为是一个浮点数…有浮点数主键很好:)@DavidHeffernan lineEmail.qrySelect.FieldByName('id')。AsFloat
可以引发异常。如果是这样,则try块内对emailExistsId
的赋值将无法完成。@DavidHeffernan,因为OP似乎想要这样做。我并不是说这是好的还是坏的方法,没有更多的背景很难说。我见过很多这样的代码,人们期望得到布尔结果,而他们得到的只是一个他们没有准备好的例外。@kobik,当然我是开玩笑的:)我很欣赏这种情况下的创造力。
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;