天天看点

Create OleVariant from a Dataset

procedure CreateVarArrayFromDataset(var varResultSet: OleVariant;

                                    ADataset : TDataset);

var

  m : Integer;

  nRecords, nColumns, nCurRec : Integer;

begin

  nRecords := -1;

  nColumns := -1;

  try

    { Create the array... }

    { Set size to 0..m-1 where m equals the number of columns. }

    nColumns := Max(0, ADataset.FieldCount-1);

    { Each item is an array of size (0..n) where n equals the }

    { number of records.}

    { Entry 0 is where we store the column name. }

    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;

    { Populate from result set. }

    ADataset.First;

    nCurRec := 1; { Current record number. }

    while not ADataset.Eof do begin

      { Put in field values. }

      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;

继续阅读