Type
   TRps=packed record
    rpsNa:String;
    rpsId:String;
   end;
   PRps=^TRps;   TAryRps=Array of TRps;//下面声明一个全局的结构体数组var
   Ar:TAryRps;procdure Add(na,id:String);
begin
   setlength(ar,length(ar)+1);
   ar[length(ar)+1].rpsNa:=na;
   ar[length(ar)+1].rpsID:=id;
end;//取数据看看
procedure.....
var
   i:integer;
begin
   for i:=Low(ar) to High(ar) do
      Memo1.Lines.add(ar[i].rpsNa+'>>>'+ar[i].rpsid);
end;结果却只有>>>这个符号输出,无论怎么ADD,都没有将值加进去,是个空值,解释一下为什么?
再有一个是不是声明的结构体共用了一个内存块,也就是我第二次ADD的值会把第一次的值复盖,如果我不想复盖,用结构体数组如何实现,不要跟我说用什么TLIST,之类,哪个简单。
   

解决方案 »

  1.   

      setlength(ar,length(ar)+1);
      ar[High(ar)].rpsNa:=na;
      ar[High(ar)].rpsID:=id;
      

  2.   

    length(ar)+1減少還來不及呢,你還加個1
      

  3.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
      i : integer;
    begin
      setlength(a,length(a)+1);
      a[length(A)-1] := INttostr(high(A));
      showMessage(A[high(A)]);
    end;
      

  4.   

    你的
      setlength(ar,length(ar)+1);   // 当1+1成2时
      ar[length(ar)+1].rpsNa:=na;   // 这里就成了 3 超出了
      ar[length(ar)+1].rpsID:=id; 除上面写的,还可以下面这样写,你就容易明白了procdure Add(na,id:String);
    var
      i: integer;
    begin
      i:= length(ar);
      setlength(ar,i+1);
      ar[i].rpsNa:=na;
      ar[i].rpsID:=id;
    end;
      

  5.   

    procdure Add(na,id:String); 
    begin 
      setlength(ar,length(ar)+1); 
      ar[length(ar)-1].rpsNa:=na; //+1-->-1
      ar[length(ar)-1].rpsID:=id; 
    end; 
      

  6.   

    正确的如下:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, ADODB;type  TRps=packed record
        rpsNa:String;
        rpsId:String;
      end;
      PRps=^TRps;  TAryRps=Array of TRps;  TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;  Ar:TAryRps;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      L: integer;
    begin
      L := length(ar);
      setlength(ar,L+1);
      ar[L].rpsNa:= IntToStr(L) + 'na';
      ar[L].rpsID:= IntToStr(L) + 'id';
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    var
      i:integer;
    begin
      memo1.Lines.Clear;
      for i:=Low(ar) to High(ar) do
          Memo1.Lines.add(ar[i].rpsNa+'>>>'+ar[i].rpsid);
    end;end.