Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
变量可能未在Delphi函数中初始化_Delphi - Fatal编程技术网

变量可能未在Delphi函数中初始化

变量可能未在Delphi函数中初始化,delphi,Delphi,我正在构建这个函数,它将返回查询是否返回ID。我是德尔福的新手,我发现了这个错误 变量emailExistsId可能未初始化 我的代码: function emailExists (const APersonId: TStandardPK) : Boolean ; var Email : TPhoneEmail; emailExistsId: TStandardPK; begin Email := TPhoneEmail.Create(nil); try emailEx

我正在构建这个函数,它将返回查询是否返回ID。我是德尔福的新手,我发现了这个错误

变量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;
函数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 line
Email.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;