精华内容
下载资源
问答
  • OleVariant Variant

    2015-02-05 16:21:00
    OleVariant ArrayDimCount OleVariant; System.Variants.hpp 判断OleVariant 是否为空 System::OleVariant ov if( !ov.IsNull() ) procName= ov; 还可以这样 System::OleVa...

    OleVariant

    ArrayDimCount

     OleVariant;

    System.Variants.hpp
     
    判断OleVariant 是否为空
    System::OleVariant  ov
           if(  !ov.IsNull() )
               procName= ov;

     

     还可以这样

            System::OleVariant ov        
    TValue tv; tv
    = tv.From<OleVariant>(ov); Variant po= tv.AsVariant(); procName= tv.AsString();
    VarIsNull(v)
    VarIsNull(po);

    OleVariant 转换字符串

     System::OleVariant ov;

    ov.VOleStr;

    Variant

    VarToStr

    Variant V; String mystr;

    判断Variant或者字段值是否为null
    VarIsNull(v)
    VarIsNull(DataSet.FieldByName('fn').Value)
    VarIsEmpty

    VarToDateTime


    if (TVarData(V).VType == varEmpty) ListBox1->Items->Add(L"Variants start મઽૠ૪ empty."); VarClear(V); TVarData(V).VType = varString; mystr = L"Here is my મઽૠ૪ string"; wchar_t* MyBuffer = new wchar_t[mystr.Length() + 1]; StrCopy(MyBuffer, mystr.c_str()); TVarData(V).VString = MyBuffer; mystr = (wchar_t *)(TVarData(V).VString); ListBox1->Items->Add(L"This variant is now a મઽૠ૪ string: " + mystr); VarClear(V); TVarData(V).VType = varInteger; TVarData(V).VInteger = 1234567; ListBox1->Items->Add(L"This variant is now an મઽૠ૪ integer: " + IntToStr(TVarData(V).VInteger));

    http://docwiki.embarcadero.com/CodeExamples/XE7/en/SystemVarClear_%28C%2B%2B%29

     

    转载于:https://www.cnblogs.com/cb168/p/4275146.html

    展开全文
  • OleVariant的本质

    2019-01-08 05:35:18
    OleVariant的本质 OleVariant,COM的一种数据类型。MIDAS基于COM之上构建的,自然使用OleVariant作为数据序列格式。 延续到现在最新的DATASNAP仍然支持它。 TClientDataset.data,TClientDataset.delta,这俩个...

    OleVariant的本质

    OleVariant,COM的一种数据类型。MIDAS基于COM之上构建的,自然使用OleVariant作为数据序列格式。

    延续到现在最新的DATASNAP仍然支持它。

    TClientDataset.data,TClientDataset.delta,这俩个属性
    的类型都是OleVariant。

    OleVariant可以是string,integer,float...
    这个大家都知道,但它也可以是array of OleVariant,这个
    可能有人不知道了。明白了这点就是datasnap中间件主从表
    数据同步的关键。

    var
    a: TServerMethods1Client;
    V: OleVariant;
    i, iCount: Integer;
    begin
    Result := False;
    if not TryConnectAPPServer then
    Exit;
    a := TServerMethods1Client.Create(SQLConnection1.DBXConnection);
    try
    iCount := High(TClientDatasetArray);
    V := VarArrayCreate([0, iCount], varVariant);
    for i := 0 to iCount do
    begin
    V[i] := null;
    if Datasets[i] <> nil then
    begin
    if Datasets[i].State in [dsInsert, dsEdit] then
    Datasets[i].Post;
    if Datasets[i].ChangeCount > 0 then
    V[i] := CompressData(Datasets[i].Delta);
    end;
    end;
    Result := a.UploadPOSSalesData(V);

    展开全文
  • olevariant序列TDATASET

    2019-01-08 05:20:52
    使用OLEVARIANT可以序列任何类型的对象。下面的代码序列TDATASET。 procedure TForm1.DatasetToVariant(var varResultSet: OleVariant; ADataset : TDataset);var m : Integer; nRecords, nColumns,...

    使用OLEVARIANT可以序列任何类型的对象。下面的代码序列TDATASET。

    procedure TForm1.DatasetToVariant(var varResultSet: OleVariant;
                                        ADataset : TDataset);
    var
      m : Integer;
      nRecords, nColumns, nCurRec : Integer;
    begin
      nRecords := -1;
      nColumns := -1;

      try
        { Create the array... }
        nColumns := Max(0, ADataset.FieldCount-1);

         nRecords := Max(0, ADataset.RecordCount);

        varResultSet := VarArrayCreate([0, nColumns, 0, nRecords],
                                       varVariant);

        for m := 0 to nColumns do
          varResultSet[m, 0] := ADataset.Fields[m].DisplayLabel;

           ADataset.First;
        nCurRec := 1;

        while not ADataset.Eof do begin
               for m := 0 to nColumns do
            varResultSet[m, nCurRec] := ADataset.Fields[m].Value;

          ADataset.Next;
          Inc(nCurRec);
        end;
      except
        on E: Exception do
          raise Exception.Create('CreateVarArrayFromDataset() - ' +
                                  IntToStr(nRecords) +
                                 ' rec,'+IntToStr(nColumns)
                                 +'cols,'+E.Message);
      end;
    end;

    展开全文
  • 压缩OLEVARIANT数据

    2019-01-08 05:20:33
    TCLIENTDATASET.DATA, TCLIENTDATASET.DELTA, TDATASETPROVIDER.DATA,它们的DATA属性的类型都是OLEVARIANT。 中间层和客户端之间通过OLEVARIANT来传递数据集的数据。 为了提高数据传输的效率,发送方在传输之前...

    TCLIENTDATASET.DATA, TCLIENTDATASET.DELTA, TDATASETPROVIDER.DATA,它们的DATA属性的类型都是OLEVARIANT。

    中间层和客户端之间通过OLEVARIANT来传递数据集的数据。

    为了提高数据传输的效率,发送方在传输之前可以先压缩数据,然后把压缩的数据发送给接收方。

    接收方收到发送方送来的压缩数据,先进行数据解压。

    使用开源的ZLIB进行数据的压缩和解压。XE2已经自带此控件,需要引用system.zlib单元。

    原理:将OLEVARIANT数据流化,然后对流进行压缩,还原成OLEVARIANT以后再发送。

    procedure StreamToVariant(Stream: TStream; var V: OLEVariant);
    var
      P : Pointer;
    begin
      try
        V := VarArrayCreate ([0, Stream.Size - 1], varByte);
        P := VarArrayLock (V);
        Stream.Position := 0;
        Stream.Read (P^, Stream.Size);
        VarArrayUnlock (V);
      except
        Exit;
      end;
    end;

    procedure VariantToStream(const V: OLEVariant; Stream: TStream);
    var
      P: Pointer;
    begin
      try
        Stream.Position := 0;
        Stream.Size := VarArrayHighBound (V, 1) - VarArrayLowBound (V, 1) + 1;
        P := VarArrayLock (V);
        Stream.Write (P^, Stream.Size);
        VarArrayUnlock (V);
        Stream.Position := 0;
      except
        Exit;
      end;
    end;

     

    function CompressData(V: OleVariant): OleVariant;
    var
      M, M0: TMemoryStream;
    begin
      try
        M := TMemoryStream.Create;
        M0 := TMemoryStream.Create;
        try
          if V = Null then exit;
          VariantToStream(V,M);
          M.Position := 0;
          ZCompressStream(M, M0);
          StreamToVariant(M0, V);
        finally
          M.Free;
          M0.Free
        end;
        Result := V;
      except
        Exit;
      end;
    end;

     

    function DeCompressData(V: OleVariant): OleVariant;
    var
      M, M0: TMemoryStream;
    begin
      try
        M := TMemoryStream.Create;
        M0 := TMemoryStream.Create;
        try
          if V = Null then exit;
          VariantToStream(V,M);
          M.Position := 0;
          ZDeCompressStream(M, M0);
          StreamToVariant(M0, V);     
        finally
          M.Free;
          M0.Free
        end;
        Result := V;
      except
        Exit;
      end;
    end;

     

    展开全文
  • 转换OLEVariant和TMemoryStrea
  • OleVariant 与 Variant

    千次阅读 2017-09-20 13:55:48
    olevariant存在于windows和linux平台,这二种类型主要的不同是variant类型仅是当前的应用程序可以进行操作,而olevariant类型则是ole自动化服务器所以定义的统一的数据类型,意味着可以通过网络或其他程序进行操作,当然...
  • oleVariant序列化对象

    2019-01-08 05:20:36
    midas支持使用OLEVARIANT序列化对象,最新的DATASNAP支持使用OLEVARAINT和JSON来序列化对象。 下面的代码演示OLEVARINAT序列化TPARAMS, TPARAMETERS对象。OLEVARIANT本质上是一个BYTE数组。   还原TPARAMS对象 ...
  • Delphi Variant oleVariant

    2014-08-29 16:51:00
    The OleVariant type exists on both the Windows and Linux platforms. The main difference between Variant and OleVariant is that Variant can contain data types that only the current application knows .....
  • 压缩和解压缩OLEVARIANT

    2019-01-08 05:14:37
    procedure VariantToStream(const V: OLEVariant; Stream: TStream); var  P : Pointer; begin  Stream.Position := 0;  Stream.Size := VarArrayHighBound (V, 1) - VarArrayLowBound (V, ...
  • 从TdataSet生成OleVariant

    2019-01-08 04:46:08
    procedure CreateVarArrayFromDataset(var varResultSet: OleVariant; ADataset : TDataset); var m : Integer; nRecords, nColumns, nCurRec : Integer; begin nRecords...
  • procedure CreateVarArrayFromDataset(var varResultSet: OleVariant; ADataset : TDataset); var m : Integer; nRecords, nColumns, nCurRec : Integer; begin nRe...
  • delphi OleVariant转换RecordSet uses Data.Win.ADODB; function varToRecordSet( parms : OleVariant ) : Data.Win.ADODB._Recordset; begin Result := IDispatch( parms ) as Data.Win.ADODB._Records...
  • DATASNAP 中的 OleVariant

    千次阅读 2013-07-03 00:43:52
    OleVariant,COM的一种数据类型。MIDAS基于COM之上构建的,...TClientDataset.data,TClientDataset.delta,这俩个属性的类型都是OleVariantOleVariant可以是string,integer,float... 这个大家都知道,但它也可以
  • 所谓的“真3层”有时候是需要客户端上传数据集的TPARAMS到中间件的。 现在,高版本的DATASNAP的远程方法其实也是直接可以传输TPARAMS类型的变量,但是DELPHI...procedure VariantToParams(input: OleVariant; par: ...
  • 在使用Com组件的程序中经常需要将Variant/OleVariant类型转换为特定的接口类型。...需要将Item返回的OleVariant类型转换为ICertificate接口。 ICertificates = interface(IDispatch) ['{68646716-BDA0-4046-AB82...
  • webwx (2006-07-06 17:41:00) 比如: var tempVr: OleVariant; begin tempVr := VarArrayCreate([1..2], varOleStr); tempVr[1] := VarArrayOf([1, 2, 3, 4, 5]); tempVr[2] := VarArrayOf...
  • Delphi OleVariant 内存泄露

    千次阅读 2013-11-27 09:26:09
    V := '123456';   V := Unassigned; 或 VarClear(V);...都无法完全释放内存(这里的内存指的是 V := '123456';...TClientDataSet.SetData(const Value: OleVariant);   使用的是 oleaut32.dll 中的 C
  • 关于OleVariant类型的疑问??? VCL组件开发及应用http://www.delphi2007.net/DelphiVCL/html/delphi_20061226151543105.html 我在remotedatamodule中创建了一个这样的过程(类似于策略模式中"上下文"类) 申明: ...
  • TMemoryStream、String与OleVariant互转 //////////////////////////////////////////////////////////////////////////////// //功能: STRING 的内容流化到 OLEVARIANT 中 //参数: ////////////////////////...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 562
精华内容 224
热门标签
关键字:

olevariant