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;}