delphi 使用条件执行查询循环

pzfprimi  于 2023-04-20  发布在  其他
关注(0)|答案(1)|浏览(176)

我现在已经把注意力转移到了执行一个条件为if true的查询循环上。我知道我的代码很乱,我甚至不确定我是否做对了。结果是我可以得到第一条记录,但不能得到满足循环条件的其他记录。
以下是我到目前为止所做的:

procedure TAddressListForm.LoadMCListbox();
Var
GetID : Integer;
Begin
GetID := strtoint(ContactUnit.ContactForm.IDLabel.caption);
ALMCListBox.Items.Clear;
ContactForm.RootsDB.Connected := True;
AddListQuery.close;
AddListQuery.SQL.Clear;
AddListQuery.sql.text := 'SELECT * FROM AddAddress WHERE [ContactID] = :CID';
AddListQuery.ParamByName('CID').Value := GetID;
AddListQuery.open;
AddListQuery.first;
while not AddListQuery.eof and AddListQuery.ParamByName('CID').Value = GetID do

begin                 ALMCListbox.items.add(inttostr(AddListQuery.FieldByName('AddID').AsInteger) + ';'
+ inttostr(AddListQuery.fieldbyname('ContactID').asinteger) + ';' + AddListQuery.FieldByName('AddStreet').AsString
+ ' ' + AddListQuery.FieldByName('AddCity').AsString);
next;
AddListQuery.Close;
End;

结束;
很抱歉,如果这真的是基本的,我正在努力理解这一点。
谢谢你

zvokhttg

zvokhttg1#

如果表达式的计算结果为false,则while循环终止。因此,第一个不满足ID条件的记录将终止它。尝试如下操作:

while not AddListQuery.eof do
begin                 
  if AddListQuery.ParamByName('CID').Value = GetID then
  begin
    ALMCListbox.items.add(inttostr(AddListQuery.FieldByName('AddID').AsInteger) + ';'
      + inttostr(AddListQuery.fieldbyname('ContactID').asinteger) + ';' + AddListQuery.FieldByName('AddStreet').AsString
      + ' ' + AddListQuery.FieldByName('AddCity').AsString);
  end;
  AddListQuery.next;  
End;
AddListQuery.Close;

请记住,while循环在执行其内容之前检查条件,并在布尔检查表达式中使用括号以避免不必要的结果,fe:

while (not AddListQuery.eof) and (AddListQuery.ParamByName('CID').Value = GetID) do

相关问题