为什么我的TListview省略了第一条记录

时间:2017-08-27 15:18:41

标签: android delphi sqlite delphi-10.2-tokyo

以下代码工作正常,但不知道为什么它省略了第一条记录。但是,如果删除此行ListViewMain.Items.Clear;在第二次调用时,它正确显示所有记录。我正在使用SQLite。

procedure TFMain.BtnUpCommingClick(Sender: TObject);
var t: string   ;
ListItem: TListViewItem;
FullName: TField;
SimNumber: TField;
begin
  ChangeTabAction2.ExecuteTarget(Self);

  t := DateToStr(Tomorrow);

  FDQueryUpComming.SQL.Text:='Select * from TCustomer Where PackageDate = :PackageDate';
  FDQueryUpComming.ParamByName('PackageDate').AsString := t;
  FDQueryUpComming.Open;
  if FDQueryUpComming.RecordCount = 0 then Exit;

  FullName:= FDQueryUpComming.FieldByName('CName');
  SimNumber:= FDQueryUpComming.FieldByName('CSim');
  FDQueryUpComming.First;   // move to the first record
  ListViewMain.Items.Clear;
  ListViewMain.BeginUpdate;
  try
    while(not FDQueryUpComming.Eof)do begin
      ListItem:= ListViewMain.Items.Add;
      ListItem.Text:= FullName.AsString;
      ListItem.Detail:= SimNumber.AsString;
      FDQueryUpComming.Next;
    end;
  finally
    ListViewMain.EndUpdate;
  end;
end;

1 个答案:

答案 0 :(得分:-2)

您的代码中似乎没有错误,但是添加到listview或表中是否存在问题?

您是否在Windows和Android上或仅针对Android测试时遇到同样的问题?

请尝试以下代码:

procedure TFMain.BtnUpCommingClick(Sender: TObject);
var t: string   ;
ListItem: TListViewItem;
FullName: TField;
SimNumber: TField;
begin
  ChangeTabAction2.ExecuteTarget(Self);

  t := DateToStr(Tomorrow);

  FDQueryUpComming.SQL.Text:='Select * from TCustomer Where PackageDate = :PackageDate';
  FDQueryUpComming.ParamByName('PackageDate').AsString := t;
  FDQueryUpComming.Open;
  if FDQueryUpComming.RecordCount = 0 then Exit;

  ListViewMain.BeginUpdate;
  ListViewMain.Items.Clear;
  try
    FDQueryUpComming.First;   // move to the first record
    repeat
      ListItem:= ListViewMain.Items.Add;
      ListItem.Text:= FDQueryUpComming.FieldByName('CName').AsString;
      ListItem.Detail:= FDQueryUpComming.FieldByName('CSim').AsString;
      FDQueryUpComming.Next;
    until FDQueryUpComming.Eof;
  finally
    ListViewMain.EndUpdate;
  end;
end;

在“repeat”之后的第一行添加一个断点,并检查问题是来自数据库/ Firedac还是ListView组件。