一段代码var
i:integer;
xxx:array of string;
begin
  adoquery1.close;
  adoquery1.sql.clear;
  adoquery1.sql.add('select kcz from car where userid=:a');
  adoquery1.parameters.parmbyname('a').value:=abc;
  adoquery1.open;  setlength(xxx,adoquery1.recordcount);
  i:=0;
  while not adoquery1.eof do
  begin
    xxx[i]:=adoquery1.fieldbyname('kcz').asstring;
    adoquery1.next;
  end;  showmessage(xxx[2]);
end;结果就是xxx[任意数字],都不正确,但是,把showmessage(xxx[i])放入循环内,可以得到正确的数据。

解决方案 »

  1.   

    string类型,是引用赋值,不是拷贝赋值;xxx[index]中存放的是一个地址,而不是字符串本身。在循环中可显示,超出循环再显示,就不正确,可能是因为引用计数为零,它们自动释放了。若真想在xxx[]中存放实际字符串,你应该用Copy函数。
    copy(xxx[i], adoquery1.fieldbyname('kcz').asstring);
      

  2.   

    循环内i没有加1
    所有的值都只放到xxx[0]中了
      

  3.   

    再补充下setlength前,没有检查count =0 的情况query ,结束时没有关闭