Показать сообщение отдельно
Старый 07.09.2011, 13:16   #9  
sobik is offline
sobik
Участник
Аватар для sobik
 
28 / 10 (1) +
Регистрация: 30.08.2010
Вас интерисует работает ли соединение нормально? Да, нормально. Вот код:
X++:
#NMF_WinPackDepartamentsUpdate
boolean checkODBCConnection()
{
    //данные соединения
    LoginProperty makeLoginProperty()
    {
        LoginProperty   loginProperty;

        ;
        loginProperty = new LoginProperty();

        loginProperty.setDSN(#DSN_TEST_NAME);
        loginProperty.setUsername(#SQL_USER_NAME);
        loginProperty.setPassword(#SQL_USER_PASSWORD);
        return loginProperty;
    }
    ;
      // проверяем ODBC соединение
    try
    {
        conn = new OdbcConnection(makeLoginProperty());
        return true;
    }
    catch
    {
        info(#ODBC_USER_ERROR);
        return false;
    }
}
В макросе - параметры соедниния

Вот код, создающий выражение, через которое идут запросы:
X++:
void prepare()
{
    if(this.checkODBCConnection())
    {
         statement      =  conn.createStatement();
    }
    else
    {
        error(#ODBC_CONNECT_ERROR);
    }
}
Вот код, который вставляет правильно:
X++:
 conn.ttsbegin();
    while select organization join structure   where  (organization.NMF_GSMStructureId == structure.StructureId) &&
                                                      (structure.NMF_WinpakAccess == NoYes::Yes)
                                               exists join empltable where (emplTable.RpayHrmOrganistionId == organization.hrmOrganizationId) &&
                                               (emplTable.PayResignedDate_RU == dateNull() || emplTable.PayResignedDate_RU > mkdate(2,9,2011))

    {
        
        SqlCommand      =       strFmt("Insert INTO Account (AccountID,UserId, NodeID, Deleted,UserPriority,AcctName, TimeStamp) VALUES (%1,%2,%3,%4,%5,'%6','%7') ",
                                        0,
                                        1,
                                        0,
                                        0,
                                        0,
                                        Global::strReplace(subStr(organization.description,1,30),"'",""),
                                        currentTime
                                        );
        statement.executeUpdate(SqlCommand);
    }
    conn.ttscommit();
Вот код, который не отрабатывает:

X++:
  conn.ttsbegin();
    while(it.more())
    {

        sqlCommand
        = strFmt("Insert INTO NFTabLayout (AccountId, UserID, NodeID, Deleted, UserPriority, TabName1, TabName2, TabName3, TabName4, TabName5,"+
        "TabOrder, NF1, NF2, NF3, NF4, NF5, NF6, NF7, NF8, TimeStamp) VALUES (%1,%2,%3,%4,%5,'%6','%7','%8','%9','%10',%11,%12,%13,%14,%15,%16,%17,%18,%19,'%20')",
                it.value(),
                1,
                0,
                0,
                0,
                "Особисті данні",
                "Особисті данні",
                "Особисті данні",
                "Особисті данні",
                "Особисті данні",
                1,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8,
                currentTime

        );
        statement.executeUpdate(sqlCommand);
        i =  statement.getLastError();
        it.next();
    }
    conn.ttscommit();
Таблицы Account и NFTabLayout находятся на одном и том же сервере, в одной БД.
it - итератор по сету с целочислеными значениями, которые нужны для вставки.