19 Ağustos 2015 Çarşamba

AXAPTA - Direk SQL ifadesi çalıştırma

 Bu blogda verilen örnek çok işime yaradı. Ancak bu blog ve diğer tüm bloglarda verilen örneklerde her kayıtta hep tek bir field okunmuş. Birden fazla field okumaya kalktığımda index hatası aldım. Daha sonra Microsoft'un bu sayfasında fieldların artan nümerik sırada okunması gerektiğini öğrendim ve sorunum çözülmüş oldu. Metodunuzu server tarafında çalıştırın. Yoksa yetki hatası alabilirsiniz. Insert ve delete işlemleri için de (Axapta tabloları için pek tavsiye edilebilecek bir durum olmasa da) executeQuery yerine executeUpdate metodunu kullanabilirsiniz.

public server static InventRep FillSQL(DatePhysical _DatePhysical = today())
{
    InventRep   InventRep;

    Connection      connection;
    Statement       statement;
    str             query,dateStr;
    Resultset       resultSet;

    ;

    dateStr = date2str(_DatePhysical,321,dateday::Digits2,dateseparator::None,
    datemonth::Digits2,dateseparator::None,dateyear::Digits4);

    connection = new Connection();
    statement = connection.createStatement();
    query =
        "select ITEMID,SUM(QTY)"+
        "from INVENTTRANS "+
        "where DATAAREAID='TST'"+
        "and DATEPHYSICAL <='"+dateStr+"' "+
        "group by ITEMID "+
        "having SUM(QTY) <>0";
     new SqlStatementExecutePermission(query).assert();
     resultSet = statement.executeQuery(query);
     while(resultSet.next())
     {
        //---- fieldlar mutlaka nümerik artan sırada okunmalı ------
        InventRep.ItemId = resultSet.getString(1);
        InventRep.Qty    = resultSet.getReal(2);
        InventRep.insert();
     }
     CodeAccessPermission::revertAssert();
}

Hiç yorum yok:

Yorum Gönder