在Query Analyzer下运行结果正确,你可以查看每一次query1.Open的结果,
问题可能是你程序结构错误引起的。
根据我的理解,我想是这样的,请试试:
for k:=0 to listbox2.Count-1 do
begin
   table2.Append;
   table2.FieldByName('名称').Value:=listbox2.Items[k];
   for i:=0 to listbox3.count-1 do
   begin
       query1.SQL.Clear;
       query1.SQL.Add('SELECT count(*) as newf from '+tab+' where ('+trim (edit2.Text)+' like '+''' '+'%'+trim(listbox3.Items[i])+'%'+''' '+') and  ('+trim(edit1.Text)+' like '+''' '+'%'+trim(listbox2.Items[k])+'%'+''' '+')');
       query1.Prepare;
       query1.Open;
       table2.Append;
       table2.FieldByName('名称').Value:=listbox2.Items[k];
       table2.FieldByName(listbox3.Items[i]).Value:=query1.Fields.Fields[0].Value;
       table2.Post;
       listbox4.Items.Add(query1.Fields.Fields[0].Value);
   end;   
end;