现手上有个程序,先把数据库里满足一定条件的记录取出来,然后用结构体数组来打包,问题就在这个把字段值放进一个先定义好的结构体数组里面,这个是先定义好的,结构体里的元素是按着数据库里表的字段来定的,而取出来有多少条记录就定义一个有多少元素的动态结构数组, 
   而我想做一个通用的方支或者函数,因为一个表有几十个字段,有十多张表,如果每访问一个结构体里的元素都要一个一个明确在程序里指出,那样代码会很长。可是不知道如何未知的去访问一个结构体里的元素,不像数组可以用一个变量自加的方式来访问,下面跟出代码,大家帮我看看。procedure THJWXPYaYunFrm.BtnPackClick(Sender: TObject);
var i,a,k,col_count,temp_col:Integer;
b:Boolean;
begin
  k:=0;
  for i:=1 to SG1.RowCount-1 do
    begin
      sg1.GetCheckBoxState(1,i,b);
      if b = True then
         inc(k);
    end;
  SetLength(Data_Pack.WXPYZ_Array_Pack,k);
  col_count:=SG1.ColCount;
  ShowMessage(IntToStr(col_count));
  a:=1;
  for i:=0 to k-1 do
    begin
      for temp_col:=3 to col_count do
        begin
          sg1.GetCheckBoxState(1,a,b);
          if b = True then
          Data_Pack.WXPYZ_Array_Pack[i].CC:=SG1.Cells[temp_col,a]; 
          Inc(a);
        end;
    end;
    ShowMessage('ok');end;这段是试验代码,就在加红色这句,如何去访问那个.cc,因为还有其它字段,如果明确写也可以,就是太多了,一个结构按一个表,就定义几十个字段,十几张表的话,代码就太多了,我想用两个for循环来做,不过就是不清楚如何去访问结构体里的元素,不知大家能懂我的意思不?

解决方案 »

  1.   

    自已顶一下了,procedure THJWXPYaYunFrm.BtnPackClick(Sender: TObject);
    var i,a,k,col_count,temp_col:Integer;
    b:Boolean;
    begin
      k:=0;
      for i:=1 to SG1.RowCount-1 do
        begin
          sg1.GetCheckBoxState(1,i,b);
          if b = True then
             inc(k);
        end;
      SetLength(Data_Pack.WXPYZ_Array_Pack,k);
      col_count:=SG1.ColCount;
      ShowMessage(IntToStr(col_count));
      a:=1;
      for i:=0 to k-1 do
        begin
          for temp_col:=3 to col_count do
            begin
              sg1.GetCheckBoxState(1,a,b);
              if b = True then
              Data_Pack.WXPYZ_Array_Pack[i].CC:=SG1.Cells[temp_col,a];
              Inc(a);
            end;
        end;
        ShowMessage('ok');end;
      

  2.   

    如果不是非常追求效率
    可以以ini的方式存放到一个字符串,内容是:属性名=值;属性名=值;属性名=值;...
    这样,数量不限,大小不限(当然最多2G),按名访问当然,在内存里,也可以是Thashstringlist
      

  3.   

    webservice服务器会生成一个WSDL文件,里面就会有数据类型的定义,客户端不用定义的,delphi会自动生成,uses进去,直接用就可以了。