另var: v Variant;
v:=VararrayCreat([0,0],varVariant);
vv:=Tvardata(v).Varray  
当我通过Tvardata(v).Varray 把V转化为Pvararray类型后,
怎样访问里面的数据

解决方案 »

  1.   

    这是一个关于OLAP的应用,利用Microsfot ADO Data OBject(Mutil demesion) ActiveX控件开发的问题,此控件里有一个类Cellset(有点类似Grid样子).在VB里的应用如下:
    Dim conn as connection
    Dim cst as adomd.Cellset
    Dim c as string
    Dim i,j as integer
    .....
    c=cst.item[i,j].formatvlaue;(i,j表示行列值)
    或者c:=cst.item[m].formatvlaue;(max(m)=i*j)
    在Delphi里Import这个ActiveX后,发现在ADOMD_LIB.pas里定义
    Cellset.item(var idx:psafearray),即我不能简单的写
    c:=Cellset.item[i,j].formatvalue,类型不匹配。
    Psafearray在ACtivex.pas里有定义,结构如下:
    PSafeArrayBound = ^TSafeArrayBound;
      tagSAFEARRAYBOUND = record
        cElements: Longint;
        lLbound: Longint;
      end;
      TSafeArrayBound = tagSAFEARRAYBOUND;
      SAFEARRAYBOUND = TSafeArrayBound;
     PSafeArray = ^TSafeArray;
      tagSAFEARRAY = record
        cDims: Word;
        fFeatures: Word;
        cbElements: Longint;
        cLocks: Longint;
        pvData: Pointer;
        rgsabound: array[0..0] of TSafeArrayBound;
      end;
    我利用ACtivex.pas里提供的TVariantArg类进行转换即
    var 
    v:Variant
    temp:psafearray;
    begin
    v:=VarArrayCreate([0..m],Variant);
    temp:=TVariantArg(v).parray;
    转换后temp得到了V数组的维度和元素个数,但元素的值在哪?我不知道?
    而且关键在于我必须要得到Cellset.item(idx:psafearray).formatvalue,
    这个temp该怎样带进去?