zoukankan      html  css  js  c++  java
  • 关于AX中的Query是如何查询记录

      Query不用来单独查询数据,常用于创建QueryRun对象,Query是静态的

     Query query = new Query();  如果构造Query时不指定参数则创建一个临时的Query,那就就不会储存到AOT中
        // 使用query构造QueryRun对象
        QueryRun qr = new QueryRun (query);
        ;
     Qyery创建之后就可以调用addDataSource方法用于向Query中添加一个数据源
    queryBuildDataSource = query.addDataSource(TableNum(CustTable));  //TableNum获取一个表的ID
    有了数据源就可以构建一个 queryBuildRange  对象,调用queryBuildDataSource 的addRange方法构建,addRange()的参数是fieldID,需用FieldNum来获得,FieldNum有两个参数,一个是表名一个是字段名。
    queryBuildRange = queryBuildDataSource.addRange(FieldNum(CustTable,AccountNum));

    现在queryBuildRange构造之后就可以添加匹配条件了,调用queryBuildRange的 value方法,参数是str类型,返回值也是str,这个value返回什么内容目前不清楚,看MSDN说明好像是存储一个字符串用。

    queryBuildRange.value("4000..5000");        // 这里的意思是在AccountNum字段上设置一个匹配条件为4000至5000 

    经过以上操作之后,现在query中有了数据源,也有了匹配条件,那么接下来就是运行这个query了

    要运行query需用queryRun对象

    queryRun = new queryRun(query);
    QueryRun的Next方法与Get方法通常于循环取出Query中的记录
    如:
    {
        queryRun qr;
        CustTable ct;
        // ...
        if (qr.prompt())
        {
            while (qr.next())
            {
                if (qr.Changed(tableNum(CustTable)))  //确定指定的数据源获取了一个新的值
                {
                    ct = qr.Get (tableNum(CustTable)); // 从queryrun中获取记录
                    print ct.AccountNum;
                }
            }
        }
    }

     

    查询包含一个或多个数据源对应的数据库表中。 指定的数据源使用 QueryBuildDataSource 对象

    指定范围使用 queryBuildRange 对象

    static void PrintCustTrans(Args _args)

    {    CustTable   tmpCust,selTbl; 

      Query   query; 

      QueryBuildDataSource    queryBuildDataSource; 

      QueryBuildRange     queryBuildRange;

        QueryRun    queryRun; 

      ; 

       if ( hasSecurityKeyAccess(securityKeyNum(SysDevelopment),        AccessType::Edit) ) 

      {  

      //select * from custTable where custTable.AccountNum == '1000001'; 

      query = new Query();

          queryBuildDataSource = query.addDataSource(tablenum(CustTable)); 

          queryBuildRange = queryBuildDataSource.addRange(fieldnum(CustTable,AccountNum));

        queryBuildRange.value("1000001..1000006");

        queryRun = new QueryRun(query); 

      if (queryRun.prompt())   

    {   

    while (queryRun.next())   

    {       

    if (queryRun.changed(tableNum(Custtable)))       

    {           

    tmpCust = queryRun.get(tablenum(Custtable)); 

             print tmpCust.AccountNum;     

      }        

      }   

    }     

      }   

    pause;}

  • 相关阅读:
    模拟赛总结
    2018.04.06学习总结
    2018.04.06学习总结
    Java实现 LeetCode 672 灯泡开关 Ⅱ(数学思路问题)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 670 最大交换(暴力)
    Java实现 LeetCode 670 最大交换(暴力)
    Java实现 LeetCode 670 最大交换(暴力)
  • 原文地址:https://www.cnblogs.com/perock/p/1997309.html
Copyright © 2011-2022 走看看