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
Tlistview Delphi中最后一行的问题_Listview_Delphi - Fatal编程技术网

Tlistview Delphi中最后一行的问题

Tlistview Delphi中最后一行的问题,listview,delphi,Listview,Delphi,我有一个包含一些数据的ListView,它工作正常,除非我试图从最后一行获取数据,在这种情况下,它会返回随机数据 我有一个函数,在这个函数中,我将对象(类中的对象列表)添加到列表视图,然后再添加一个用于从数据库中删除数据并再次填充列表视图的对象 //这里我填充列表视图 procedure TFrameEinExpression.Fill_Rows; var itm : TFormulaFeatures; i : integer; begin lvModels.Clear; Ei

我有一个包含一些数据的ListView,它工作正常,除非我试图从最后一行获取数据,在这种情况下,它会返回随机数据

我有一个函数,在这个函数中,我将对象(类中的对象列表)添加到列表视图,然后再添加一个用于从数据库中删除数据并再次填充列表视图的对象

//这里我填充列表视图

procedure TFrameEinExpression.Fill_Rows;
var
  itm : TFormulaFeatures;
  i : integer;
begin
  lvModels.Clear;
   EinExpression.LoadFeatureList;

  if (not Assigned(EinExpression)) or (EinExpression.FeatureList.Count = 0)  then
    Exit;
  lvModels.Items.BeginUpdate;

  try
    for i := 0 to EinExpression.FeatureList.Count - 1  do
      with lvModels.Items.Add do
        begin
          itm := TFormulaFeatures(EinExpression.FeatureList.Items[i]);
          Data := TFormulaFeatures(EinExpression.FeatureList.Items[i]);
          Caption := IntToStr(itm.Posicion);
          SubItems.Add(BoolToStr(itm.Presencia, True));
          SubItems.Add(itm.Descripcion);
          SubItems.Add(IntToStr(itm.Idcaract1));
        end;
  finally
    lvModels.Items.EndUpdate;
    if Assigned(itm) then
      itm.Free;
  end;
end;



//Here I perform the action (it works fine except for the last row)


if (Assigned (lvModels.Selected)) and (Assigned (lvModels.Selected.Data)) then

//This already doesn't have anything inside
showmessage('Desc :'+ TFormulaFeatures(lvModels.Selected.Data).Descripcion);

  begin
    BDMultiEP.SQLExecute('DELETE from [EXPRESSION] WHERE (idcaract=:Z) AND 
    (idcaract1=:Y)', [EinExpression.IDCARACT,
     TFormulaFeatures(lvModels.Selected.Data).IDCARACT1]);
  end;


//after this i take the values from the DB to the class and populate the List View again.
LoadFeatureList;
Fill_Rows;

在showmessage(用于测试)中,我有字段描述,但最后一个字段是什么时候,我没有任何信息。

此行
如果已分配(itm),则itm.Free
释放
EinExpression.FeatureList的最后一项

由于
itm
对该对象的生命周期不负责任,这是最后一个列表项中丢失数据的最可能原因


删除该行。

该行看起来可疑:
如果已分配(itm),则itm.Free@LURD:的确如此。应该不需要调用
itm.Free
,因为它不是一个所有者引用。@LURD:可能是错误的原因(itm指向最后一项,如果它被释放-->kaboom!)。请把那个贴出来作为答案。我想知道数据应该做什么。ISTM:没什么。