传入的值有文本、数字、日期等,如何用array of const自动将值赋给Parameters.Item.Value?
procedure TDB.ExecSQL(SQL: String; const Params: array of const);
var
  i: ShortInt;
begin
  FADOComm.CommandText := SQL;
  FADOComm.Parameters.ParseSQL(SQL,True);
  for i := Low(Params) to High(Params) do
  begin
    FADOComm.Parameters.Items[i].Value := Params[i];(这里该如何写?用“PVariant(TVarRec(Params[I]).VVariant)^”提示类型不正确)  end;
  FADOComm.Execute;
end;

解决方案 »

  1.   

    你就写最简单的那种形式,如:
    select * from table1 where field1=:a ........FADOComm.Parameters.paramname('a').AsString:=edit1.text;  ///////用类似的方式传递好了
      

  2.   

    想做个通用的.这样的每次都得单独处理,麻烦.
    已找到方法,用Case判断类型后处理.
    但日期形无法处理,日期在Delphi为Double类型,在此会转成VExtended,无法处理.但这个类型中没有单独的日期类型,Delphi中定义如下:
      PVarRec = ^TVarRec;
      TVarRec = record { do not pack this record; it is compiler-generated }
        case Byte of
          vtInteger:    (VInteger: Integer; VType: Byte);
          vtBoolean:    (VBoolean: Boolean);
          vtChar:       (VChar: Char);
          vtExtended:   (VExtended: PExtended);
          vtString:     (VString: PShortString);
          vtPointer:    (VPointer: Pointer);
          vtPChar:      (VPChar: PChar);
          vtObject:     (VObject: TObject);
          vtClass:      (VClass: TClass);
          vtWideChar:   (VWideChar: WideChar);
          vtPWideChar:  (VPWideChar: PWideChar);
          vtAnsiString: (VAnsiString: Pointer);
          vtCurrency:   (VCurrency: PCurrency);
          vtVariant:    (VVariant: PVariant);
          vtInterface:  (VInterface: Pointer);
          vtWideString: (VWideString: Pointer);
          vtInt64:      (VInt64: PInt64);
      end;
    如何可以自动传递日期类型?