Показать сообщение отдельно
Старый 03.04.2009, 23:51   #5  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от miklenew Посмотреть сообщение
Тоже надоела ненужная синхронизация.
В результате переписал метод вот так:
X++:
boolean dbSynchronize(tableId tableId         = 0,   // 0 = all tables, non-zero is a valid table handle
                      boolean syncAsNeeded    = true,  // true = objects touched in the AOT, false = unconditional synchronize
                      boolean continueOnError = true,
                      boolean showProgress    = true ) // true = report all problems, but throw only after all tables are synchronized, false = stop synchronize after first error/problem
{
    SqlSyncPending  sqlSyncPending = new SqlSyncPending();
    boolean         ok;
    ;
    setPrefix("@SYS22807");
    if (SQLSyncPending.databaseTouched()                                        &&
        Box::yesNo("Синхронизировать?", DialogButton::Yes) == DialogButton::Yes)
            ok = super(tableId, syncAsNeeded, continueOnError, showProgress);
    else
    {
        new SQLSyncPending().databaseTouched(false);
        ok = true;
    }
    if (ok && this.isRunningMode())
    {
        SysApplicationSetup::saveApplicationVersion(SysApplicationSetupMode::Synhronize);
        // HansBred - SP4 - PS #5544
        SysSQLInitDbTriggers::CheckExistsDBTriggers();
    }

    return ok;
}
Но теперь если я просто хочу встать на любую таблицу и синхронизировать её, то никаких действий не происходит.
Может кто знает как довести до ума?
Это из-за вот этого if (SQLSyncPending.databaseTouched() &&
Когда просто синхронизиться таблица "по требованию" то "точед"==false и у вас синхронизация никогда не выполняется. В случае же изменения EDT там будет true.
Т.е. надо спрашивать только тогда когда SQLSyncPending.databaseTouched()==true (ну или вообще всегда )
__________________
Zhirenkov Vitaly