Arhīvs

Raksti, atzīmeti kā x++

Kā atlasīt unikālu ierakstu skaitu ar X++?

jūlijs 23rd, 2009 Mārtiņš Štāls 3 komentāri

Situācija tāda, ka nav standarta veida kā atlasīt unikālu ierakstu skaitu Axaptā. Tad viens variants, kā atrisināt šo problēmu ir izmantot klasi SqlStatementExecutePermission(AX4.0), lai izpildītu SQL. SQLā savukārt ir atslēgas vārds DISTINCT, kas nodrošina unikālu ierakstu atlasīšanu.

1) Vispirms izveido jaunu klasi, piemēram, Class1, kas izpildās servera pusē (Run on: Server) ar statisku metodi ‘recordCount’:

static int recordCount(Str _query)
{
    Connection                      connection = new Connection();
    Statement                       statement  = connection.createStatement();
    ResultSet                       resultSet;
    SqlStatementExecutePermission   permission;
    int                             result;
    ;
    permission = new SqlStatementExecutePermission(_query);
    permission.assert();
    resultSet = statement.executeQuery(_query);
    if (resultSet.next())
    {
        result = resultSet.getInt(1);
    }
   return result;
}

2) Un šinī piemērā izveidosim jaunu job:

static void stma1_CountDistinct(Args _args)
{
    str query = @"SELECT COUNT(DISTINCT RECID) FROM EMPLTABLE WHERE DATAAREAID='%1' AND CITY='%2'";
    int ret;
    ;
    query = strfmt(query, CurExt(), 'Liepāja');
    print Class1::recordCount(query);
    pause;
}

Tie kas saprot SQL uzreiz redz, kas te notiek. Respektīvi, no tabulas EmplTable tika atlasīti tikai tie ieraksti, kuriem City ir Liepāja. Savukārt mūsu metode RecordCount atgrieza šo ierakstu skaitu. Protams šo triviālo situāciju varēja atrisināt citādāk, bet ja skaitāmais lauks nebūtu RecId, tad būtu jāveido cikls, lai saskaitītu cik unikālu ierakstu ir bijis.