我是想把指定的字段中的数据保存到数组中,然后将这些数据写入到TstringList中,现在遇到了变体类型的数组不知道如何读出来,以下是部分代码,望各位能帮帮我。或者是直接通过什么其他方式写入到TstringList,那就更好了。procedure Tsvr_sp_jh.N6Click(Sender: TObject);
var a,b,data:Variant;
begin
  CopyTstringList.Clear;
  A:= VarArrayCreate([0,1],varolestr);
  B:= VarArrayCreate([0,1],varolestr);
  a[0]:='diaoru_bh';
  a[1]:='diaoru_zsl';
  data:=jhQuery.Recordset.GetRows(jhQuery.RecordCount,1,A[1]);  
  就这里data不知道如何读了
end;

解决方案 »

  1.   

    CopyTstringList.Add(VarToStr(data));
      

  2.   

    用1楼朋友的代码执行时也还是出现:could not convert variant of type (Array Variant) into type (String)
    望再次帮助,感谢。感谢~~~
      

  3.   

    data:= adoquery1.FieldByName('列').Value
      

  4.   

    未测试,特别是简单类型,也就是EasyArrayTypes ...const  EasyArrayTypes = [varSmallInt, varInteger, varSingle, varDouble, varCurrency,
                        varDate, varBoolean, varByte];
    type
      PIntArray = ^TIntArray;
      TIntArray = array[0..0] of Integer;  PVariantArray = ^TVariantArray;
      TVariantArray = array[0..0] of OleVariant;  TVarFlag = (vfByRef, vfVariant);
      TVarFlags = set of TVarFlag;uses
    ActiveX,ComObj;procedure VarArrayToStringList(const Value: OleVariant;
      const Data: TStringList);
    var
      VType, VSize, i, DimCount, ElemSize: Integer;
      LSafeArray: PSafeArray;
      LoDim, HiDim, Indices: PIntArray;
      V: OleVariant;
      P: Pointer;
    begin
      VType := VarType(Value);
      LSafeArray := PSafeArray(TVarData(Value).VPointer);
      DimCount := VarArrayDimCount(Value);
      VSize := SizeOf(Integer) * DimCount;
      GetMem(LoDim, VSize);
      try
        GetMem(HiDim, VSize);
        try
          for i := 1 to DimCount do
          begin
            LoDim[i - 1] := VarArrayLowBound(Value, i);
            HiDim[i - 1] := VarArrayHighBound(Value, i);
          end;
          begin
            GetMem(Indices, VSize);
            try
              for I := 0 to DimCount - 1 do
                Indices[I] := LoDim[I];
              while True do
              begin
                if VType and varTypeMask <> varVariant then
                begin
                  OleCheck(SafeArrayGetElement(LSafeArray, Indices^, TVarData(V).VPointer));
                  TVarData(V).VType := VType and varTypeMask;
                end else
                  OleCheck(SafeArrayGetElement(LSafeArray, Indices^, V));
                //WriteVariant(V, Data);
                Data.Add(VarToStr(V));
                Inc(Indices[DimCount - 1]);
                if Indices[DimCount - 1] > HiDim[DimCount - 1] then
                  for i := DimCount - 1 downto 0 do
                    if Indices[i] > HiDim[i] then
                    begin
                      if i = 0 then Exit;
                      Inc(Indices[i - 1]);
                      Indices[i] := LoDim[i];
                    end;
              end;
            finally
              FreeMem(Indices);
            end;
          end;
        finally
          FreeMem(HiDim);
        end;
      finally
        FreeMem(LoDim);
      end;
    end;
      

  5.   

    谢谢unsigned,按照您写的已经解决。非常的感谢。