• Delphi 变体数组 Dataset Locate 查找定位


    Format 函数

     Delphi 支持“开参数”和动态数组,变体数组,使用时的语法类似 Delphi 中的集合:采用两个方括号把不同类型的变量括起来(这太方便了啊),也可以采用声明一个 TVarRec 类型的数组来容纳不同的类型变量(具体请参阅其帮助文档)

    Format函数声明比较

    function Format(const Format: string; const Args: array of const): string; overload;

     extern DELPHI_PACKAGE UnicodeString __fastcall Format(const UnicodeString Format, TVarRec const *Args, const int Args_High)/* overload */;

    C++Builder 中,没有像 Delphi 中的那中语法特性,BCB 中的 Format 函数其第一个参数与 Delphi 的 Format
    是类似的(一个格式化描述字符串),而后面有两个参数,第二个参数是一个 TVarRec
    类型的数组指针,第三个参数是这个数组的最后一个元素的索引值!因为 C++
    不支持动态数组语法,也没有什么“开参数”之类的怪异特性,所以当你传递数组时,你必须同时传递数组的大小(Format
    要求的是数组的最后一个元素的索引值,因此大同小异)。刚才我说过,在 Delphi 中也可以用 TVarRec
    数组代替方括号的方法,其实本质是一样的。当然了,在 C++Builder 中,我们没有必要在每次使用 Format 函数时都先声明一个
    TVarRec 数组,然后再把要用于输出的变量赋给 TvarRec 数组的每一个元素,最后还要传递 TVarRec
    数组的最后元素索引。其实,我们可以使用一个 C++Builder 预先声明好的宏 ARRAYOFCONST,直接传入要格式化输出的变量

    C++builder中的Format函数ARRAYOFCONST参数

    Format( "My name is %s, I'm %d years old.",  ARRAYOFCONST(("Phoenix2000", 22)) );  //注意两个括号

    FDQuery1.Open函数声明比较

    procedure TFDRdbmsDataSet.Open(const ASQL: String; const AParams: array of Variant);

      FDQuery1.Open('select * from tt where id=:id',[0]);

     HIDESBASE void __fastcall Open(const UnicodeString ASQL, Variant const *AParams, const int AParams_High)/* overload */;

     Variant locvalues[1];
     locvalues[0] = Variant("01");
     FDQuery1->Open("select * from table where id=:id", locvalues, 0);

    TCustomDataSet.Locate函数声明比较

    Delphi

    function Locate(const KeyFields: string; const KeyValues: Variant;  Options: TLocateOptions): Boolean; override;

      CustTable.Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver', 'P', '408-431-1000']), [loPartialKey]);
    CustTable.Locate('ID', 1001, []);

    C++

    virtual bool __fastcall Locate(const UnicodeString KeyFields, const Variant &KeyValues, TLocateOptions Options);

    三个字段搜索
    TLocateOptions Opts; Variant locvalues[3]; locvalues[0] = Variant("Sight Diver"); locvalues[1] = Variant("P"); locvalues[2] = Variant("408-431-1000"); CustTable->Locate("Company;Contact;Phone", VarArrayOf(locvalues, 2), Opts);

    二个字段搜索
    Variant locvalues[2];
    locvalues[0] = Variant("Sight Diver");
    locvalues[1] = Variant("P");
    CustTable->Locate("Company;Contact", VarArrayOf(locvalues, 1), TLocateOptions());


    一个字段搜索
    FDMemTable1->Locate("fieldName", strVar, TLocateOptions());

     TLocateOptions ()<<loCaseInsensitive

  • 相关阅读:
    双向绑定v-bind
    梁山好汉为何成不了大气候?(转)
    八大排序算法(转)
    在c或c+程序里打印调用栈。转
    cocos2dx 做test遇到一个问题,记录下来
    我所理解的cocos2dx自适配屏幕大小方案
    eclipse pydev 跳转
    mac 系统通用快捷键(mac 下的应用多数会往这些标准看齐)(转:http://yang3wei.github.io/blog/2013/02/08/chen-ni-yu-mac-chen-ni-yu-xcode/)
    使用cgitb来简化异常调试(记录下来,感觉很有用)
    python trackback的使用心得
  • 原文地址:https://www.cnblogs.com/cb168/p/3953619.html
Copyright © 2020-2023  润新知