Страница 1 из 1

Clarion - SQLite

Добавлено: 28 Июнь 2017, 10:10
pansoft
Добрый день!
Приложение на С10 база SQLite 3.
Вот такой код. Переносит данные из MSSQL в SQLite для дальнейшей отправки на сайт.

В результате выполнения происходит стремительное увеличение памяти выделенной под приложение.
Размер выгруженного файла 24 м, а память увеличивается на 240.
В общем DISPOSE(STT_) не срабатывает.
Экспорт запускается по расписанию каждые 3 часа. К вечеру память составляет 2G.
Может кто сталкивался.

Код: Выделить всё

Stt_&=NEW(File)
Stt_{PROP:Driver}='MSSQL'
Stt_{PROP:Owner}=GLO:ConnectionString
UnfixFormat(STT_)
STT_{PROP:SQL}='CALL spWebExport(8)'
FixFormat(Stt_)
if ERRORCODE()
    AmountErr=FILEERRORCODE()
    ThisWindow.AddMes(FILEERROR()&' FIX',2,1)
    UnfixFormat(STT_)
    DISPOSE(STT_)
    return AmountErr
END
WebPresence{PROP:SQL}='pragma journal_mode=off;'
WebPresence{PROP:Logout}=1
I=0
LOOP
    NEXT(Stt_)
    if errorcode() THEN
        break
    END
    I+=1
    AGroup&=Stt_{prop:Record}
    WPS:ItemId=WHAT(AGroup,1)
    WPS:StoreId=WHAT(AGroup,2)
    WPS:InStock=WHAT(AGroup,3)
    WPS:PriceWVat=WHAT(AGroup,4)
    WPS:ItemAmount=WHAT(AGroup,5)
    IF Access:WebPresence.TryInsert()<>Level:Benign
        I-=1
        BREAK
    END
END
CLOSE(Stt_)
COMMIT
!WebCatalog{PROP:SQL}='COMMIT;'
ThisWindow.AddMes('Наличие '&I,0,1)
UnfixFormat(STT_)
DISPOSE(STT_)

Clarion - SQLite

Добавлено: 28 Июнь 2017, 10:31
Yufil
Хмм... первый раз вижу полностью динамически создаваемый файл, без текущей записи и полей. А так можно? Скорее всего, и Кларион считает, что нельзя...

Clarion - SQLite

Добавлено: 28 Июнь 2017, 10:47
pansoft
В других приложениях работает без проблем.
Больше грешу на SQLite.

Clarion - SQLite

Добавлено: 28 Июнь 2017, 10:49
Admin
Yufil писал(а): 28 Июнь 2017, 10:31Скорее всего, и Кларион считает, что нельзя...
Но должно же работать если компилируется :)

Clarion - SQLite

Добавлено: 28 Июнь 2017, 10:51
Admin
pansoft писал(а): 28 Июнь 2017, 10:10WPS:ItemId=WHAT(AGroup,1)
странный WHAT без &=

Clarion - SQLite

Добавлено: 28 Июнь 2017, 10:53
Admin
Хотя нашел у SV одно место

Код: Выделить всё

                 LOC:ANYField &= WHAT(SELF.FieldsGroup, LOC:IndexG)
                 LOC:ANYField = WHAT(LOC:Group, parKey{PROP:Field,LOC:IndexK})

Clarion - SQLite

Добавлено: 28 Июнь 2017, 10:55
Дед Пахом
Народ первый раз увидел DFD :idied:

Clarion - SQLite

Добавлено: 28 Июнь 2017, 11:29
Yufil
Admin писал(а): 28 Июнь 2017, 10:49
Yufil писал(а): 28 Июнь 2017, 10:31Скорее всего, и Кларион считает, что нельзя...
Но должно же работать если компилируется :)
Можно откомпилировать замечательную программу

Код: Выделить всё

X   &LONG 
     CODE
     X=0 
Компилируется с полпинка. И должна работать...

Clarion - SQLite

Добавлено: 28 Июнь 2017, 12:54
Yufil
Может быть, по концу работы просто рестартовать программу. Есть у меня такие, как раз связанные с переносом данных, никаких особых фокусов нет, а память течёт...

Код: Выделить всё

RUN( Command(0) )
HALT

Clarion - SQLite

Добавлено: 28 Июнь 2017, 13:31
pansoft
Перезапускали раз в сутки. Но база выросла и теперь "раз в сутки" стало не хватать.

Clarion - SQLite

Добавлено: 28 Июнь 2017, 13:54
Yufil
Закончили экспортировать - срабатывает команда на перезапуск, снова экспортировали - опять перезапускаем на автомате. Или пускать через планировщик

Clarion - SQLite

Добавлено: 28 Июнь 2017, 15:31
pansoft
Yufil писал(а): 28 Июнь 2017, 13:54Или пускать через планировщик
Так и делаем.

Clarion - SQLite

Добавлено: 29 Июнь 2017, 7:23
finsoftrz
Я всегда такие вещи через планировщик делаю, запуская программу с ключиками. Планировщик виндовый или встроенный. В последнем случае программа запускает экземпляр себя же...