Вас интерисует работает ли соединение нормально? Да, нормально. Вот код:
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 - итератор по сету с целочислеными значениями, которые нужны для вставки.