我在一个过程中频繁的用到A表中各字段(C,D,E,F,G),如果每次都OPEN得到一下,速度实在太慢,我想把A表中的各字段的的值(只有一行)放到一个STRINGLIST里,快速调用,请问应该STRINGLIST如何使用,如何调用(怎样分别每个字段),我是个新手,请给详细举举例子,谢谢

解决方案 »

  1.   

    function StrToStrings(vStr :String):Tstrings;
    var
      VL_Temp:String;
      VL_I :integer;
    begin
      Result :=TStringList.Create;
      VL_Temp :=vStr;
      while VL_Temp <>'' do
      begin
        VL_I :=POS(';',VL_Temp);
        if VL_I =0 then
        begin
          Result.Add(VL_Temp);
          VL_Temp :='';
        end
        else
        begin
          Result.Add(Copy(VL_Temp,0,VL_I-1));
          VL_Temp :=Copy(VL_Temp,VL_I+1,Length(VL_Temp)-VL_I);
        end;
      end;
    end;
      

  2.   

    function Check_pzlx(const zhtbm,pzhid,pzlxbm:String):Boolean;
    var
      SelQ:TQuery;
      Jfkm,Dfkm,Km:TStrings;
      Jfbykm,Dfbykm,Jfbwkm,Dfbwkm,Bykm:TStrings;
      i,j:integer;
    begin
      Result:=True;
      SelQ:=TQuery.Create(Nil);
      Jfkm:=TStringList.Create;
      Dfkm:=TStringList.Create;
      Km:=TStringList.Create;
      Jfbykm:=TStringList.Create;
      Dfbykm:=TStringList.Create;
      Jfbwkm:=TStringList.Create;
      Dfbwkm:=TStringList.Create;
      Bykm:=TStringList.Create;
      with SelQ do
      begin
        DatabaseName:=DBName;
        Sql.Add('select distinct kmbm,fx from t_pzmx,t_kmbm where t_pzmx.pzhid=:pzhid'
          +' and t_pzmx.kmid=t_kmbm.kmid and t_kmbm.zhtbm=:zhtbm');
        ParamByName('pzhid').AsString:=pzhid;
        ParamByName('zhtbm').AsString:=zhtbm;
        Prepare;
        Open;
        while not Eof do
        begin
          if FieldByName('fx').AsInteger=1 then
            Jfkm.Add(FieldByName('kmbm').AsString)
          else
            Dfkm.Add(FieldByName('kmbm').AsString);
          Km.Add(FieldByName('kmbm').AsString);
          Next;
        end;
        Close;
        Sql.Clear;
        Sql.Add('select mc,jbykm,dbykm,jbwkm,dbwkm,bykm from t_pzlx'
          +' where zhtbm=:zhtbm and pzlxbm=:pzlxbm');
        ParamByName('zhtbm').AsString:=zhtbm;
        ParamByName('pzlxbm').AsString:=pzlxbm;
        prepare;
        Open;
        if FieldByName('jbykm').AsString<>'' then
          Jfbykm:=StrToStrings(FieldByName('jbykm').AsString);
        if FieldByName('dbykm').AsString<>'' then
          Dfbykm:=StrToStrings(FieldByName('dbykm').AsString);
        if FieldByName('jbwkm').AsString<>'' then
          Jfbwkm:=StrToStrings(FieldByName('jbwkm').AsString);
        if FieldByName('dbwkm').AsString<>'' then
          Dfbwkm:=StrToStrings(FieldByName('dbwkm').AsString);
        if FieldByName('bykm').AsString<>'' then
          bykm:=StrToStrings(FieldByName('bykm').AsString);
      end;
    ................
      

  3.   

    var
        s:Tstringlist;
    begin
        s:=Tstringlist.Create();
        s.Add('1');
        s.Add('2');//加你select 出来的字段
        showmessage(s.Strings[1]);//增加的第2个子段值
        s.Free;
      

  4.   

    var
    s:Tstringlist
    i:integer;
    begin
    s:=Tstringlist.create();
    with query1 do
    begin
      for i:= 0 to FieldCount - 1 do
       s.Add(Fields[i].AsString);
    end;不过,如果你只要保留值,不需要另外用stringlist啊,直接用或者new一个DataSet保存不就行了