ParamsToVariant and VariantToParams

本文介绍了一个用于在不同数据类型间转换参数的实用函数。其中包括 functionParamsToVariant 函数,用于将参数列表转换为 Variant 类型;以及 VariantToParams 过程,用于从 Variant 类型还原参数。这些函数支持 Macro 和 Compatible 模式,并详细展示了如何处理不同类型的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 function ParamsToVariant(Params: TParams; Macro, Compatible: Boolean): Variant;
var
  I: Integer;
  Tmp: Variant;
begin
  if (Params.Count = 0) then
    Result := Null
  else begin
    Result := VarArrayCreate([0, Params.Count - 1], varVariant);
    for I := 0 to Params.Count - 1 do
      with Params[I] do
      begin
        if Compatible then
          Tmp := VarArrayOf([Name, Unassigned, Unassigned, Unassigned]) else
          Tmp := VarArrayOf([Name, Unassigned, Unassigned, Unassigned, Macro]);
        Tmp[3 - 2 * ord(Compatible)] := Value;
        Tmp[1 + ord(Compatible)] := Ord(DataType);
        Tmp[2 + ord(Compatible)] := Ord(ParamType);
        Result[I] := Tmp;
      end;
  end;
end;

 

procedure VariantToParams(const VarParams: Variant; Params: TParams; Compatible: Boolean);
var
  I: Integer;
  Param: TParam;
begin
  Params.Clear;

  if not VarIsNull(VarParams) then
    for I := 0 to VarArrayHighBound(VarParams, 1) do
    begin
      Param := Params.CreateParam(
        TFieldType(VarParams[I][1 + ord(Compatible)]),
        VarParams[I][0],
        TParamType(VarParams[I][2 + ord(Compatible)]));

      Param.DataType := TFieldType(VarParams[I][1 + ord(Compatible)]);
      if VarIsNull(VarParams[I][3 - 2 * ord(Compatible)]) or VarIsEmpty(VarParams[I][3 - 2 * ord(Compatible)]) then
        Param.Clear else Param.Value := VarParams[I][3 - 2 * ord(Compatible)];
    end;
end;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值