... 
 PGetUserRecord=^TGetUserRecord;
  TGetUserRecord=record
    UserStr :string;
    PriNext :PGetUserRecord;
    PriCount :integer;
  end;
  ...
  ADOQuery1.First;
  while not ADOQuery1.Eof do
  begin
    FGetUserRecord.UserStr :=ADOQuery1.fieldbyname('aban8').AsString;//第二次循环时出错     FGetUserRecord.PriCount :=FGetUserRecord.PriCount +1;
    FGetUserRecord :=FGetUserRecord.PriNext;
    ADOQuery1.Next;
  end;

解决方案 »

  1.   

    PGetUserRecord=^TGetUserRecord;
      TGetUserRecord=record
      UserStr :string[255];
      PriNext :PGetUserRecord;
      PriCount :integer;
      end;
      

  2.   

    to: oloveuxyz 我这个循环是海量记录(百万级的)
    to :new这个指针,我当然有了,不然也编译不了啊
      

  3.   


    看不到图片.
    是不是申请内存失败了?ADOQuery1.fieldbyname('aban8').AsString 这个长度多少?FGetUserRecord.UserStr 设个定长的短字符串类型试下.
      

  4.   


    'aban8' 这个字段为15以内的
    定长的短字符串类型是个什么类型,与string有区别么?不能是数组哦
      

  5.   

    FGetUserRecord.UserStr;这个第一次循环到这为'',正常,当FGetUserRecord :=FGetUserRecord.PriNext;后,为第二次循环到这时,FGetUserRecord.UserStr调试状态显示一串看不懂的乱码,然后再step over下去,就崩出系统错误。。
      

  6.   

    FGetUserRecord.UserStr :=ADOQuery1.fieldbyname('aban8').AsString;//第二次循环时出错 FGetUserRecord.PriCount :=FGetUserRecord.PriCount +1;
    //上面是赋值 // 下面重新指定 FGetUserRecord ??
    FGetUserRecord :=FGetUserRecord.PriNext;  
      

  7.   

    记录里的string最好定个长度另外
    while not ADOQuery1.Eof do
    begin
      new();
      ...
    end;
      

  8.   

    PGetUserRecord=^TGetUserRecord;
      TGetUserRecord=record
      UserStr :string[15];
      PriNext :PGetUserRecord;
      PriCount :integer;
      end;
      

  9.   


    加了长度后,FGetUserRecord.PriNext 为nil了,不知为何?
      

  10.   

    如果每次都new()的话,怎么保存结构体的记录啊?
      

  11.   

    你这个是一个链表. 当然也可以直接用一个 TList 去保存.
      

  12.   

    我也相信TStringlist可以做到,但是在数据安全与程序运行效率方面太差了,链表就不一样了,new()动态分配空间,不用了就释放,效率很高;至于安全性有时数据量大导致系统崩溃;所以我不放弃用链表。