以下代码工作正常,但不知道为什么它省略了第一条记录。但是,如果删除此行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;
答案 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组件。